Print.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. using UAS_MES_NEW.DataOperate;
  2. using LabelManager2;
  3. using System.Data;
  4. using System.Text;
  5. using System.IO;
  6. using UAS_MES_NEW.Entity;
  7. using System.Text.RegularExpressions;
  8. using System.Windows.Forms;
  9. using Seagull.BarTender.Print;
  10. using System.Net;
  11. using System;
  12. using System.Linq;
  13. using BarTender;
  14. namespace UAS_MES_NEW.PublicMethod
  15. {
  16. class Print
  17. {
  18. static DataHelper dh = SystemInf.dh;
  19. //CodeSoft打印的驱动和文件
  20. static BarTender.Format doc2;
  21. static Document doc;
  22. ////CodeSoft的打印机
  23. //string CodeSpft_Printer;
  24. static LabelFormatDocument format;
  25. public Print() { }
  26. public static bool CodeSoft(string iCaller, Document doc, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage)
  27. {
  28. ErrorMessage = "";
  29. DataTable dt = new DataTable();
  30. if (IfRePrint != "-1")
  31. {
  32. if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "栈板标")
  33. {
  34. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
  35. }
  36. else
  37. {
  38. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
  39. }
  40. ////如果已经打印过了,则不允许再打印
  41. if (dt.Rows.Count > 0)
  42. {
  43. ErrorMessage = SnCode + LabelType + "已打印";
  44. return false;
  45. }
  46. }
  47. //打开模板路径
  48. //查询模板对应的取值SQL和参数名称
  49. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select");
  50. StringBuilder sb = new StringBuilder();
  51. if (doc == null)
  52. {
  53. MessageBox.Show("打印文件不存在");
  54. return false;
  55. }
  56. //执行全部的SQL
  57. for (int i = 0; i < dt.Rows.Count; i++)
  58. {
  59. string sql = dt.Rows[i]["lp_sql"].ToString();
  60. try
  61. {
  62. Regex ConnoteA = new Regex("{\\w+}");
  63. foreach (Match mch in ConnoteA.Matches(sql))
  64. {
  65. string x = mch.Value.Trim();
  66. sql = sql.Replace(x, "'" + SnCode + "'");
  67. }
  68. DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  69. if (Param.Rows.Count == 0)
  70. continue;
  71. //查询的结果的参数个数大于1需要给标签的多个参数赋值
  72. if (Param.Rows.Count > 0)
  73. {
  74. int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count;
  75. for (int j = 0; j < LoopTime; j++)
  76. {
  77. for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
  78. {
  79. if (j == 0 & doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper())
  80. {
  81. doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[0][0].ToString();
  82. }
  83. //使用SN开头的参数赋值SN1,SN2,SN3等参数
  84. if (doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))
  85. {
  86. doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[j][0].ToString();
  87. }
  88. }
  89. }
  90. }
  91. }
  92. catch (System.Exception)
  93. {
  94. MessageBox.Show("SQL维护不正确");
  95. }
  96. }
  97. LogManager.DoLog(sb.ToString());
  98. //保存本次赋值进行打印
  99. doc.Printer.SwitchTo(PrinterName);
  100. doc.PrintDocument(PrintNum);
  101. LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, "");
  102. for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
  103. {
  104. doc.Variables.FormVariables.Item(k + 1).Value = null;
  105. }
  106. LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode);
  107. return true;
  108. }
  109. public static bool CodeSoft(string iCaller, ref LabelManager2.ApplicationClass lbl, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage)
  110. {
  111. ErrorMessage = "";
  112. DataTable dt = new DataTable();
  113. if (IfRePrint != "-1")
  114. {
  115. if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "栈板标")
  116. {
  117. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + LabelName + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
  118. }
  119. else
  120. {
  121. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + LabelName + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
  122. }
  123. ////如果已经打印过了,则不允许再打印
  124. if (dt.Rows.Count > 0)
  125. {
  126. ErrorMessage = SnCode + LabelType + "已打印";
  127. return false;
  128. }
  129. }
  130. string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString();
  131. FileInfo PrintFile = new FileInfo(LabelName);
  132. //打开模板路径
  133. //查询模板对应的取值SQL和参数名称
  134. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "' order by to_number(lp_detno)", "select");
  135. StringBuilder sb = new StringBuilder();
  136. if (!PrintFile.Exists)
  137. {
  138. MessageBox.Show("打印文件不存在");
  139. return false;
  140. }
  141. string filechangetime = PrintFile.LastWriteTime.ToString();
  142. if (filechangetime != filelastwritetime)
  143. {
  144. lbl.Quit();
  145. lbl = new LabelManager2.ApplicationClass();
  146. BaseUtil.WriteLbl();
  147. filechangetime = PrintFile.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
  148. string update = "la_lastwritetime = to_date((regexp_substr('" + filechangetime + "','\\d+.+\\d+')),'yyyy-mm-dd hh24:mi:ss')";
  149. dh.UpdateByCondition("label", update, "la_id = '" + LaID + "'");
  150. }
  151. doc = lbl.Documents.Open(LabelName, true);
  152. if (doc == null)
  153. {
  154. MessageBox.Show("标签文件打开失败");
  155. return false;
  156. }
  157. //执行全部的SQL
  158. for (int i = 0; i < dt.Rows.Count; i++)
  159. {
  160. string sql = dt.Rows[i]["lp_sql"].ToString();
  161. try
  162. {
  163. Regex ConnoteA = new Regex("{\\w+}");
  164. foreach (System.Text.RegularExpressions.Match mch in ConnoteA.Matches(sql))
  165. {
  166. string x = mch.Value.Trim();
  167. sql = sql.Replace(x, "'" + SnCode + "'");
  168. }
  169. DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  170. if (Param.Rows.Count == 0)
  171. continue;
  172. //查询的结果的参数个数大于1需要给标签的多个参数赋值
  173. if (Param.Rows.Count > 0)
  174. {
  175. int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count;
  176. for (int j = 0; j < LoopTime; j++)
  177. {
  178. for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
  179. {
  180. if (j == 0 & doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper())
  181. {
  182. doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[0][0].ToString();
  183. }
  184. //使用SN开头的参数赋值SN1,SN2,SN3等参数
  185. if (doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))
  186. {
  187. doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[j][0].ToString();
  188. }
  189. }
  190. }
  191. }
  192. }
  193. catch (System.Exception)
  194. {
  195. MessageBox.Show("SQL维护不正确");
  196. }
  197. }
  198. LogManager.DoLog(sb.ToString());
  199. //保存本次赋值进行打印
  200. doc.Printer.SwitchTo(PrinterName);
  201. doc.PrintDocument(PrintNum);
  202. LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, "");
  203. for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
  204. {
  205. doc.Variables.FormVariables.Item(k + 1).Value = null;
  206. }
  207. LogicHandler.doLabelPrintLog(SnCode, LabelType + LabelName, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode);
  208. return true;
  209. }
  210. public static bool BarTender(string iCaller, ref Engine lbl, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage)
  211. {
  212. ErrorMessage = "";
  213. DataTable dt = new DataTable();
  214. if (PrintNum == 0)
  215. {
  216. PrintNum = 1;
  217. }
  218. if (IfRePrint == "-1")
  219. {
  220. string printNumber = dh.getFieldDataByCondition("CONFIGS", "DATA", "code='printNumber' and caller='MESSetting'").ToString();
  221. if (dh.getRowCount("labelprintlog", "lpl_type='" + LabelType + "' and lpl_value='" + SnCode + "'") > int.Parse(printNumber))
  222. {
  223. ErrorMessage = "标签补打超出允许打印次数【" + printNumber + "】";
  224. return false;
  225. }
  226. }
  227. if (IfRePrint != "-1" && LabelType != "机身标")
  228. {
  229. bool allowPallte = true;
  230. if ((SystemInf.dh.getFieldDataByCondition("master", "MA_FUNCTION", "ma_user='" + SystemInf.CurrentDB + "'").ToString() == "万年MES系统(正式)"))
  231. {
  232. allowPallte = false;
  233. }
  234. if (LabelType == "卡通箱标" || LabelType == "大箱标" || (LabelType == "栈板标" && allowPallte) || LabelType == "彩盒标")
  235. {
  236. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "' and lpl_file='" + LabelName + "'", "select");
  237. }
  238. else
  239. {
  240. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
  241. }
  242. ////如果已经打印过了,则不允许再打印
  243. if (dt.Rows.Count > 0)
  244. {
  245. ErrorMessage = SnCode + LabelType + "已打印";
  246. return false;
  247. }
  248. }
  249. else
  250. {
  251. if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "彩盒标")
  252. {
  253. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "'", "select");
  254. if (dt.Rows.Count == 0)
  255. {
  256. //ErrorMessage = SnCode + LabelType + "未打印,不允许补打";
  257. //return false;
  258. }
  259. }
  260. }
  261. string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString();
  262. string LA_SOFTTYPE = dh.getFieldDataByCondition("label", "LA_SOFTTYPE", "la_id = '" + LaID + "'").ToString();
  263. //如果有附件上传的话
  264. string fp_name = "";
  265. //下载附件
  266. FileInfo PrintFile = new FileInfo(@"C:\打印标签\" + LabelName);
  267. if (!PrintFile.Exists)
  268. {
  269. if (LA_SOFTTYPE != "")
  270. {
  271. string[] fpid = LA_SOFTTYPE.Split(';');
  272. for (int i = 0; i < fpid.Length; i++)
  273. {
  274. if (fpid[i] != "")
  275. {
  276. DataTable label = (DataTable)dh.ExecuteSql("select FP_PATH, FP_DATE, FP_NAME from FILEPATH where fp_id='" + fpid[i] + "'", "select");
  277. if (label.Rows.Count > 0)
  278. {
  279. string fp_path = label.Rows[0]["FP_PATH"].ToString().Replace("/app/uas/webapps/", "");
  280. fp_name = label.Rows[0]["fp_name"].ToString();
  281. WebClient wc = new WebClient();
  282. wc.DownloadFile("http://192.168.1.5:8099/" + fp_path, @"C:\打印标签\" + fp_name);
  283. }
  284. }
  285. }
  286. lbl.Stop();
  287. lbl = new Engine(true);
  288. BaseUtil.WriteLbl();
  289. }
  290. }
  291. else
  292. {
  293. string filechangetime = PrintFile.LastWriteTime.ToString();
  294. System.DateTime dateTime1 = System.DateTime.Parse(filechangetime);
  295. System.DateTime dateTime2 = System.DateTime.Parse(filelastwritetime);
  296. if (dateTime1 < dateTime2)
  297. {
  298. if (LA_SOFTTYPE != "")
  299. {
  300. string[] fpid = LA_SOFTTYPE.Split(';');
  301. for (int i = 0; i < fpid.Length; i++)
  302. {
  303. if (fpid[i] != "")
  304. {
  305. DataTable label = (DataTable)dh.ExecuteSql("select FP_PATH, FP_DATE, FP_NAME from FILEPATH where fp_id='" + fpid[i] + "'", "select");
  306. if (label.Rows.Count > 0)
  307. {
  308. string fp_path = label.Rows[0]["FP_PATH"].ToString().Replace("/app/uas/webapps/", "");
  309. fp_name = label.Rows[0]["fp_name"].ToString();
  310. WebClient wc = new WebClient();
  311. wc.DownloadFile("http://192.168.1.5:8099/" + fp_path, @"C:\打印标签\" + fp_name);
  312. FileInfo file = new FileInfo(@"C:\打印标签\" + fp_name);
  313. file.CreationTime = Convert.ToDateTime(filelastwritetime);
  314. }
  315. }
  316. }
  317. }
  318. lbl.Stop();
  319. lbl = new Engine(true);
  320. BaseUtil.WriteLbl();
  321. }
  322. }
  323. PrintFile = new FileInfo(@"C:\打印标签\" + LabelName);
  324. if (!PrintFile.Exists)
  325. {
  326. MessageBox.Show("打印文件不存在");
  327. return false;
  328. }
  329. //查询模板对应的取值SQL和参数名称
  330. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select");
  331. StringBuilder sb = new StringBuilder();
  332. if (!PrintFile.Exists)
  333. {
  334. MessageBox.Show("打印文件不存在");
  335. return false;
  336. }
  337. format = lbl.Documents.Open(@"C:\打印标签\" + LabelName);
  338. if (format == null)
  339. {
  340. MessageBox.Show("标签文件打开失败");
  341. return false;
  342. }
  343. string ParamValue = format.SubStrings.GetAll("#", "$");
  344. string[] paramname = ParamValue.Split('$');
  345. for (int i = 0; i < paramname.Length; i++)
  346. {
  347. paramname[i] = paramname[i].Split('#')[0];
  348. }
  349. //执行全部的SQL
  350. for (int i = 0; i < dt.Rows.Count; i++)
  351. {
  352. string sql = dt.Rows[i]["lp_sql"].ToString();
  353. try
  354. {
  355. Regex ConnoteA = new Regex("{\\w+}");
  356. foreach (Match mch in ConnoteA.Matches(sql))
  357. {
  358. string x = mch.Value.Trim();
  359. sql = sql.Replace(x, "'" + SnCode + "'");
  360. }
  361. DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  362. if (Param.Rows.Count == 0)
  363. continue;
  364. //查询的结果的参数个数大于1需要给标签的多个参数赋值
  365. if (Param.Rows.Count > 0)
  366. {
  367. int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count;
  368. for (int j = 0; j < LoopTime; j++)
  369. {
  370. //if (paramname.Contains(dt.Rows[i]["lp_name"].ToString().ToUpper()))
  371. //{
  372. // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()] != null)
  373. // {
  374. // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()].Value = Param.Rows[0][0].ToString();
  375. // }
  376. //}
  377. //if (paramname.Contains(dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)))
  378. //{
  379. // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)] != null)
  380. // {
  381. // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)].Value = Param.Rows[j][0].ToString(); ;
  382. // }
  383. //}
  384. //try
  385. //{
  386. // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()] != null)
  387. // {
  388. // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()].Value = Param.Rows[0][0].ToString();
  389. // }
  390. // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)] != null)
  391. // {
  392. // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)].Value = Param.Rows[j][0].ToString(); ;
  393. // }
  394. //}
  395. //catch (Exception e)
  396. //{
  397. // Console.WriteLine( e.Message);
  398. //}
  399. for (int k = 0; k < format.SubStrings.Count; k++)
  400. {
  401. if (j == 0 & format.SubStrings[k].Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper())
  402. {
  403. Console.WriteLine(format.SubStrings[k].Name.ToUpper());
  404. format.SubStrings[k].Value = Param.Rows[0][0].ToString();
  405. break;
  406. }
  407. //使用SN开头的参数赋值SN1,SN2,SN3等参数
  408. if (format.SubStrings[k].Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))
  409. {
  410. Console.WriteLine(format.SubStrings[k].Name.ToUpper());
  411. format.SubStrings[k].Value = Param.Rows[j][0].ToString();
  412. break;
  413. }
  414. }
  415. }
  416. }
  417. }
  418. catch (System.Exception)
  419. {
  420. MessageBox.Show("SQL维护不正确");
  421. }
  422. }
  423. LogManager.DoLog(sb.ToString());
  424. //保存本次赋值进行打印a
  425. format.PrintSetup.PrinterName = PrinterName;
  426. format.PrintSetup.IdenticalCopiesOfLabel = PrintNum;
  427. format.Print();
  428. LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, "");
  429. try
  430. {
  431. for (int k = 0; k < format.SubStrings.Count; k++)
  432. {
  433. format.SubStrings[k].Value = null;
  434. }
  435. }
  436. catch (Exception ex)
  437. {
  438. LogManager.DoLog(ex.Message + ex.StackTrace);
  439. }
  440. LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode, PrintFile.Name);
  441. return true;
  442. }
  443. public static bool BarTender(string iCaller, BarTender.Application lbl, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage)
  444. {
  445. ErrorMessage = "";
  446. DataTable dt = new DataTable();
  447. if (PrintNum == 0)
  448. {
  449. PrintNum = 1;
  450. }
  451. if (IfRePrint == "-1")
  452. {
  453. string printNumber = dh.getFieldDataByCondition("CONFIGS", "DATA", "code='printNumber' and caller='MESSetting'").ToString();
  454. if (dh.getRowCount("labelprintlog", "lpl_type='" + LabelType + "' and lpl_value='" + SnCode + "'") > int.Parse(printNumber))
  455. {
  456. ErrorMessage = "标签补打超出允许打印次数【" + printNumber + "】";
  457. return false;
  458. }
  459. }
  460. if (IfRePrint != "-1" && LabelType != "机身标")
  461. {
  462. bool allowPallte = true;
  463. if ((SystemInf.dh.getFieldDataByCondition("master", "MA_FUNCTION", "ma_user='" + SystemInf.CurrentDB + "'").ToString() == "万年MES系统(正式)"))
  464. {
  465. allowPallte = false;
  466. }
  467. if (LabelType == "卡通箱标" || LabelType == "大箱标" || (LabelType == "栈板标" && allowPallte) || LabelType == "彩盒标")
  468. {
  469. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "' and lpl_file='" + LabelName + "'", "select");
  470. }
  471. else
  472. {
  473. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
  474. }
  475. ////如果已经打印过了,则不允许再打印
  476. if (dt.Rows.Count > 0)
  477. {
  478. ErrorMessage = SnCode + LabelType + "已打印";
  479. return false;
  480. }
  481. }
  482. else
  483. {
  484. if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "彩盒标")
  485. {
  486. dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "'", "select");
  487. if (dt.Rows.Count == 0)
  488. {
  489. //ErrorMessage = SnCode + LabelType + "未打印,不允许补打";
  490. //return false;
  491. }
  492. }
  493. }
  494. string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString();
  495. string LA_SOFTTYPE = dh.getFieldDataByCondition("label", "LA_SOFTTYPE", "la_id = '" + LaID + "'").ToString();
  496. //如果有附件上传的话
  497. string fp_name = "";
  498. //下载附件
  499. FileInfo PrintFile = new FileInfo(@"C:\打印标签\" + LabelName);
  500. if (!PrintFile.Exists)
  501. {
  502. if (LA_SOFTTYPE != "")
  503. {
  504. string[] fpid = LA_SOFTTYPE.Split(';');
  505. for (int i = 0; i < fpid.Length; i++)
  506. {
  507. if (fpid[i] != "")
  508. {
  509. DataTable label = (DataTable)dh.ExecuteSql("select FP_PATH, FP_DATE, FP_NAME from FILEPATH where fp_id='" + fpid[i] + "'", "select");
  510. if (label.Rows.Count > 0)
  511. {
  512. string fp_path = label.Rows[0]["FP_PATH"].ToString().Replace("/app/uas/webapps/", "");
  513. fp_name = label.Rows[0]["fp_name"].ToString();
  514. WebClient wc = new WebClient();
  515. wc.DownloadFile("http://192.168.1.5:8099/" + fp_path, @"C:\打印标签\" + fp_name);
  516. }
  517. }
  518. }
  519. lbl = new BarTender.Application();
  520. }
  521. }
  522. else
  523. {
  524. string filechangetime = PrintFile.LastWriteTime.ToString();
  525. System.DateTime dateTime1 = System.DateTime.Parse(filechangetime);
  526. System.DateTime dateTime2 = System.DateTime.Parse(filelastwritetime);
  527. if (dateTime1 < dateTime2)
  528. {
  529. if (LA_SOFTTYPE != "")
  530. {
  531. string[] fpid = LA_SOFTTYPE.Split(';');
  532. for (int i = 0; i < fpid.Length; i++)
  533. {
  534. if (fpid[i] != "")
  535. {
  536. DataTable label = (DataTable)dh.ExecuteSql("select FP_PATH, FP_DATE, FP_NAME from FILEPATH where fp_id='" + fpid[i] + "'", "select");
  537. if (label.Rows.Count > 0)
  538. {
  539. string fp_path = label.Rows[0]["FP_PATH"].ToString().Replace("/app/uas/webapps/", "");
  540. fp_name = label.Rows[0]["fp_name"].ToString();
  541. WebClient wc = new WebClient();
  542. wc.DownloadFile("http://192.168.1.5:8099/" + fp_path, @"C:\打印标签\" + fp_name);
  543. FileInfo file = new FileInfo(@"C:\打印标签\" + fp_name);
  544. file.CreationTime = Convert.ToDateTime(filelastwritetime);
  545. }
  546. }
  547. }
  548. }
  549. lbl = new BarTender.Application();
  550. BaseUtil.WriteLbl();
  551. }
  552. }
  553. PrintFile = new FileInfo(@"C:\打印标签\" + LabelName);
  554. if (!PrintFile.Exists)
  555. {
  556. MessageBox.Show("打印文件不存在");
  557. return false;
  558. }
  559. //查询模板对应的取值SQL和参数名称
  560. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select");
  561. StringBuilder sb = new StringBuilder();
  562. if (!PrintFile.Exists)
  563. {
  564. MessageBox.Show("打印文件不存在");
  565. return false;
  566. }
  567. try
  568. {
  569. doc2 = lbl.Formats.Open(@"C:\打印标签\" + LabelName);
  570. }
  571. catch (System.Exception)
  572. {
  573. lbl = new BarTender.Application();
  574. doc2 = lbl.Formats.Open(@"C:\打印标签\" + LabelName);
  575. }
  576. if (doc2 == null)
  577. {
  578. MessageBox.Show("标签文件打开失败");
  579. return false;
  580. }
  581. Console.WriteLine("清空参数开始" + System.DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss:ffffff"));
  582. try
  583. {
  584. for (int k = 0; k < doc2.NamedSubStrings.Count; k++)
  585. {
  586. doc2.SetNamedSubStringValue(doc2.NamedSubStrings.Item(k + 1).Name, "");
  587. }
  588. }
  589. catch (Exception ex)
  590. {
  591. LogManager.DoLog(ex.Message + ex.StackTrace);
  592. }
  593. Console.WriteLine("清空参数结束" + System.DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss:ffffff"));
  594. string ParamValue = doc2.NamedSubStrings.GetAll("#", "$").ToUpper();
  595. string[] paramname = ParamValue.Split('$');
  596. for (int i = 0; i < paramname.Length; i++)
  597. {
  598. paramname[i] = paramname[i].Split('#')[0];
  599. }
  600. //执行全部的SQL
  601. Console.WriteLine("参数赋值开始" + System.DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss:ffffff"));
  602. for (int i = 0; i < dt.Rows.Count; i++)
  603. {
  604. string sql = dt.Rows[i]["lp_sql"].ToString();
  605. try
  606. {
  607. Regex ConnoteA = new Regex("{\\w+}");
  608. foreach (Match mch in ConnoteA.Matches(sql))
  609. {
  610. string x = mch.Value.Trim();
  611. sql = sql.Replace(x, "'" + SnCode + "'");
  612. }
  613. DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  614. if (Param.Rows.Count == 0)
  615. continue;
  616. //查询的结果的参数个数大于1需要给标签的多个参数赋值
  617. if (Param.Rows.Count > 0)
  618. {
  619. int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count;
  620. for (int j = 0; j < LoopTime; j++)
  621. {
  622. if (paramname.Contains(dt.Rows[i]["lp_name"].ToString().ToUpper()))
  623. {
  624. if (doc2.NamedSubStrings.Item(dt.Rows[i]["lp_name"].ToString()).Name != null)
  625. {
  626. doc2.SetNamedSubStringValue(dt.Rows[i]["lp_name"].ToString(), Param.Rows[0][0].ToString());
  627. }
  628. }
  629. if (paramname.Contains(dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)))
  630. {
  631. if (doc2.NamedSubStrings.Item(dt.Rows[i]["lp_name"].ToString() + (j + 1)).Name != null)
  632. {
  633. doc2.SetNamedSubStringValue(dt.Rows[i]["lp_name"].ToString() + (j + 1), Param.Rows[j][0].ToString());
  634. }
  635. }
  636. //for (int k = 0; k < doc2.NamedSubStrings.Count; k++)
  637. //{
  638. // if (j == 0 & doc2.NamedSubStrings.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper())
  639. // {
  640. // doc2.SetNamedSubStringValue(doc2.NamedSubStrings.Item(k + 1).Name, Param.Rows[0][0].ToString());
  641. // }
  642. // if (doc2.NamedSubStrings.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))
  643. // {
  644. // doc2.SetNamedSubStringValue(doc2.NamedSubStrings.Item(k + 1).Name, Param.Rows[j][0].ToString());
  645. // }
  646. //}
  647. }
  648. }
  649. }
  650. catch (Exception)
  651. {
  652. MessageBox.Show("SQL维护不正确");
  653. }
  654. }
  655. Console.WriteLine("参数赋值结束" + System.DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss:ffffff"));
  656. LogManager.DoLog(sb.ToString());
  657. //保存本次赋值进行打印a
  658. doc2.PrintSetup.IdenticalCopiesOfLabel = PrintNum;
  659. // 序列标签数
  660. doc2.PrintSetup.NumberSerializedLabels = 1;
  661. doc2.PrintSetup.Printer = PrinterName;
  662. doc2.PrintOut(false, false);
  663. LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, "");
  664. LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode, PrintFile.Name);
  665. return true;
  666. }
  667. }
  668. }