Make_SeqProgramTransform.cs 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using UAS_MES.DataOperate;
  11. using UAS_MES.Entity;
  12. using UAS_MES.PublicMethod;
  13. namespace UAS_MES.Make
  14. {
  15. public partial class Make_SeqProgramTransform : Form
  16. {
  17. AutoSizeFormClass asc = new AutoSizeFormClass();
  18. LogStringBuilder sql = new LogStringBuilder();
  19. DataHelper dh;
  20. //原序列号
  21. string TSN = "";
  22. //转换后序列号
  23. string SN = "";
  24. //错误信息
  25. string errorMessage;
  26. //存放productsnrelation表中的数据
  27. DataTable ListA;
  28. //存放工单信息
  29. DataTable dt;
  30. //存放序列号防呆规则
  31. DataTable rules;
  32. //step 记录检验规则的进度
  33. int step = 0;
  34. //存放关联信息类型
  35. string type;
  36. //存放包含IMEI的规则的值,方便拼接
  37. StringBuilder imei = new StringBuilder();
  38. LogStringBuilder logsql = new LogStringBuilder();
  39. //存储最后插入数据库的赋值语句部分
  40. StringBuilder s1 = new StringBuilder();
  41. //存放工单中数量
  42. int ma_qty;
  43. //存放所有关联信息的类型和录入的值
  44. Hashtable hs;
  45. string oMakecode = "";
  46. string oMsid = "";
  47. string siid="";//存储TSN对应的sninfo记录id
  48. DataTable macRange;//记录macBT范围
  49. StringBuilder insertSninfoFields;//存插入sninfo的字段
  50. StringBuilder insertSninfoValues;//存插入sninfo的值
  51. StringBuilder toSi;//存更新sninfo的值
  52. string macOrBt = "";//存储去掉":"或者"-"的mac和bt
  53. string imeif = "";
  54. bool hasSnList = false;//记录是否有转换后SN清单
  55. bool hasMakeRule = false;//记录是否有工单防呆规则
  56. public Make_SeqProgramTransform()
  57. {
  58. InitializeComponent();
  59. }
  60. private void Make_SeqProgramTransform_Load(object sender, EventArgs e)
  61. {
  62. asc.controllInitializeSize(this);
  63. code.Focus();
  64. //提示用户“>>请输入TSN号”
  65. OperateResult.AppendText(">>请输入TSN号\n", Color.Black);
  66. dh = new DataHelper();
  67. }
  68. private void code_KeyDown(object sender, KeyEventArgs e)
  69. {
  70. if (e.KeyCode == Keys.Enter)
  71. {
  72. if (code.Text != "")
  73. {
  74. if (LogicHandler.CheckStepAttribute(Tag.ToString(), User.UserSourceCode, out errorMessage))
  75. {
  76. //为0,输入TSN
  77. if (step == 0)
  78. {
  79. OperateResult.AppendText(">>TSN号" + code.Text + "\n", Color.Black);
  80. if (!ChangeResult.Checked)//不勾选
  81. {
  82. //核对工序
  83. if (!LogicHandler.CheckStepSNAndMacode("", User.UserSourceCode, code.Text, User.UserCode, out oMakecode, out oMsid, out errorMessage))
  84. {
  85. OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code);
  86. return;
  87. }
  88. }
  89. else//勾选
  90. {
  91. oMsid = dh.getFieldDataByCondition("makeserial", "max(ms_id)", "ms_sncode in (select '" + code.Text + "' from dual union select sn from makesnrelation where beforesn='" + code.Text + "' and sn<>' ' union select beforesn from makesnrelation where sn='" + code.Text + "' and beforesn<>' ')").ToString();
  92. if (oMsid=="")
  93. {
  94. OperateResult.AppendText("<<TSN号错误\n", Color.Red, code);
  95. return;
  96. }
  97. //根据ms_id查询
  98. sql.Clear();
  99. sql.Append("select ms_stepcode from makeserial where ms_id='" + oMsid+"' and ms_beforesn='"+code.Text+"' and ms_nextmacode is null and ms_outboxcode is null");
  100. dt = (DataTable)dh.ExecuteSql(sql.GetString(),"select");
  101. //如果行数大于0则允许转号
  102. if (dt.Rows.Count > 0)
  103. {
  104. if (dt.Rows[0]["ms_stepcode"].ToString()==User.CurrentStepCode)
  105. {
  106. step = 1;
  107. TSN = code.Text;
  108. //显示序列号
  109. show_sncode.Text = TSN;
  110. ChangeResult.Enabled = false;
  111. }
  112. else
  113. {
  114. OperateResult.AppendText("<<当前工序不允许重新转号\n", Color.Red, code);
  115. return;
  116. }
  117. }
  118. else
  119. {
  120. OperateResult.AppendText("<<TSN号" + code.Text + "当前状态不允许重新转号\n", Color.Red, code);
  121. return;
  122. }
  123. }
  124. //如果用户没有选择工单号
  125. if (ms_macode.Text == "" || ms_macode.Text != oMakecode||ChangeResult.Checked)
  126. {
  127. //按照out出的工单号查出工单相关信息,并赋值到相关控件
  128. sql.Clear();
  129. sql.Append("select ma_code as ms_macode,ma_softversion,mcd_okqty,ma_qty,ma_qty-mcd_inqty as remain_qty,pr_detail,pr_code as ma_prodcode ");
  130. sql.Append("from makeserial left join make on ms_makecode=ma_code left join product on ");
  131. sql.Append("ms_prodcode=pr_code left join makecraftdetail on ms_makecode=mcd_macode where ms_id=:msid and mcd_stepcode='" + User.CurrentStepCode + "'");
  132. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select", oMsid);
  133. if (dt.Rows.Count > 0)
  134. {
  135. //记录数量
  136. ma_qty = int.Parse(dt.Rows[0]["ma_qty"].ToString());
  137. BaseUtil.SetFormValue(this.Controls, dt);
  138. }
  139. else
  140. {
  141. OperateResult.AppendText("<<TSN号" + code.Text + "不存在\n", Color.Red, code);
  142. return;
  143. }
  144. }
  145. //查询TSN对应的sninfo记录id
  146. siid= dh.getFieldDataByCondition("sninfo", "max(si_id) si_id", "si_sn in (select '" + code.Text + "' from dual union select sn from makesnrelation where beforesn = '" + code.Text + "' )").ToString();
  147. //获取需要关联采集的信息,以及校验规则
  148. ListA = (DataTable)dh.ExecuteSql("select * from productsnrelation where psr_prodcode='" + ma_prodcode.Text + "' order by psr_detno", "select");
  149. //没有获取到就提示错误请维护产品对应的关联采集信息
  150. if (ListA.Rows.Count == 0)
  151. {
  152. OperateResult.AppendText("<<请维护产品对应的关联采集信息\n", Color.Red, code);
  153. OperateResult.AppendText(">>请输入TSN\n", Color.Black);
  154. if (ChangeResult.Checked)
  155. {
  156. clearInfo();
  157. }
  158. return;
  159. }
  160. if (ChangeResult.Checked)
  161. {
  162. OperateResult.AppendText(">>请输入SN\n", Color.Green, code);
  163. }
  164. //判断重新转换未勾选
  165. if (!ChangeResult.Checked)
  166. {
  167. //没有勾选,只能修改一次
  168. //核对TSN是否正确
  169. //string beforesn = dh.getFieldDataByCondition("makeserial", "ms_beforesn", "ms_sncode='" + code.Text + "'").ToString().Trim();
  170. if (dh.CheckExist("makeserial", "ms_id='" + oMsid + "' and ms_sncode='" + code.Text + "' and ms_beforesn is null"))
  171. {
  172. step = 1;
  173. //记录转换前的序列号
  174. TSN = code.Text;
  175. //显示之前的序列号
  176. show_sncode.Text = TSN;
  177. OperateResult.AppendText(">>请输入SN\n", Color.Green, code);
  178. ChangeResult.Enabled = false;
  179. }
  180. else
  181. //不为空,进行过转换。不勾选修改结果,就不能再修改
  182. {
  183. //修改转换结果时,输入两次SN直接过站
  184. if (dh.CheckExist("MakeSerial", "ms_id='" + oMsid + "' and ms_sncode='" + code.Text + "' and ms_beforesn is not null"))
  185. {
  186. step = 1;
  187. TSN = code.Text;
  188. //显示序列号
  189. show_sncode.Text = TSN;
  190. OperateResult.AppendText(">>请输入SN\n", Color.Green, code);
  191. ChangeResult.Enabled = false;
  192. }
  193. else
  194. {
  195. OperateResult.AppendText("<<序列号:" + code.Text + "已转换过\n", Color.Red, code);
  196. OperateResult.AppendText(">>请重新输入TSN\n", Color.Black);
  197. }
  198. }
  199. }
  200. }
  201. else if (step == 1)
  202. {
  203. OperateResult.AppendText(">>" + code.Text + "\n", Color.Black);
  204. //判断工单是否导入了序列号清单
  205. if (hasSnList)
  206. {
  207. if (!dh.CheckExist("makesnlist", "msl_sncode='" + code.Text + "' and msl_makecode='" + ms_macode.Text + "' and msl_type='after'"))
  208. {
  209. //有序列号清单,输入的序列号却不在范围内
  210. OperateResult.AppendText("<<SN号" + code.Text + "错误,不在工单设定的转换后序列号清单中\n", Color.Red, code);
  211. return;
  212. }
  213. }
  214. else if (hasMakeRule)//判断工单防呆
  215. {
  216. if (!dh.CheckExist("makesnruledetail", "msd_sncode='" + code.Text + "' and msd_makecode='" + ms_macode.Text + "' and msd_type='after'"))
  217. {
  218. OperateResult.AppendText("<<SN号" + code.Text + "校验错误,不在工单防呆规则指定范围内!\n", Color.Red, code);
  219. return;
  220. }
  221. }
  222. else//判断产品防呆
  223. {
  224. //判断用户是否锁定输入SN长度,
  225. if (!checkLengthOrPre(SNLength_checkBox, SNLength, "长度", "SN"))
  226. {
  227. return;
  228. }
  229. //判断用户是否锁定输入SN前缀,
  230. if (!checkLengthOrPre(SNPre_checkBox, SNPre, "前缀", "SN"))
  231. {
  232. return;
  233. }
  234. }
  235. //开始录入SN
  236. if ((ChangeResult.Checked && dh.CheckExist("makeserial", " ms_id='" + oMsid + "' and ms_sncode='" + code.Text + "'")) || !dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "'") || (!ChangeResult.Checked && (TSN == code.Text)))
  237. {
  238. //SN校验成功,合法,记录下SN
  239. SN = code.Text;
  240. code.Text = "";
  241. //开始进行校验规则
  242. if (ListA.Rows.Count > 0)
  243. {
  244. OperateResult.AppendText(">>请输入" + ListA.Rows[0]["psr_type"] + "\n", Color.Green);
  245. //实例化hashTable的值
  246. hs = new Hashtable();
  247. }
  248. //step+1
  249. step = 2;
  250. insertSninfoFields = new StringBuilder();
  251. insertSninfoValues = new StringBuilder();
  252. toSi = new StringBuilder();
  253. }
  254. else
  255. {
  256. OperateResult.AppendText("<<序列号" + code.Text + "已存在或无该转换后序列号\n", Color.Red);
  257. OperateResult.AppendText(">>请输入SN\n", Color.Black, code);
  258. }
  259. }
  260. else if (step < ListA.Rows.Count + 2)
  261. {
  262. OperateResult.AppendText(">>" + code.Text + "\n", Color.Black);
  263. //开始进行校验规则
  264. if (checkRules(step))
  265. {
  266. step += 1;
  267. }
  268. }
  269. }
  270. else
  271. {
  272. OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code);
  273. }
  274. }
  275. else
  276. {
  277. OperateResult.AppendText("<<输入不能为空\n", Color.Red);
  278. }
  279. code.Text = "";
  280. }
  281. }
  282. /// <summary>
  283. /// 检验长度或者前缀是否合法
  284. /// </summary>
  285. /// <param name="checkbox"></param>
  286. /// <param name="c"></param>
  287. /// <param name="info"></param>
  288. private bool checkLengthOrPre(CheckBox checkbox, TextBox textbox, string type, string TSNorSN)
  289. {
  290. if (checkbox.Checked == true)
  291. {
  292. //如果勾选没有填值
  293. if (textbox.Text == "")
  294. {
  295. OperateResult.AppendText("<<勾选长度或者前缀需要填写内容\n", Color.Red);
  296. return false;
  297. }
  298. if (type == "长度")
  299. {
  300. //则判断输入转换前的序列号长度是否合法,不合法则提示
  301. if (code.Text.Trim().Length != int.Parse(textbox.Text))
  302. {
  303. //序列号校验错误,长度错误
  304. OperateResult.AppendText("<<" + TSNorSN + ":" + code.Text + "校验错误,长度错误\n", Color.Red, code);
  305. OperateResult.AppendText(">>请重新输入" + TSNorSN + "\n", Color.Black);
  306. return false;
  307. }
  308. }
  309. else if (type == "前缀")
  310. {
  311. string[] pres = textbox.Text.Split('|');
  312. bool f = false;
  313. for (int i = 0; i < pres.Length; i++)
  314. {
  315. if (pres[i] == "" ? true : code.Text.StartsWith(pres[i]))
  316. {
  317. //满足其中一条即可
  318. f = true;
  319. break;
  320. }
  321. }
  322. //则判断输入转换前的序列号前缀是否合法,不合法则提示
  323. if (!f)
  324. {
  325. //序列号校验错误,前缀错误
  326. OperateResult.AppendText("<<" + TSNorSN + ":" + code.Text + "校验错误,前缀错误\n", Color.Red, code);
  327. OperateResult.AppendText(">>请重新输入" + TSNorSN + "\n", Color.Black);
  328. return false;
  329. }
  330. }
  331. return true;
  332. }
  333. return true;
  334. }
  335. /// <summary>
  336. /// 关联采集的校验
  337. /// </summary>
  338. /// <param name="step"></param>
  339. private bool checkRules(int step)
  340. {
  341. type = ListA.Rows[step - 2]["psr_type"].ToString();
  342. //将type中的mac和bt中的"-"和":"号去掉
  343. if (type == "MAC" || type == "BT")
  344. {
  345. if (code.Text.Length > 40)
  346. {
  347. macOrBt = code.Text.Substring(0, 40).Replace(":", "").Replace("-", "");
  348. }
  349. else
  350. {
  351. macOrBt = code.Text.Replace(":", "").Replace("-", "");
  352. }
  353. }
  354. else
  355. {
  356. if (code.Text.Length > 40)
  357. {
  358. imeif = code.Text.Substring(0, 40);
  359. }
  360. else
  361. {
  362. imeif = code.Text;
  363. }
  364. }
  365. //如果前缀和长度都满足的话
  366. if ((ListA.Rows[step - 2]["psr_length"].ToString() == "0" ? false : code.Text.Length != int.Parse(ListA.Rows[step - 2]["psr_length"].ToString())))
  367. {
  368. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"] + "长度需为"+ ListA.Rows[step - 2]["psr_length"].ToString() + "校验不通过,请重新输入\n", Color.Red);
  369. OperateResult.AppendText(">>请重新输入" + ListA.Rows[step - 2]["psr_type"] + "\n", Color.Black, code);
  370. return false;
  371. }
  372. //以|符号分割前缀
  373. string[] preFixs = ListA.Rows[step - 2]["psr_prefix"].ToString().Split('|');
  374. //只要满足其中一个前缀条件即可
  375. bool isfit = false;
  376. for (int i = 0; i < preFixs.Length; i++)
  377. {
  378. if (preFixs[i] == "" ? true : code.Text.StartsWith(preFixs[i]))
  379. {
  380. //满足其中一条即可
  381. isfit = true;
  382. break;
  383. }
  384. }
  385. if (!isfit)
  386. {
  387. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"] + "前缀校验不通过,请重新输入\n", Color.Red);
  388. OperateResult.AppendText(">>请重新输入" + ListA.Rows[step - 2]["psr_type"] + "\n", Color.Black, code);
  389. return false;
  390. }
  391. switch (type)
  392. {
  393. case "IMEI1":
  394. case "IMEI2":
  395. case "IMEI3":
  396. if (checkExist("(ms_imei1='" + imeif + "' or ms_imei2 = '" + imeif + "' or ms_imei3 = '" + imeif + "') and ms_status in (0,1,2,3) and ms_id <> '" + oMsid + "'"))
  397. {
  398. OperateResult.AppendText("<<" + type + ":" + imeif + "错误,不允许重复\n", Color.Red);
  399. OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code);
  400. return false;
  401. }
  402. else
  403. { //校验sninfo中是否已经存在这个
  404. if (dh.CheckExist("sninfo", "(si_imei1='" + imeif + "' or si_imei2 = '" + imeif + "' or si_imei3 = '" + imeif + "') and si_id <>'" + siid + "'"))
  405. {
  406. OperateResult.AppendText("<<" + type + ":" + imeif + "错误,不允许重复\n", Color.Red);
  407. OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code);
  408. return false;
  409. }
  410. //判断IMEI1,IMEI2,IMEI3中是否已经有这个号了
  411. if (imei.ToString().Contains(imeif))
  412. {
  413. OperateResult.AppendText("<<" + type + ":" + imeif + "已录,请重新输入\n", Color.Red);
  414. OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code);
  415. return false;
  416. }
  417. }
  418. //通过校验,将包含IMEI的值拼接
  419. imei.Append("'" + imeif + "',");
  420. s1.Append("MS_" + type + " = '" + imeif + "',");
  421. insertSninfoFields.Append("si_" + type + ",");
  422. insertSninfoValues.Append("'" + imeif + "',");
  423. toSi.Append("si_" + type + " = '" + imeif + "',");
  424. break;
  425. case "BT":
  426. case "MAC":
  427. //验证是否符合合同防呆
  428. if (!LogicHandler.checkMacOrBtRange(oMsid,macOrBt,type))
  429. {
  430. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不在合同防呆范围内\n", Color.Red);
  431. OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
  432. return false;
  433. }
  434. //验证是否已被使用
  435. if (checkExist("MS_" + type + "='" + macOrBt + "' and ms_status in (0,1,2,3) and ms_id <> '" + oMsid + "'"))
  436. {
  437. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red);
  438. OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
  439. return false;
  440. }
  441. else
  442. {
  443. //校验在sninfo表中是否存在
  444. if (dh.CheckExist("sninfo", "si_" + type + "='" + macOrBt + "' and si_id <>'" + siid + "'"))
  445. {
  446. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red);
  447. OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
  448. return false;
  449. }
  450. }
  451. //通过校验,将包含IMEI的值拼接
  452. s1.Append("MS_" + type + " = '" + macOrBt + "',");
  453. insertSninfoFields.Append("si_" + type + ",");
  454. insertSninfoValues.Append("'" + macOrBt + "',");
  455. toSi.Append("si_" + type + " = '" + macOrBt + "',");
  456. break;
  457. case "NETCODE":
  458. if (checkExist("MS_" + type + "='" + imeif + "' and ms_status in (0,1,2,3) and ms_id <> '" + oMsid + "'"))
  459. {
  460. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + imeif + "错误,不允许重复\n", Color.Red);
  461. OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
  462. return false;
  463. }
  464. else
  465. {
  466. //校验在sninfo表中是否存在
  467. if (dh.CheckExist("sninfo", "si_" + type + "='" + imeif + "' and si_id <>'" + siid + "'"))
  468. {
  469. OperateResult.AppendText("<<" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + imeif + "错误,不允许重复\n", Color.Red);
  470. OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
  471. return false;
  472. }
  473. }
  474. //通过校验,将包含IMEI的值拼接
  475. s1.Append("MS_" + type + " = '" + imeif + "',");
  476. insertSninfoFields.Append("si_" + type + ",");
  477. insertSninfoValues.Append("'" + imeif + "',");
  478. toSi.Append("si_" + type + " = '" + imeif + "',");
  479. break;
  480. }
  481. //满足规则,则采集
  482. if (type == "MAC" || type == "BT")
  483. {
  484. hs.Add(ListA.Rows[step - 2]["psr_type"].ToString(), macOrBt);
  485. }
  486. else
  487. {
  488. hs.Add(ListA.Rows[step - 2]["psr_type"].ToString(), imeif);
  489. }
  490. //说明已经是最后一个校验规则
  491. if (step == ListA.Rows.Count + 1)
  492. {
  493. //校验已经完成,此时要再次校验之前的SN和关联采集信息
  494. //再次校验SN
  495. if ((ChangeResult.Checked && dh.CheckExist("makeserial", "ms_id='" + oMsid + "' and ms_sncode='" + SN + "'")) || !dh.CheckExist("makeserial", "ms_sncode='" + SN + "'") || (!ChangeResult.Checked && (TSN == SN)))
  496. {
  497. bool flag = true;
  498. //遍历判断已采集的信息是否已存在
  499. foreach (DictionaryEntry de in hs)
  500. {
  501. if (dh.CheckExist("makeserial", "MS_" + (de.Key.ToString()) + "='" + de.Value + "' and ms_status in (0,1,2,3) and ms_id <> '" + oMsid + "'"))
  502. {
  503. flag = false;
  504. OperateResult.AppendText("<<" + de.Key + "已被使用,请重新输入TSN,重新转换\n", Color.Red);
  505. //清空信息
  506. clearInfo();
  507. break;
  508. }
  509. else
  510. {
  511. //校验sninfo中是否存在
  512. if (dh.CheckExist("sninfo", "si_" + (de.Key.ToString()) + "='" + de.Value + "' and si_id <>'" + siid + "'"))
  513. {
  514. flag = false;
  515. OperateResult.AppendText("<<" + de.Key + "已被使用,请重新输入TSN,重新转换\n", Color.Red);
  516. //清空信息
  517. clearInfo();
  518. break;
  519. }
  520. }
  521. }
  522. //根据flag判断关联采集信息二次校验结果
  523. if (flag == true)
  524. {
  525. //说明SN和关联采集信息二次校验通过,则进行转换和采集信息绑定
  526. string firstsn = "";
  527. string updateSql = "";
  528. //勾选了修改转换结果
  529. if (ChangeResult.Checked)
  530. {
  531. //查询ms_firstsn
  532. firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_id='" + oMsid + "' and ms_beforesn='" + TSN + "'").ToString();
  533. //记录本次修改,存入makesnrelation表中
  534. updateSql = "update makeserial set ms_sncode='" + SN + "'," + s1.Remove(s1.Length - 1, 1).ToString() + " where ms_id='" + oMsid + "' and ms_beforesn='" + TSN + "'";
  535. //删除最近一条转换记录
  536. dh.ExecuteSql("delete from makesnrelation where BEFORESN='" + TSN + "' and makecode='" + ms_macode.Text + "'", "delete");
  537. }
  538. //未勾选修改转换结果
  539. else
  540. {
  541. //查询ms_firstsn
  542. firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", " ms_id='" + oMsid + "' and ms_sncode='" + TSN + "'").ToString();
  543. //记录本次修改,存入makesnrelation表中
  544. updateSql = "update makeserial set ms_sncode='" + SN + "', ms_beforesn='" + TSN + "'," + s1.Remove(s1.Length - 1, 1).ToString() + " where ms_id='" + oMsid + "' and ms_sncode='" + TSN + "'";
  545. }
  546. string insertSql = "insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + TSN + "','" + SN + "','" + firstsn + "','" + ms_macode.Text + "', sysdate ,'" + User.UserCode + "')";
  547. dh.ExecuteSQLTran(updateSql, insertSql);
  548. OperateResult.AppendText("<<序列号转换成功\n<<关联采集成功\n", Color.Green);
  549. //写入日志
  550. LogManager.DoLog("修改序列号:" + TSN + "为" + SN + "成功!" + "操作人:" + User.UserCode);
  551. //记录日志
  552. LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_macode.Text, User.UserLineCode, User.UserSourceCode, "序列烧录转换", "转换成功", TSN, "");
  553. //写入sninfo表
  554. insert2Sninfo(SN);
  555. //输出提示用户“>>序列号转换成功”,“>>关联采集成功”
  556. //完成该道工序 setFinish
  557. if (!LogicHandler.SetStepResult(ms_macode.Text, User.UserSourceCode, SN, "序列烧录转换", "序列烧录转换成功", User.UserCode, out errorMessage))
  558. {
  559. OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code);
  560. }
  561. //获取剩余数,刷新页面
  562. sql.Clear();
  563. sql.Append("select mcd_inqty from makecraftdetail where mcd_macode='" + ms_macode.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'");
  564. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  565. if (dt.Rows.Count > 0)
  566. {
  567. remain_qty.Text = ma_qty - int.Parse(dt.Rows[0]["mcd_inqty"].ToString()) + "";
  568. }
  569. //更新页面计数+1
  570. count.Text = int.Parse(count.Text) + 1 + "";
  571. //完成之后,清除信息
  572. clearInfo();
  573. OperateResult.AppendText(">>请输入TSN号\n", Color.Black);
  574. }
  575. }
  576. else
  577. {
  578. OperateResult.AppendText("<<序列号" + SN + "已存在\n", Color.Red);
  579. OperateResult.AppendText(">>请重新输入TSN\n", Color.Black, code);
  580. //清空信息
  581. clearInfo();
  582. }
  583. code.Text = "";
  584. return false;
  585. }
  586. else
  587. {
  588. OperateResult.AppendText(">>请输入" + ListA.Rows[step - 1]["psr_type"] + "\n", Color.Green, code);
  589. return true;
  590. }
  591. }
  592. /// <summary>
  593. /// 工单号变化时,带出校验规则
  594. /// </summary>
  595. /// <param name="sender"></param>
  596. /// <param name="e"></param>
  597. private void ms_macode_TextChanged(object sender, EventArgs e)
  598. {
  599. hasSnList = false;
  600. hasMakeRule = false;
  601. //清空
  602. TSNPre.Text = "";
  603. TSNLength.Text = "";
  604. SNPre.Text = "";
  605. SNLength.Text = "";
  606. //取消勾选
  607. TSNPre_checkBox.Checked = false;
  608. TSNLength_checkBox.Checked = false;
  609. SNPre_checkBox.Checked = false;
  610. SNLength_checkBox.Checked = false;
  611. //设置可编辑
  612. TSNLength.Enabled = true;
  613. TSNPre.Enabled = true;
  614. SNLength.Enabled = true;
  615. SNPre.Enabled = true;
  616. TSNPre_checkBox.Enabled = true;
  617. TSNLength_checkBox.Enabled = true;
  618. SNPre_checkBox.Enabled = true;
  619. SNLength_checkBox.Enabled = true;
  620. //判断工单是否导入了序列号清单
  621. if (dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_type='after'"))
  622. {
  623. hasSnList = true;
  624. return;
  625. }
  626. //查询表工单序列号防呆规则表
  627. rules = (DataTable)dh.ExecuteSql("select msr_startno,msr_endno,msr_system,msr_type, msr_prefix ,msr_length from makesnrule where msr_makecode='" + ms_macode.Text + "'", "select");
  628. if (rules.Rows.Count > 0)
  629. {
  630. hasMakeRule = true;
  631. }
  632. else
  633. {
  634. /* 如果转换前没有值,则取 select productsnrule where psr_prodcode=? 产品编号,
  635. * 有值则赋值到 转换前,并且自动勾选不可编辑。*/
  636. rules = (DataTable)dh.ExecuteSql("select psr_prefix,psr_length from productsnrule where psr_prodcode ='" + dt.Rows[0]["ma_prodcode"].ToString() + "' and psr_type='after'", "select");
  637. if (rules.Rows.Count > 0)
  638. {
  639. //将产品序列号防呆规则查出的数据填充
  640. if (rules.Rows[0]["psr_prefix"].ToString() != "")
  641. {
  642. SNPre.Text = rules.Rows[0]["psr_prefix"].ToString();
  643. SNPre.Enabled = false;
  644. SNPre_checkBox.Checked = true;
  645. SNPre_checkBox.Enabled = false;
  646. }
  647. if (rules.Rows[0]["psr_length"].ToString() != "")
  648. {
  649. SNLength.Text = rules.Rows[0]["psr_length"].ToString();
  650. SNLength.Enabled = false;
  651. SNLength_checkBox.Checked = true;
  652. SNLength_checkBox.Enabled = false;
  653. }
  654. }
  655. }
  656. }
  657. private bool checkExist(string fields)
  658. {
  659. //不存在
  660. if (!dh.CheckExist("makeserial", fields))
  661. {
  662. //则记录
  663. return false;
  664. }
  665. else
  666. {
  667. return true;
  668. }
  669. }
  670. private void clearInfo()
  671. {
  672. //步骤重置为0
  673. step = 0;
  674. //关联采集信息清空
  675. if (hs != null)
  676. {
  677. hs.Clear();
  678. }
  679. imei.Clear();
  680. logsql.Clear();
  681. s1.Clear();
  682. show_sncode.Text = "";
  683. ChangeResult.Enabled = true;
  684. }
  685. private void cancel_Click(object sender, EventArgs e)
  686. {
  687. //清除已经采集的所有信息
  688. clearInfo();
  689. //提示用户输入TSN
  690. OperateResult.AppendText(">>请输入TSN\n", Color.Green);
  691. }
  692. private void ChangeResult_CheckedChanged(object sender, EventArgs e)
  693. {
  694. if (ChangeResult.Checked)
  695. {
  696. //勾选的时候提示输入TSN
  697. OperateResult.AppendText(">>请输入TSN号\n", Color.Black);
  698. }
  699. }
  700. private void insert2Sninfo(string sn)
  701. {
  702. //是否为空
  703. if (siid == "")
  704. {
  705. //插入新的数据
  706. sql.Clear();
  707. sql.Append("insert into sninfo(si_id,si_sn," + insertSninfoFields.ToString().Substring(0, insertSninfoFields.ToString().Length - 1) + ") values ");
  708. sql.Append("(sninfo_seq.nextval,'" + sn + "'," + insertSninfoValues.ToString().Substring(0, insertSninfoValues.ToString().Length - 1) + ")");
  709. dh.ExecuteSql(sql.GetString(), "insert");
  710. }
  711. else
  712. {
  713. //更新sninfo
  714. sql.Clear();
  715. sql.Append("update sninfo set "+(ChangeResult.Checked?("si_sn='"+sn+"',"):""));
  716. sql.Append(toSi.ToString().Substring(0, toSi.ToString().Length - 1));
  717. sql.Append(" where si_id='" + siid + "'");
  718. dh.ExecuteSql(sql.GetString(), "update");
  719. }
  720. }
  721. private void Make_SeqProgramTransform_SizeChanged(object sender, EventArgs e)
  722. {
  723. asc.controlAutoSize(this);
  724. }
  725. }
  726. }