Special_AfSale.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using System.Windows.Forms;
  10. using UAS_MES_NEW.DataOperate;
  11. using UAS_MES_NEW.Entity;
  12. using UAS_MES_NEW.PublicMethod;
  13. namespace UAS_MES_NEW.Special
  14. {
  15. public partial class Special_AfSale : Form
  16. {
  17. ExcelHandler eh;
  18. AutoSizeFormClass asc = new AutoSizeFormClass();
  19. DataHelper dh;
  20. string bsncode = "";//序列号录入框值
  21. LogStringBuilder sql = new LogStringBuilder();
  22. /// <summary>
  23. /// 已选的不良
  24. /// </summary>
  25. List<string> ChoosedList = new List<string>();
  26. /// <summary>
  27. /// 待选的不良
  28. /// </summary>
  29. List<string> WaitList = new List<string>();
  30. public Special_AfSale()
  31. {
  32. InitializeComponent();
  33. }
  34. private void Special_BoxSplit_Load(object sender, EventArgs e)
  35. {
  36. asc.controllInitializeSize(this);
  37. dh = SystemInf.dh;
  38. eh = new ExcelHandler();
  39. LoadBadGroupData();
  40. LoadBadCodeListView();
  41. cu_code.TableName = "CUSTOMER";
  42. cu_code.DBTitle = "客户查询";
  43. cu_code.SelectField = "cu_id # ID,cu_code # 客户编号,cu_name # 客户名称";
  44. cu_code.SetValueField = new string[] { "cu_id", "cu_code", "cu_name"};
  45. cu_code.FormName = Name;
  46. // cu_code.Condition = "(pi_type ='自由出货' or pi_inoutno like('XSCK%') or pi_inoutno like('QTCK%') or pi_inoutno like('WWLL%'))";
  47. // cu_code.DbChange += Pi_inoutno_DbChange;
  48. }
  49. /// <summary>
  50. /// 加载不良代码的ListView的信息
  51. /// </summary>
  52. private void LoadBadCodeListView()
  53. {
  54. object bg_code = bc_groupcode.SelectedValue;
  55. sql.Clear();
  56. sql.Append("select bg_code||':'||bg_name bg_code,bc_code,bc_name,'' bc_remark from badgroupdetail ");
  57. sql.Append("left join badgroup on bg_id=bgd_bgid left join badcode on bgd_badcode=bc_code where ");
  58. sql.Append("bg_code='" + (bg_code != null ? bg_code.ToString() : "") + "' and bg_code is not null order by bgd_detno");
  59. DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  60. BadInfSource.DataSource = dt;
  61. //往listview中添加数据
  62. WaitRejectList.Items.Clear();
  63. WaitRejectList.BeginUpdate();
  64. for (int i = 0; i < dt.Rows.Count; i++)
  65. {
  66. if (!ChoosedList.Contains(dt.Rows[i]["bc_code"].ToString()))
  67. {
  68. ListViewItem lvi = new ListViewItem();
  69. //第一列是勾选列,设置列头文本为空
  70. lvi.Text = "";
  71. WaitList.Add(dt.Rows[i]["bc_code"].ToString());
  72. for (int j = 0; j < dt.Columns.Count; j++)
  73. lvi.SubItems.Add(dt.Rows[i][j].ToString());
  74. WaitRejectList.Items.Add(lvi);
  75. }
  76. }
  77. WaitRejectList.EndUpdate();
  78. }
  79. DataTable dt;
  80. /// <summary>
  81. /// 加载已选不良的ListView
  82. /// </summary>
  83. private void LoadChoosedBadListView()
  84. {
  85. sql.Clear();
  86. sql.Append("select AS_BGCODE||':'||AS_BGNAME bg_code,AS_BADCODE bc_code,AS_BADNAME bc_name,' ' mb_badremark from afsales ");
  87. sql.Append(" ");
  88. sql.Append(" where as_sn='" + sncode.Text + "'");
  89. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  90. ChoosedRejectList.Items.Clear();
  91. ChoosedRejectList.BeginUpdate();
  92. for (int i = 0; i < dt.Rows.Count; i++)
  93. {
  94. ListViewItem lvi = new ListViewItem();
  95. //第一列是勾选列,设置列头文本为空
  96. lvi.Text = "";
  97. ChoosedList.Add(dt.Rows[i]["bc_code"].ToString());
  98. for (int j = 0; j < dt.Columns.Count; j++)
  99. lvi.SubItems.Add(dt.Rows[i][j].ToString());
  100. ChoosedRejectList.Items.Add(lvi);
  101. }
  102. ChoosedRejectList.EndUpdate();
  103. }
  104. /// <summary>
  105. /// 填充不良组别信息
  106. /// </summary>
  107. private void LoadBadGroupData()
  108. {
  109. //如果ms_makecode的值修改过再去查询
  110. sql.Clear();
  111. sql.Append("select bg_code||':'||bg_name bg_name,bg_code from badgroup left join (select pb_badgroup,pr_kind ");
  112. sql.Append("from product left join productkind on pk_name=pr_kind ");
  113. sql.Append("left join productbadgroup on pk_code=PB_KINDCODE )");
  114. sql.Append("on pb_badgroup=bg_code where bg_statuscode='AUDITED' order by case when bg_code='" + User.DefaultBadGroup + "' then 0 else 1 end");
  115. DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  116. bc_groupcode.DisplayMember = "bg_name";
  117. bc_groupcode.ValueMember = "bg_code";
  118. bc_groupcode.DataSource = dt;
  119. }
  120. private void Special_ReSNBD_SizeChanged(object sender, EventArgs e)
  121. {
  122. asc.controlAutoSize(this);
  123. }
  124. private void sncode_KeyDown(object sender, KeyEventArgs e)
  125. {
  126. if (e.KeyCode == Keys.Enter)
  127. {
  128. LoadBadCodeListView();
  129. LoadChoosedBadListView();
  130. DataTable dt = (DataTable)dh.ExecuteSql("select to_char(ms_indate,'yyyy-mm-dd') ms_indate,ms_sncode,ms_makecode,ms_prodcode,pr_orispeccode from makeserial left join PRODUCT ON ms_prodcode = pr_code where ms_sncode = '" + sncode.Text+"'", "select");
  131. if (dt.Rows.Count > 0)
  132. {
  133. BaseUtil.SetFormValue(this.Controls, dt);
  134. OperateResult.AppendText(">>SN:" + sncode.Text + "采集成功\n", Color.Green);
  135. }
  136. else
  137. {
  138. OperateResult.AppendText(">>SN:"+sncode.Text+ "采集成功,无生产记录\n", Color.Black);
  139. ms_sncode.Text = sncode.Text;
  140. }
  141. bc_code.Focus();
  142. bc_code.SelectAll();
  143. }
  144. }
  145. private void Save_Click(object sender, EventArgs e)
  146. {
  147. if (ms_sncode.Text == "")
  148. {
  149. OperateResult.AppendText(">>序列号不允许为空\n", Color.Red);
  150. return;
  151. }
  152. int RejectCount = ChoosedRejectList.Items.Count;
  153. string[] bccode = new string[RejectCount];
  154. string[] bgcode = new string[RejectCount];
  155. string[] bgname = new string[RejectCount];
  156. string[] bcname = new string[RejectCount];
  157. if (ChoosedRejectList.Items.Count == 0)
  158. {
  159. OperateResult.AppendText(">>不良品必须选择不良原因和不良代码!\n", Color.Red);
  160. return;
  161. }
  162. else
  163. {
  164. for (int i = 0; i < RejectCount; i++)
  165. {
  166. //获取不良代码组
  167. bgcode[i] = ChoosedRejectList.Items[i].SubItems[1].Text.Split(':')[0];
  168. //获取不良代码组名称
  169. bgname[i] = ChoosedRejectList.Items[i].SubItems[1].Text.Split(':')[1];
  170. //获取所有的不良代码
  171. bccode[i] = ChoosedRejectList.Items[i].SubItems[2].Text;
  172. //获取不良名称
  173. bcname[i] = ChoosedRejectList.Items[i].SubItems[3].Text;
  174. }
  175. }
  176. dh.ExecuteSql("delete from AFSALES where as_sn='" + ms_sncode.Text + "' ", "delete");
  177. //string seq = dh.GetSEQ("AFSALES_seq");
  178. sql.Clear();
  179. sql.Append("insert into AFSALES(as_id,as_sn,as_badcode,as_badname,as_indate,as_inman,as_makecode");
  180. sql.Append(",as_prodcode,as_orispeccode,as_madedate,as_bgcode,as_bgname,as_datedif,AS_REMARK,AS_CUST,AS_FCSMAN,AS_SCSMAN,AS_FVMAN)");
  181. sql.Append("select AFSALES_seq.nextval,'" + ms_sncode.Text+ "',:bc_code,:bc_name,sysdate,'"+User.UserCode+ "',ms_makecode,");
  182. sql.Append("ms_prodcode,pr_orispeccode,ms_indate,:bg_code,:bg_name, datedif,'"+ remarkin.Text + "','"+cu_code.Text+ "',t1,t2,fv from ((select max(ms_indate) ms_indate ,max(ms_prodcode) ms_prodcode,max(pr_orispeccode) pr_orispeccode,max(ms_makecode) ms_makecode,round(sysdate- nvl(max(ms_indate),sysdate),2) datedif,max(T1) t1,max(T2) t2,max(FV) fv from makeserial left join MES_T1T2FV_VIEW on ms_code = SP_SNCODE left join product on ms_prodcode = pr_code where ms_sncode = '" + ms_sncode.Text+"' and ms_nextmacode is null)) ");
  183. if (bgcode.Length > 0)
  184. {
  185. dh.BatchInsert(sql.GetString(), new string[] { "bc_code", "bc_name", "bg_code", "bg_name" }, bccode, bcname, bgcode, bgname);
  186. }
  187. LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_makecode.Text, User.UserLineCode, User.UserSourceCode, "售后判定", "售后判定成功", ms_sncode.Text,"" );
  188. OperateResult.AppendText(">>SN:" + sncode.Text + "售后判定成功\n", Color.Green, sncode);
  189. string CU = cu_code.Text;
  190. BaseUtil.CleanControls(this.Controls);
  191. remarkin.Text = "";
  192. ChoosedRejectList.Items.Clear();
  193. WaitList.Clear();
  194. ChoosedList.Clear();
  195. LoadBadGroupData();
  196. LoadBadCodeListView();
  197. cu_code.Text = CU;
  198. sncode.Focus();
  199. sncode.SelectAll();
  200. }
  201. private void bc_groupcode_SelectedIndexChanged(object sender, EventArgs e)
  202. {
  203. LoadBadCodeListView();
  204. }
  205. private void bc_code_KeyDown(object sender, KeyEventArgs e)
  206. {
  207. if (e.KeyCode == Keys.Enter)
  208. {
  209. sql.Clear();
  210. sql.Append("select bg_code||':'||bg_name bg_code,bc_code,bc_name,'' bc_remark from badgroupdetail left join ");
  211. sql.Append("badgroup on bg_id=bgd_bgid left join badcode on bgd_badcode = bc_code where bc_code='" + bc_code.Text + "' and rownum=1 ");
  212. DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  213. if (dt.Rows.Count > 0)
  214. {
  215. for (int i = 0; i < ChoosedRejectList.Items.Count; i++)
  216. {
  217. if (ChoosedRejectList.Items[i].ListView.Items[i].SubItems[2].Text == bc_code.Text)
  218. {
  219. OperateResult.AppendText(">>已添加过不良代码" + bc_code.Text + "\n", Color.Red, bc_code);
  220. return;
  221. }
  222. }
  223. ListViewItem lvi = new ListViewItem();
  224. lvi.Text = "";
  225. for (int j = 0; j < dt.Columns.Count; j++)
  226. lvi.SubItems.Add(dt.Rows[0][j].ToString());
  227. ChoosedRejectList.Items.Add(lvi);
  228. bc_code.Clear();
  229. }
  230. else OperateResult.AppendText(">>" + bc_code.Text + "不良代码不存在\n", Color.Red, bc_code);
  231. }
  232. }
  233. private void Filter_UserControlTextChanged(object sender, EventArgs e)
  234. {
  235. try
  236. {
  237. DataRow[] dr = (BadInfSource.DataSource as DataTable).Select("bc_code like '%" + Filter.Text + "%' or bc_name like '%" + Filter.Text + "%'");
  238. DataTable dt = (BadInfSource.DataSource as DataTable).Clone();
  239. for (int i = 0; i < dr.Length; i++)
  240. {
  241. dt.Rows.Add(dr[i].ItemArray);
  242. }
  243. WaitRejectList.Items.Clear();
  244. WaitRejectList.BeginUpdate();
  245. for (int i = 0; i < dt.Rows.Count; i++)
  246. {
  247. if (!ChoosedList.Contains(dt.Rows[i]["bc_code"].ToString()))
  248. {
  249. ListViewItem lvi = new ListViewItem();
  250. //第一列是勾选列,设置列头文本为空
  251. lvi.Text = "";
  252. WaitList.Add(dt.Rows[i]["bc_code"].ToString());
  253. for (int j = 0; j < dt.Columns.Count; j++)
  254. lvi.SubItems.Add(dt.Rows[i][j].ToString());
  255. WaitRejectList.Items.Add(lvi);
  256. }
  257. }
  258. WaitRejectList.EndUpdate();
  259. }
  260. catch (Exception)
  261. {
  262. }
  263. }
  264. private void ChooseedReject_Click(object sender, EventArgs e)
  265. {
  266. if (sncode.Text == "")
  267. {
  268. OperateResult.AppendText(">>序列号不能为空\n", Color.Red);
  269. sncode.Focus();
  270. return;
  271. }
  272. int CheckedNum = 0;
  273. //是否已经添加到不良
  274. bool AddToReject = false;
  275. for (int i = WaitRejectList.Items.Count - 1; i >= 0; i--)
  276. {
  277. if (WaitRejectList.Items[i].Checked)
  278. {
  279. AddToReject = false;
  280. for (int j = 0; j < ChoosedRejectList.Items.Count; j++)
  281. {
  282. if ((ChoosedRejectList.Items[j].SubItems[2].Text == WaitRejectList.Items[i].SubItems[2].Text))
  283. {
  284. AddToReject = true;
  285. OperateResult.AppendText(">>已存在" + ChoosedRejectList.Items[j].SubItems[2].Text + "不良\n", Color.Red);
  286. break;
  287. }
  288. }
  289. //未添加则进行添加
  290. if (!AddToReject)
  291. {
  292. WaitRejectList.Items[i].Checked = false;
  293. ChoosedRejectList.Items.Add((ListViewItem)WaitRejectList.Items[i].Clone());
  294. WaitRejectList.Items[i].Remove();
  295. CheckedNum++;
  296. }
  297. }
  298. }
  299. if (CheckedNum == 0)
  300. {
  301. OperateResult.AppendText(">>请勾选不良代码\n", Color.Red);
  302. }
  303. }
  304. private void WaitReject_Click(object sender, EventArgs e)
  305. {
  306. int CheckedNum = 0;
  307. //已存在在ListView中的Item是不能添加到其他ListView中的,需要调用其克隆的方法
  308. for (int i = ChoosedRejectList.Items.Count - 1; i >= 0; i--)
  309. {
  310. if (ChoosedRejectList.Items[i].Checked)
  311. {
  312. ChoosedRejectList.Items[i].Checked = false;
  313. WaitRejectList.Items.Add((ListViewItem)ChoosedRejectList.Items[i].Clone());
  314. ChoosedRejectList.Items[i].Remove();
  315. CheckedNum++;
  316. }
  317. }
  318. if (CheckedNum == 0)
  319. {
  320. for (int i = ChoosedRejectList.Items.Count - 1; i >= 0; i--)
  321. {
  322. WaitRejectList.Items.Add((ListViewItem)ChoosedRejectList.Items[i].Clone());
  323. ChoosedRejectList.Items[i].Remove();
  324. }
  325. }
  326. }
  327. private void WaitRejectList_DoubleClick(object sender, EventArgs e)
  328. {
  329. for (int i = WaitRejectList.Items.Count - 1; i >= 0; i--)
  330. {
  331. if (WaitRejectList.Items[i].Checked)
  332. {
  333. //双击右移
  334. ChooseedReject.PerformClick();
  335. }
  336. }
  337. }
  338. private void button1_Click(object sender, EventArgs e)
  339. {
  340. DialogResult result = openFileDialog1.ShowDialog();
  341. if (result == DialogResult.OK)
  342. {
  343. string fileload = openFileDialog1.FileName;
  344. dt = eh.ImportExcel(fileload, "test");
  345. List<string> snlist = new List<string>();
  346. List<string> ngcodelist = new List<string>();
  347. List<string> ngnamelist = new List<string>();
  348. List<string> bdcodelist = new List<string>();
  349. List<string> bdnamelist = new List<string>();
  350. List<string> emcodelist = new List<string>();
  351. List<string> timelist = new List<string>();
  352. List<string> remarklist = new List<string>();
  353. List<string> custlist = new List<string>();
  354. try
  355. {
  356. for (int i = 0; i < dt.Rows.Count; i++)
  357. {
  358. if (dt.Rows[i]["SN"].ToString().Trim() == "")
  359. {
  360. OperateResult.AppendText(">>第" + (i + 1) + "行SN为空\n", Color.Red);
  361. continue;
  362. }
  363. if (dh.CheckExist("AFSALES", "as_sn = '" + dt.Rows[i]["SN"].ToString() + "'"))
  364. {
  365. OperateResult.AppendText(">>第" + (i + 1) + "行SN已判定\n", Color.Red);
  366. continue;
  367. }
  368. if (snlist.Contains(dt.Rows[i]["SN"].ToString()))
  369. {
  370. OperateResult.AppendText(">>第" + (i + 1) + "行SN已存在与此表格\n", Color.Red);
  371. continue;
  372. }
  373. if (dt.Rows[i]["不良代码"].ToString().Trim() == "")
  374. {
  375. OperateResult.AppendText(">>第" + (i + 1) + "行不良代码为空\n", Color.Red);
  376. continue;
  377. }
  378. if ( !dh.CheckExist("badcode", "bc_code = '" + dt.Rows[i]["不良代码"].ToString() + "'"))
  379. {
  380. OperateResult.AppendText(">>第" + (i + 1) + "行不良代码不存在\n", Color.Red);
  381. continue;
  382. }
  383. if (dt.Rows[i]["人员"].ToString().Trim() == "" )
  384. {
  385. OperateResult.AppendText(">>第" + (i + 1) + "行人员为空\n", Color.Red);
  386. continue;
  387. }
  388. if (!dh.CheckExist("employee", "em_code = '" + dt.Rows[i]["人员"].ToString() + "'"))
  389. {
  390. OperateResult.AppendText(">>第" + (i + 1) + "行人员不存在\n", Color.Red);
  391. continue;
  392. }
  393. String timeRegex1 = "^(?<year>\\d{2,4})/(?<month>\\d{1,2})/(?<day>\\d{1,2})$";
  394. if (dt.Rows[i]["时间"].ToString().Trim() == "")
  395. {
  396. OperateResult.AppendText(">>第" + (i + 1) + "行时间为空\n", Color.Red);
  397. continue;
  398. }
  399. if ( !Regex.IsMatch(dt.Rows[i]["时间"].ToString(), timeRegex1))
  400. {
  401. OperateResult.AppendText(">>第" + (i + 1) + "行时间不符合要求\n", Color.Red);
  402. continue;
  403. }
  404. snlist.Add(dt.Rows[i]["SN"].ToString());
  405. emcodelist.Add(dt.Rows[i]["人员"].ToString());
  406. timelist.Add(dt.Rows[i]["时间"].ToString());
  407. remarklist.Add(dt.Rows[i]["备注"].ToString());
  408. custlist.Add(dt.Rows[i]["客户"].ToString());
  409. bdcodelist.Add(dt.Rows[i]["不良代码"].ToString());
  410. DataTable ddt = (DataTable)dh.ExecuteSql("select bc_groupname,bc_groupcode,bc_name from badcode where bc_code = '" + dt.Rows[i]["不良代码"].ToString() + "'", "select");
  411. ngnamelist.Add(ddt.Rows[0]["bc_groupname"].ToString());
  412. ngcodelist.Add(ddt.Rows[0]["bc_groupcode"].ToString());
  413. bdnamelist.Add(ddt.Rows[0]["bc_name"].ToString());
  414. }
  415. if (snlist.Count > 0)
  416. {
  417. sql.Clear();
  418. sql.Append("insert into TEMP_AF(ID,SN,BDCODE,BDNAME,BGCODE,BGNAME,INDATE,INMAN,REMARK,CUST)");
  419. sql.Append("values(afsales_seq.nextval,:snlist,:bdcodelist,:bdnamelist,:ngcodelist,:ngnamelist,:timelist,:emcodelist,:remarklist,:custlist)");
  420. dh.BatchInsert(sql.GetString(), new string[] { "snlist", "bdcodelist", "bdnamelist", "ngcodelist", "ngnamelist", "timelist", "emcodelist", "remarklist", "custlist" }
  421. , snlist.ToArray(), bdcodelist.ToArray(), bdnamelist.ToArray(), ngcodelist.ToArray(), ngnamelist.ToArray(), timelist.ToArray(), emcodelist.ToArray(), remarklist.ToArray(), custlist.ToArray());
  422. sql.Clear();
  423. sql.Append("insert into afsales(as_id,as_sn,as_badcode,as_badname,as_bgcode,as_bgname,as_indate,as_inman,AS_REMARK,as_cust,as_madedate,as_prodcode,as_orispeccode,as_makecode,AS_FCSMAN,AS_SCSMAN,AS_FVMAN) ");
  424. sql.Append(" select ID,SN,BDCODE,BDNAME,BGCODE,BGNAME,to_date(INDATE,'yyyy/mm/dd'),INMAN,REMARK,CUST,max(ms_indate) ms_indate ,max(ms_prodcode) ms_prodcode,max(pr_orispeccode) ");
  425. sql.Append(" pr_orispeccode,max(ms_makecode) ms_makecode,t1,t2,fv from TEMP_AF left join makeserial on sn = ms_sncode and ms_nextmacode is null left join MES_T1T2FV_VIEW on ms_code = SP_SNCODE left join ");
  426. sql.Append(" product on ms_prodcode = pr_code group by ID,SN,BDCODE,BDNAME,BGCODE,BGNAME,to_date(INDATE,'yyyy/mm/dd'),INMAN,REMARK,CUST,t1,t2,fv ");
  427. dh.ExecuteSql(sql.GetString(), "insert");
  428. }
  429. dh.ExecuteSql("delete TEMP_AF", "delete");
  430. OperateResult.AppendText(">>导入" + snlist.Count + "行完成\n", Color.Green);
  431. }
  432. catch (Exception ex)
  433. {
  434. dh.ExecuteSql("delete TEMP_AF", "delete");
  435. MessageBox.Show(ex.Message);
  436. }
  437. }
  438. }
  439. }
  440. }