Make_Repair.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Drawing;
  5. using System.Text;
  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_Repair : Form
  13. {
  14. string caller = "Make!Repair";
  15. //记录维修结果的代码值
  16. string Repair_Result;
  17. //记录不良状态码
  18. string badcode;
  19. //记录不良组别
  20. string groupcode;
  21. //判断是否获取了下拉框的值
  22. string mb_id1;
  23. //记录插入操作日志表的sql
  24. string cm_makecode;
  25. //执行插入日志的SQL
  26. string insert_makeprocess = "insert into makeprocess(mp_id,mp_makecode,mp_maid, mp_mscode,mp_sncode,mp_stepcode,mp_stepname,mp_craftcode,mp_craftname,mp_kind,mp_result,mp_indate,mp_inman,mp_wccode,mp_linecode,mp_sourcecode) select MakeProcess_seq.nextval, ma_code,ma_id,ms_code,ms_sncode,mcd_stepcode,mcd_stepname,ma_craftcode,'','维修作业','#',sysdate,'" + User.UserName + "',ma_wccode,ma_linecode,'' from make left join makecraftdetail on mcd_macode=ma_code left join makeserial on ms_makecode=ma_code where ms_sncode=:ms_sncode and ma_code=:ma_code";
  27. //是否获取过下拉框数据
  28. bool GetSelectData = false;
  29. DataHelper dh = null;
  30. LogStringBuilder sql = new LogStringBuilder();
  31. List<string> sqls = new List<string>();
  32. DataTable dt = null;
  33. AutoSizeFormClass asc = new AutoSizeFormClass();
  34. public Make_Repair()
  35. {
  36. InitializeComponent();
  37. //为DBFind配置Call和Form的名称
  38. cr_code.FormName = Name;
  39. cr_code.TableName = "craft";
  40. cr_code.SelectField = "cr_name # 工艺名称 ,cr_code # 工艺编号,cr_prodcode # 物料编号";
  41. cr_code.SetValueField = new string[] { "cr_code" };
  42. cd_stepcode.FormName = Name;
  43. cd_stepcode.TableName = "craftdetail left join step on st_code=cd_stepcode left join craft on cd_crid=cr_id";
  44. cd_stepcode.SetValueField = new string[] { "cd_stepcode" };
  45. cd_stepcode.SelectField = "cd_stepname # 工序名称 ,cd_stepcode # 工序编号,cd_stepno # 执行顺序";
  46. cd_stepcode.Condition = "ST_STATUSCODE='AUDITED' and cr_code='" + cr_code.Text + "'";
  47. RepairResult.Text = "待维修";
  48. ms_nextstepcode.Text = User.CurrentStepCode;
  49. st_name.Text = User.CurrentStepName;
  50. }
  51. private void 维修作业_Load(object sender, EventArgs e)
  52. {
  53. //添加不良信息的静态数据
  54. ItemObject[] io = new ItemObject[4];
  55. io[0] = new ItemObject("待维修", "0");
  56. io[1] = new ItemObject("已维修", "1");
  57. io[2] = new ItemObject("不可维修", "2");
  58. io[3] = new ItemObject("无不良", "-1");
  59. RepairResult.Items.AddRange(io);
  60. dh = new DataHelper();
  61. asc.controllInitializeSize(this);
  62. }
  63. private void GetSNCode_KeyDown(object sender, KeyEventArgs e)
  64. {
  65. if (e.KeyCode == Keys.Enter)
  66. {
  67. //如果勾选了换料
  68. if (Refueling.Checked)
  69. {
  70. dt = (DataTable)dh.ExecuteSql("select bar_status,bar_code,bar_prodcode from barcode where bar_code ='" + GetSNCode.Text + "'", "select");
  71. if (dt.Rows.Count == 0)
  72. {
  73. OperatResult.AppendText(">>条码" + GetSNCode.Text + "不存在\n", Color.Red);
  74. }
  75. else
  76. {
  77. //获取条码对应的产品code
  78. string bar_prodcode = dt.Rows[0]["bar_prodcode"].ToString();
  79. string bar_code = dt.Rows[0]["bar_code"].ToString();
  80. dt = (DataTable)dh.ExecuteSql("select cm_makecode from craftmaterial where cm_sncode='" + ms_sncode.Text + "' and cm_soncode='" + bar_prodcode + "'", "select");
  81. if (dt.Rows.Count == 0)
  82. {
  83. OperatResult.AppendText(">>该条码对应的物料" + bar_prodcode + "不是该工单所需物料\n", Color.Red);
  84. }
  85. else
  86. {
  87. dt = (DataTable)dh.ExecuteSql("select cm_sncode from craftmaterial where cm_makecode='" + ma_code.Text + "' and cm_barcode='" + bar_code + "' and nvl(cm_statuscode,'')<>'D'", "select");
  88. if (dt.Rows.Count != 0)
  89. {
  90. OperatResult.AppendText(">>该条码已经上料,绑定SN号" + ms_sncode.Text + ",不允许重复上料\n", Color.Red);
  91. }
  92. else
  93. {
  94. //进行一个下料再上料操作 //报废一个单位用量
  95. sqls.Add("update craftmaterial set cm_status='下料',cm_statuscode='D',cm_barcode='" + GetSNCode.Text + "' where cm_makecode='" + ma_code.Text + "' and cm_soncode='" + bar_prodcode + "' and cm_mscode='" + ms_sncode.Text + "'");
  96. //记录日志makeprocess 维修作业,下料
  97. dh.ExecuteSql(insert_makeprocess.Replace("#", "下料"), "insert", ms_sncode.Text, ma_code.Text);
  98. //将原条码对应的数据写入到craftmaterial 表中
  99. sql.Clear();
  100. sql.Append("insert into Craftmaterial (cm_id,cm_makecode,cm_maid,cm_maprodcode,cm_soncode,");
  101. sql.Append("cm_mscode,cm_sncode,cm_stepcode,cm_stepname,cm_craftcode,cm_craftname,cm_barcode,cm_inqty,");
  102. sql.Append("cm_indate,cm_inman,cm_linecode,cm_wccode,cm_sourcecode,cm_spid)");
  103. sql.Append("select Craftmaterial_seq.nextval,ma_code,ma_id,ma_prodcode,msl_prodcode,ms_code,ms_sncode,");
  104. sql.Append("ms_stepcode,ms_stepname,ma_craftcode, ma_craftname,msl_barcode, msl_baseqty, sysdate,'" + User.UserName + "',");
  105. sql.Append("ma_linecode,ma_wccode,ms_sourcecode,sp_id from make left join makeserial on ms_makecode = ma_code ");
  106. sql.Append("left join makesmtlocation on msl_makecode=ma_code left join stepProduct on sp_mothercode=ma_prodcode and ");
  107. sql.Append("sp_stepcode=ms_nextstepcode where ms_sncode='" + ms_sncode.Text + "' and nvl(msl_status,0)=0");
  108. sqls.Add(sql.GetString());
  109. //记录日志makeprocess维修作业,上料
  110. dh.ExecuteSql(insert_makeprocess.Replace("#", "上料"), "insert", ms_sncode.Text, ma_code.Text);
  111. dh.ExecuteSQLTran(sqls.ToArray());
  112. sqls.Clear();
  113. OperatResult.AppendText(">>换料成功\n", Color.Green);
  114. }
  115. }
  116. }
  117. }
  118. //未勾选换料的时候
  119. else
  120. {
  121. //验证序列号是否存在
  122. dt = (DataTable)dh.ExecuteSql("select ms_status,ms_makecode from makeserial where ms_sncode ='" + GetSNCode.Text + "'", "select");
  123. if (dt.Rows.Count == 0)
  124. {
  125. OperatResult.AppendText(">>序号" + GetSNCode.Text + "不存在\n", Color.Red);
  126. }
  127. else
  128. {
  129. if (dt.Rows[0]["ms_status"].ToString() != "3")
  130. {
  131. switch (dt.Rows[0]["ms_status"].ToString())
  132. {
  133. case "0":
  134. OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为未上线\n", Color.Red);
  135. break;
  136. case "1":
  137. OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为已上线 \n", Color.Red);
  138. break;
  139. case "2":
  140. OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为已完成\n", Color.Red);
  141. break;
  142. case "4":
  143. OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为已报废\n", Color.Red);
  144. break;
  145. }
  146. }
  147. else
  148. {
  149. //获取工单信息
  150. sql.Clear();
  151. sql.Append("select ms_sncode,ma_code,pr_detail,ma_prodcode,ma_craftcode,st_rstepcode from makeserial ");
  152. sql.Append("left join make on ma_code=ms_makecode left join step on st_code=ms_nextstepcode left join product ");
  153. sql.Append("on pr_code=ma_prodcode where ms_sncode='" + GetSNCode.Text + "'");
  154. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  155. BaseUtil.SetFormValue(this.Controls, dt);
  156. //获取不良信息
  157. GetBadCodeInfo();
  158. AddRow.PerformClick();
  159. OperatResult.AppendText(">>获取序列号" + GetSNCode.Text + "成功\n", Color.Green);
  160. }
  161. }
  162. }
  163. //GetSNCode.Clear();
  164. }
  165. }
  166. private void RepairComplete_Click(object sender, EventArgs e)
  167. {
  168. int RejectNum = int.Parse(dh.getFieldDataByCondition("makebad", "count(0) cn", "mb_sncode='" + ms_sncode.Text + "' and mb_status not in (1,-1)").ToString());
  169. if (RejectNum > 0)
  170. OperatResult.AppendText(">>维修结果必须为已维修或无不良\n", Color.Red);
  171. else
  172. {
  173. dt = (DataTable)dh.ExecuteSql("select cr_id from craft where cr_statuscode='AUDITED' and cr_code='" + cr_code.Text + "'", "select");
  174. if (dt.Rows.Count == 0)
  175. OperatResult.AppendText(">>回流工序不存在\n", Color.Red);
  176. else
  177. {
  178. string cr_id = dt.Rows[0]["cr_id"].ToString();
  179. dt = (DataTable)dh.ExecuteSql("select cd_ifinput from craftdetail left join step on st_code=cd_stepcode where cd_crid='" + cr_id + "' and cd_stepcode='" + cd_stepcode.Text + "' and st_statuscode='AUDITED'", "select");
  180. if (dt.Rows.Count == 0)
  181. OperatResult.AppendText(">>回流工序不在回流工艺中\n", Color.Red);
  182. else
  183. {
  184. dh.UpdateByCondition("makeserial", "ms_nextstepcode='" + cd_stepcode.Text + "',ms_craftcode='" + cr_code.Text + "',ms_stepcode='" + User.CurrentStepCode + "',ms_status=1", "ms_sncode='" + ms_sncode.Text + "'");
  185. dh.ExecuteSql(insert_makeprocess.Replace("#", "完成维修"), "insert", ms_sncode.Text, st_name.Text);
  186. OperatResult.AppendText(">>序列号" + ms_sncode.Text + "回流成功\n", Color.Green);
  187. GetBadCodeInfo();
  188. GetSNCode.Clear();
  189. }
  190. }
  191. }
  192. }
  193. //报废按钮点击
  194. private void Scrap_Click(object sender, EventArgs e)
  195. {
  196. //判断是否有无法维修的记录
  197. int ScrapNum = int.Parse(dh.getFieldDataByCondition("makebad", "count(0) cn", "mb_sncode='" + ms_sncode.Text + "' and mb_status=2").ToString());
  198. if (ScrapNum == 0)
  199. {
  200. OperatResult.AppendText(">>存在无法维修的记录才允许报废\n", Color.Red);
  201. }
  202. else
  203. {
  204. string confirm = MessageBox.Show(this.ParentForm, "此操作不可撤销,是否确认报废", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk).ToString();
  205. if (confirm == "Yes")
  206. {
  207. dh.UpdateByCondition("makeserial", "ms_status=4,ms_nextstepcode='',ms_stepcode='" + ms_nextstepcode.Text + "'", "ms_sncode='" + ms_sncode.Text + "' and ms_makecode='" + ma_code.Text + "'");
  208. dh.UpdateByCondition("make", "MA_NGMADEQTY=nvl(MA_NGMADEQTY,0)+1", "ma_code='" + ma_code.Text + "'");
  209. OperatResult.AppendText(">>报废成功\n", Color.Green);
  210. GetBadCodeInfo();
  211. GetSNCode.Clear();
  212. }
  213. }
  214. }
  215. //保存按钮点击
  216. private void Save_Click(object sender, EventArgs e)
  217. {
  218. if (bc_reason.Text != "")
  219. {
  220. //判断是修改还是新增的
  221. if (mb_id1 != null)
  222. {
  223. ItemObject coSelected = (ItemObject)RepairResult.SelectedItem;
  224. Repair_Result = coSelected.Value;
  225. dh.UpdateByCondition("makebad", " mb_makecode='" + st_name.Text + "',mb_badcode='" + badcode + "',mb_badremark='" + bc_remark.Text + "',mb_status='" + Repair_Result + "',mb_sncode='" + GetSNCode.Text + "'", "mb_id=" + mb_id1 + "");
  226. //刷新不良信息表
  227. GetBadCodeInfo();
  228. }
  229. else
  230. {
  231. int rowcount = dh.getRowCount("makebad", " mb_badcode='" + badcode + "' and mb_sncode='" + ms_sncode.Text + "'");
  232. if (rowcount == 0)
  233. {
  234. //插入不良信息
  235. sql.Clear();
  236. sql.Append("insert into makebad (mb_id,mb_makecode, mb_badcode,mb_badremark,mb_status,mb_sncode) values(makebad_seq.nextval,'" + st_name.Text + "','" + badcode + "','" + bc_remark.Text + "','" + Repair_Result + "','" + GetSNCode.Text + "')");
  237. dh.ExecuteSql(sql.GetString(), "insert");
  238. bc_groupcode1.Text = "";
  239. bc_reason.Text = "";
  240. bc_remark.Text = "";
  241. //刷新不良信息表
  242. GetBadCodeInfo();
  243. }
  244. else
  245. OperatResult.AppendText(">>已经存在不良原因码为" + badcode + "的维修记录\n", Color.Red);
  246. }
  247. }
  248. else
  249. OperatResult.AppendText(">>不良原因不能为空\n", Color.Red);
  250. }
  251. private void AddRow_Click(object sender, EventArgs e)
  252. {
  253. bc_groupcode1.Text = "";
  254. bc_reason.Text = "";
  255. bc_remark.Text = "";
  256. RepairResult.Text = "";
  257. mb_id1 = null;
  258. if (!GetSelectData)
  259. {
  260. //往不良原因添加数据
  261. sql.Clear();
  262. sql.Append("select bc_groupcode,bc_groupname,bc_code,bc_name from make left join product on pr_code=ma_prodcode left join productkind on pk_name=pr_kind left join ");
  263. sql.Append("productbadgroup on pk_code=pb_kindcode left join badcode on pb_badgroup=bc_groupname where ma_code='" + ma_code.Text + "'");
  264. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  265. ItemObject[] reason = new ItemObject[dt.Rows.Count];
  266. ItemObject[] groupcode = new ItemObject[dt.Rows.Count];
  267. for (int i = 0; i < dt.Rows.Count; i++)
  268. {
  269. reason[i] = new ItemObject(dt.Rows[i]["bc_code"] + "#" + dt.Rows[i]["bc_name"], dt.Rows[i]["bc_code"].ToString());
  270. groupcode[i] = new ItemObject(dt.Rows[i]["bc_groupname"].ToString(), dt.Rows[i]["bc_groupcode"].ToString());
  271. }
  272. bc_groupcode1.Items.AddRange(groupcode);
  273. bc_reason.Items.AddRange(reason);
  274. GetSelectData = true;
  275. }
  276. }
  277. private void Refueling_CheckedChanged(object sender, EventArgs e)
  278. {
  279. //如何序列号字段没有赋值设置勾选框为false
  280. if (ms_sncode.Text == "")
  281. Refueling.Checked = false;
  282. else
  283. {
  284. if (Refueling.Checked)
  285. GetSNCode_Label.Text = "采集新料条码";
  286. else
  287. {
  288. GetSNCode_Label.Text = "";
  289. GetSNCode.Text = "";
  290. }
  291. }
  292. }
  293. //
  294. private void 维修作业_Activated(object sender, EventArgs e)
  295. {
  296. GetSNCode.Focus();
  297. }
  298. //判断绑定的数据源不为空的时候可以点击
  299. private void BadCodeGrid_DataSourceChanged(object sender, EventArgs e)
  300. {
  301. string ms_status = dh.getFieldDataByCondition("makeserial", "ms_status", "ms_sncode='" + GetSNCode.Text + "'").ToString();
  302. if (BadCodeGrid.DataSource == null || ms_status == "1" || ms_status == "4")
  303. {
  304. Save.Enabled = false;
  305. Scrap.Enabled = false;
  306. AddRow.Enabled = false;
  307. RepairComplete.Enabled = false;
  308. }
  309. else
  310. {
  311. Save.Enabled = true;
  312. Scrap.Enabled = true;
  313. AddRow.Enabled = true;
  314. RepairComplete.Enabled = true;
  315. }
  316. }
  317. private void BadCodeGrid_CellClick(object sender, DataGridViewCellEventArgs e)
  318. {
  319. //设置界面右边三个变量的值
  320. if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
  321. {
  322. object a = BadCodeGrid.Rows[e.RowIndex].Cells["mb_badcode"].Value;
  323. object b = BadCodeGrid.Rows[e.RowIndex].Cells["mb_badremark"].Value;
  324. object c = BadCodeGrid.Rows[e.RowIndex].Cells["bc_groupcode"].Value;
  325. object d = BadCodeGrid.Rows[e.RowIndex].Cells["mb_status"].Value;
  326. bc_reason.Text = a.Equals(null) ? "" : a.ToString();
  327. bc_remark.Text = b.Equals(null) ? "" : b.ToString();
  328. bc_groupcode1.Text = c.Equals(null) ? "" : c.ToString();
  329. Repair_Result = d.Equals(null) ? "" : d.ToString();
  330. mb_id1 = BadCodeGrid.Rows[e.RowIndex].Cells["mb_id"].Value.ToString();
  331. badcode = a.Equals(null) ? "" : a.ToString();
  332. groupcode = c.Equals(null) ? "" : c.ToString();
  333. RepairResult.Text = d.Equals(null) ? "" : d.ToString();
  334. switch (RepairResult.Text)
  335. {
  336. case "0":
  337. RepairResult.Text = "待维修";
  338. break;
  339. case "1":
  340. RepairResult.Text = "已维修";
  341. break;
  342. case "2":
  343. RepairResult.Text = "待维修";
  344. break;
  345. case "-1":
  346. RepairResult.Text = "待维修";
  347. break;
  348. }
  349. }
  350. }
  351. private void RepairResult_SelectedIndexChanged(object sender, EventArgs e)
  352. {
  353. ItemObject coSelected = (ItemObject)RepairResult.SelectedItem;
  354. Repair_Result = coSelected.Value;
  355. }
  356. private void bc_reason_SelectedIndexChanged(object sender, EventArgs e)
  357. {
  358. ItemObject coSelected = (ItemObject)bc_reason.SelectedItem;
  359. badcode = coSelected.Value;
  360. }
  361. private void bc_groupcode1_SelectedIndexChanged(object sender, EventArgs e)
  362. {
  363. ItemObject coSelected = (ItemObject)bc_groupcode1.SelectedItem;
  364. groupcode = coSelected.Value;
  365. }
  366. //获取不良信息
  367. private void GetBadCodeInfo()
  368. {
  369. sql.Clear();
  370. sql.Append("Select mb_id,mb_sncode,bc_name,mb_badcode,mb_badremark,bc_groupcode,bc_note,bc_dutyman,case mb_status when 0 then '待维修' when 1 then '已维修' when 2 then '不可维修' when -1 then '无不良' end mb_status ");
  371. sql.Append("from Makebad left join badcode on mb_badcode=bc_code where mb_sncode='" + ms_sncode.Text + "' order by mb_id");
  372. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  373. BaseUtil.FillDgvWithDataTable(BadCodeGrid, dt);
  374. }
  375. private void 维修作业_SizeChanged(object sender, EventArgs e)
  376. {
  377. asc.controlAutoSize(this);
  378. }
  379. private void Clean_Click(object sender, EventArgs e)
  380. {
  381. OperatResult.Clear();
  382. }
  383. private void RepairResult_TextChanged(object sender, EventArgs e)
  384. {
  385. ItemObject coSelected = (ItemObject)RepairResult.SelectedItem;
  386. if (coSelected != null)
  387. Repair_Result = coSelected.Value;
  388. }
  389. private void bc_reason_TextChanged(object sender, EventArgs e)
  390. {
  391. badcode = bc_reason.Text;
  392. }
  393. private void cr_code_UserControlTextChanged(object sender, EventArgs e)
  394. {
  395. cd_stepcode.Condition = "ST_STATUSCODE='AUDITED' and cr_code='" + cr_code.Text + "'";
  396. }
  397. private void ma_code_TextChanged(object sender, EventArgs e)
  398. {
  399. cr_code.Condition = "cr_statuscode='AUDITED' and cr_code=(select ma_craftcode from make where ma_code='" + ma_code.Text + "')";
  400. }
  401. }
  402. }