Make_TestCollection.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. using System;
  2. using System.Data;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. using UAS_MES.DataOperate;
  8. using UAS_MES.Entity;
  9. using UAS_MES.PublicMethod;
  10. namespace UAS_MES.Make
  11. {
  12. public partial class Make_TestCollection : Form
  13. {
  14. DataHelper dh = null;
  15. DataTable dt = null;
  16. //是否获取过参数,获取过参数则设置为true,在序号值变化的时候设置为false
  17. //当前工序的编号
  18. string ms_nextstepcode;
  19. //当前工序的名称
  20. string ms_stepname;
  21. //下一工序编号
  22. //string ms_nextstepcode;
  23. //工序编号
  24. string ma_craftcode;
  25. //制造单号
  26. string ms_macode;
  27. //用于保存是否之前输入的ma_code
  28. //用于保存是否之前输入的ms_sncode
  29. string ms_sncode1;
  30. LogStringBuilder sql = new LogStringBuilder();
  31. AutoSizeFormClass asc = new AutoSizeFormClass();
  32. public Make_TestCollection()
  33. {
  34. InitializeComponent();
  35. }
  36. private void TestCollection_Load(object sender, EventArgs e)
  37. {
  38. dh = new DataHelper();
  39. GoodProduct.Checked = true;
  40. ms_sncode.Focus();
  41. asc.controllInitializeSize(this);
  42. //设置锁定工单
  43. LockMakeCode.GetMakeCodeCtl(ma_code);
  44. ma_code.SetLockCheckBox(LockMakeCode);
  45. //工单号放大镜配置
  46. ma_code.TableName = "make left join product on ma_prodcode=pr_code";
  47. ma_code.SelectField = "ma_code # 工单号,ma_prodcode # 产品编号,ma_qty # 工单数量,pr_detail # 产品名称";
  48. ma_code.FormName = Name;
  49. ma_code.SetValueField = new string[] { "ma_code", "ma_prodcode", "ma_qty", "pr_detail" };
  50. ma_code.Condition = "ma_statuscode='STARTED'";
  51. }
  52. /// <summary>
  53. /// 将已选不良移动到待选不良
  54. /// </summary>
  55. /// <param name="sender"></param>
  56. /// <param name="e"></param>
  57. private void WaitReject_Click(object sender, EventArgs e)
  58. {
  59. int CheckedNum = 0;
  60. //已存在在ListView中的Item是不能添加到其他ListView中的,需要调用其克隆的方法
  61. for (int i = ChoosedRejectList.Items.Count - 1; i >= 0; i--)
  62. {
  63. if (ChoosedRejectList.Items[i].Checked)
  64. {
  65. WaitRejectList.Items.Add((ListViewItem)ChoosedRejectList.Items[i].Clone());
  66. ChoosedRejectList.Items[i].Remove();
  67. CheckedNum++;
  68. }
  69. }
  70. if (CheckedNum == 0)
  71. {
  72. for (int i = ChoosedRejectList.Items.Count - 1; i >= 0; i--)
  73. {
  74. WaitRejectList.Items.Add((ListViewItem)ChoosedRejectList.Items[i].Clone());
  75. ChoosedRejectList.Items[i].Remove();
  76. }
  77. }
  78. }
  79. /// <summary>
  80. /// 将不良信息移动到已选不良
  81. /// </summary>
  82. /// <param name="sender"></param>
  83. /// <param name="e"></param>
  84. private void ChooseedReject_Click(object sender, EventArgs e)
  85. {
  86. int CheckedNum = 0;
  87. for (int i = WaitRejectList.Items.Count - 1; i >= 0; i--)
  88. {
  89. if (WaitRejectList.Items[i].Checked)
  90. {
  91. ChoosedRejectList.Items.Add((ListViewItem)WaitRejectList.Items[i].Clone());
  92. WaitRejectList.Items[i].Remove();
  93. CheckedNum++;
  94. }
  95. }
  96. if (CheckedNum == 0)
  97. {
  98. for (int i = WaitRejectList.Items.Count - 1; i >= 0; i--)
  99. {
  100. ChoosedRejectList.Items.Add((ListViewItem)WaitRejectList.Items[i].Clone());
  101. WaitRejectList.Items[i].Remove();
  102. }
  103. }
  104. }
  105. private void CleanInfo_Click(object sender, EventArgs e)
  106. {
  107. OperateResult.Clear();
  108. }
  109. private void ms_code_KeyDown(object sender, KeyEventArgs e)
  110. {
  111. if (e.KeyCode == Keys.Enter)
  112. {
  113. if (ms_sncode.Text.Trim() != "" && ma_code.Text != "")
  114. {
  115. string ErrorMessage = "";
  116. bool ifFirst;
  117. if (LogicHandler.CheckCurrentStepAndIfFirst(ms_sncode.Text, ma_code.Text, User.UserSourceCode, Tag.ToString(), out ifFirst, out ErrorMessage))
  118. {
  119. //如果采集为良品则不再允许采集
  120. if (GoodProduct.Checked)
  121. {
  122. dt = (DataTable)dh.ExecuteSql("select ms_nextstepcode,ms_stepcode,ms_status from makeserial where ms_sncode='" + ms_sncode.Text + "' and ms_makecode='" + ma_code.Text + "'", "select");
  123. string status = dt.Rows[0]["ms_status"].ToString();
  124. string nextstepcode = dt.Rows[0]["ms_nextstepcode"].ToString();
  125. string stepcode = dt.Rows[0]["ms_stepcode"].ToString();
  126. if (nextstepcode != User.CurrentStepCode && stepcode == User.CurrentStepCode && (status == "1" || status == "2"))
  127. {
  128. OperateResult.AppendText(">>该序列号已执行过" + User.CurrentStepCode + "工序,采集结果为良品\n", Color.Red);
  129. return;
  130. }
  131. }
  132. SetCollectResult();
  133. }
  134. else
  135. OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red);
  136. if (!Reject.Checked)
  137. ms_sncode.Text = "";
  138. }
  139. else if (ma_code.Text == "")
  140. {
  141. sql.Clear();
  142. sql.Append("select ma_code,ma_qty,ma_prodcode,mcd_inqty,ma_qty-mcd_inqty mcd_remainqty,pr_detail from make left join makeserial on ");
  143. sql.Append("ma_code=ms_makecode left join product on ms_prodcode=pr_code left join makecraftdetail on ");
  144. sql.Append("mcd_macode=ms_makecode where ms_sncode='" + ms_sncode.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'");
  145. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  146. if (dt.Rows.Count > 0)
  147. {
  148. BaseUtil.SetFormValue(Controls, dt);
  149. SetCollectResult();
  150. }
  151. else
  152. {
  153. OperateResult.AppendText(">>序列号" + ms_sncode.Text + "不存在或不对应当前工序\n", Color.Red);
  154. return;
  155. }
  156. }
  157. }
  158. }
  159. private void bc_groupcode_SelectedIndexChanged(object sender, EventArgs e)
  160. {
  161. LoadBadCodeListView();
  162. }
  163. /// <summary>
  164. /// 填充不良组别信息
  165. /// </summary>
  166. private void LoadBadGroupData()
  167. {
  168. //如果ms_makecode的值修改过再去查询
  169. sql.Clear();
  170. sql.Append("select pb_badgroup from make left join product on pr_code=ma_prodcode left join ");
  171. sql.Append("productkind on pk_name=pr_kind left join productbadgroup on pk_code=PB_KINDCODE where ma_code='" + ma_code.Text + "'");
  172. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  173. if (dt.Rows.Count > 0)
  174. {
  175. //设置Combox的下拉值
  176. bc_groupcode.DataSource = dt;
  177. bc_groupcode.DisplayMember = "pb_badgroup";
  178. bc_groupcode.ValueMember = "pb_badgroup";
  179. }
  180. }
  181. /// <summary>
  182. /// 加载不良代码的ListView的信息
  183. /// </summary>
  184. private void LoadBadCodeListView()
  185. {
  186. sql.Clear();
  187. sql.Append("select bc_code,bc_name from badgroup left join badcode on bc_groupcode=bg_code where bc_groupcode='" + bc_groupcode.Text + "'");
  188. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  189. bc_code.DataSource = dt;
  190. bc_code.DisplayMember = "bc_name";
  191. bc_code.ValueMember = "bc_code";
  192. //往listview中添加数据
  193. WaitRejectList.Items.Clear();
  194. WaitRejectList.BeginUpdate();
  195. for (int i = 0; i < dt.Rows.Count; i++)
  196. {
  197. ListViewItem lvi = new ListViewItem();
  198. //第一列是勾选列,设置列头文本为空
  199. lvi.Text = "";
  200. for (int j = 0; j < dt.Columns.Count; j++)
  201. lvi.SubItems.Add(dt.Rows[i][j].ToString());
  202. WaitRejectList.Items.Add(lvi);
  203. }
  204. WaitRejectList.EndUpdate();
  205. }
  206. /// <summary>
  207. /// 设置良品或者不良品的采集结果
  208. /// </summary>
  209. private void SetCollectResult()
  210. {
  211. string ErrorMessage = "";
  212. //如果勾选的是不良品
  213. if (Reject.Checked)
  214. {
  215. //加载不良信息
  216. LoadBadGroupData();
  217. }
  218. if (GoodProduct.Checked)
  219. {
  220. string RejectRecordNum = dh.getFieldDataByCondition("makeBad", "count(1) cn", "mb_sncode='" + ms_sncode.Text + "' and mb_status not in (1,-1)").ToString();
  221. //存在不良记录
  222. if (int.Parse(RejectRecordNum) > 0)
  223. {
  224. OperateResult.AppendText(ms_sncode.Text + "存在不良记录,不允许通过!\n", Color.Red);
  225. }
  226. else
  227. {
  228. //良品信息采集
  229. if (LogicHandler.UpdateMakeMessage(ms_sncode.Text, ma_code.Text, User.UserSourceCode, User.UserName, "检测合格", out ErrorMessage))
  230. {
  231. OperateResult.AppendText(">>" + ms_sncode.Text + "已采集为良品\n", Color.Green);
  232. ms_sncode.Text = "";
  233. }
  234. else
  235. OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red);
  236. }
  237. }
  238. dt = (DataTable)dh.ExecuteSql("select mcd_inqty,ma_qty-mcd_inqty mcd_remainqty from make left join makecraftdetail on mcd_macode=ma_code where ma_code='" + ma_code.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'", "select");
  239. BaseUtil.SetFormValue(Controls, dt);
  240. }
  241. private void 测试采集_SizeChanged(object sender, EventArgs e)
  242. {
  243. asc.controlAutoSize(this);
  244. }
  245. private void Save_Click(object sender, EventArgs e)
  246. {
  247. string ErrorMessage = "";
  248. if (ChoosedRejectList.Items.Count == 0 && bc_code.Text == "")
  249. OperateResult.AppendText(">>不良品必须选择不良原因和不良代码!\n", Color.Red);
  250. else
  251. {
  252. //判断不良原因代码是否重复,不良原因保存表(makebad)
  253. //保存前台传送的不良信息保存至makebad 表。(判断不良原因是否重复)
  254. //新建不良代码和备注的变量
  255. //不良品的输入
  256. int RejectCount = ChoosedRejectList.Items.Count;
  257. //如果用户选择了自动填写了不良备注和不良代码,将不良数组拉长一位,第一位用于存放用户自行填写的信息
  258. string[] bccode = new string[bc_code.Text == "" ? RejectCount : RejectCount + 1];
  259. string[] bcremark = new string[bc_code.Text == "" ? RejectCount : RejectCount + 1];
  260. //如果长度不相等表示用户自行填写了
  261. if (bccode.Length != RejectCount)
  262. {
  263. bccode[0] = bc_code.Text;
  264. bcremark[0] = bc_remark.Text;
  265. }
  266. //用户未填写不良代码一切按照正常逻辑,填写了从index=1开始执行
  267. for (int i = (bc_code.Text == "" ? 0 : 1); i < (bc_code.Text == "" ? RejectCount : RejectCount + 1); i++)
  268. {
  269. if (!(bccode[0] == ChoosedRejectList.Items[bc_code.Text == "" ? i : i - 1].SubItems[1].Text))
  270. {
  271. //获取所有的不良代码
  272. bccode[i] = ChoosedRejectList.Items[bc_code.Text == "" ? i : i - 1].SubItems[1].Text;
  273. //获取所有的不良备注
  274. bcremark[i] = ChoosedRejectList.Items[bc_code.Text == "" ? i : i - 1].SubItems[2].Text;
  275. }
  276. }
  277. //不良信息采集
  278. if (LogicHandler.SetTestNGDetail(ms_sncode.Text, ma_code.Text, User.UserName, User.UserSourceCode, "检查未通过", bccode, bcremark, out ErrorMessage))
  279. {
  280. OperateResult.AppendText(">>" + ms_sncode.Text + "已采集为不良\n", Color.Green);
  281. //清除不良信息
  282. bc_groupcode.DataSource = null;
  283. bc_groupcode.Text = "";
  284. bc_code.DataSource = null;
  285. bc_code.Text = "";
  286. WaitRejectList.Items.Clear();
  287. ChoosedRejectList.Items.Clear();
  288. ms_sncode.Text = "";
  289. }
  290. else
  291. OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red);
  292. }
  293. }
  294. }
  295. }