SystemSetting_LabelMaintain.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. using LabelManager2;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Windows.Forms;
  9. using UAS_MES.CustomControl.TextBoxWithIcon;
  10. using UAS_MES.DataOperate;
  11. using UAS_MES.Properties;
  12. using UAS_MES.PublicMethod;
  13. namespace UAS_MES.SystemSetting
  14. {
  15. public partial class SystemSetting_LabelMaintain : Form
  16. {
  17. DataHelper dh;
  18. DataTable dt;
  19. //设置Grid中Combox的静态数据,这个格式是必须的,#前面是展示值,#后面是实际值
  20. string[] labeltype = { "机身标#机身标", "彩盒标#彩盒标", "卡通箱标#卡通箱标", "大箱标#大箱标", "栈板标#栈板标" };
  21. string[] defaultype = { "是#1", "否#0" };
  22. Dictionary<string, string> dic = new Dictionary<string, string>();
  23. //用于拼接条件查询
  24. StringBuilder condition = new StringBuilder();
  25. LogStringBuilder sql = new LogStringBuilder();
  26. /*CodeSoft新建打印机引擎*/
  27. ApplicationClass lbl;
  28. Document doc;
  29. /*BarTender新建打印机引擎*/
  30. //private Engine engine = null;
  31. //private LabelFormatDocument format ;
  32. //点击行的LabelCode
  33. string LabelCode = "";
  34. //模板的路径
  35. string LabelPath = "";
  36. //参数个数
  37. int ParamNum;
  38. //标签参数的数组
  39. string[] ParamName;
  40. //模板编号的ID
  41. string pl_id1;
  42. //用于保存更新的模板ID
  43. string pl_id2 = "";
  44. //Label表的主键,用于弹窗的传参
  45. string La_id1;
  46. //添加在grid末列的操作列
  47. DataGridViewImageColumn PerviewColumn = new DataGridViewImageColumn
  48. {
  49. Image = Resources.preview_16px_25980_easyicon_net,
  50. Width = 40,
  51. Name = "预览",
  52. ToolTipText = "预览模板参数",
  53. Tag = "Read",
  54. AutoSizeMode = DataGridViewAutoSizeColumnMode.None
  55. };
  56. DataGridViewImageColumn OperateColumn = new DataGridViewImageColumn
  57. {
  58. Image = Resources.write_15_893687707641px_1181413_easyicon_net,
  59. Width = 40,
  60. Name = "编辑",
  61. ToolTipText = "编辑模板",
  62. Tag = "Read",
  63. AutoSizeMode = DataGridViewAutoSizeColumnMode.None
  64. };
  65. Thread thread;
  66. AutoSizeFormClass asc = new AutoSizeFormClass();
  67. public SystemSetting_LabelMaintain()
  68. {
  69. InitializeComponent();
  70. }
  71. //创建打印进程
  72. private void NewPrint()
  73. {
  74. lbl = new ApplicationClass();
  75. }
  76. private void 条码维护_Load(object sender, EventArgs e)
  77. {
  78. thread = new Thread(NewPrint);
  79. thread.Start();
  80. asc.controllInitializeSize(this);
  81. dh = new DataHelper();
  82. condition.Append(" ");
  83. LoadData();
  84. pr_code.FormName = Name;
  85. pr_code.SetValueField = new string[] { "pr_code" };
  86. pr_code.TableName = "product";
  87. pr_code.SelectField = "pr_code # 物料编号,pr_detail # 物料名称,pr_kind # 物料种类,pr_spec # 物料规格";
  88. la_code.FormName = Name;
  89. la_code.SetValueField = new string[] { "la_code" };
  90. la_code.TableName = "label";
  91. la_code.SelectField = "la_code # 标签编号,la_name # 标签名称";
  92. //加载下拉框的静态值
  93. BaseUtil.SetDgvColumnComboxData((DataGridViewComboBoxColumn)LabelDataGridView.Columns["pl_labeltype"], "pl_labeltype", "display", "value", labeltype);
  94. BaseUtil.SetDgvColumnComboxData((DataGridViewComboBoxColumn)LabelDataGridView.Columns["pl_isdefault"], "pl_isdefault", "display", "value", defaultype);
  95. ChooseAll.ChooseAll(LabelDataGridView);
  96. pr_code2.KeyDown += ScreenEvent;
  97. pr_detail.KeyDown += ScreenEvent;
  98. pr_spec.KeyDown += ScreenEvent;
  99. }
  100. private void LabelDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
  101. {
  102. if (LabelDataGridView.Columns[e.ColumnIndex].HeaderText == "预览")
  103. {
  104. //获取路径和标签名称
  105. LabelPath = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelurl"].Value.ToString();
  106. LabelCode = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelcode"].Value.ToString();
  107. pl_id1 = LabelDataGridView.Rows[e.RowIndex].Cells["pl_id"].Value.ToString();
  108. La_id1 = LabelDataGridView.Rows[e.RowIndex].Cells["la_id"].Value.ToString();
  109. if (CodeSoft.Checked)
  110. {
  111. string LabelName = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelname"].Value.ToString();
  112. doc = lbl.Documents.Open(BaseUtil.GetLabelUrl(LabelPath, LabelName));
  113. if (doc == null)
  114. {
  115. MessageBox.Show("指定位置文件不存在");
  116. return;
  117. }
  118. ParamNum = doc.Variables.FreeVariables.Count;
  119. //去除之前添加的控件
  120. for (int i = 0; i < (ParamName == null ? 0 : ParamName.Length); i++)
  121. {
  122. if (this.Controls["LabelParam"].Controls[ParamName[i] + "_label"] != null)
  123. {
  124. this.Controls["LabelParam"].Controls.Remove(this.Controls["LabelParam"].Controls[ParamName[i] + "_label"]);
  125. this.Controls["LabelParam"].Controls.Remove(this.Controls["LabelParam"].Controls[ParamName[i]]);
  126. }
  127. }
  128. ParamName = new string[ParamNum];
  129. for (int i = 0; i < ParamNum; i++)
  130. {
  131. ParamName[i] = doc.Variables.FreeVariables.Item(i + 1).Name;
  132. }
  133. int y = 20;
  134. for (int i = 0; i < ParamName.Length; i++)
  135. {
  136. //变量的名称Label
  137. Label Param = new Label();
  138. Param.Text = ParamName[i];
  139. Param.Name = ParamName[i] + "_label";
  140. Param.AutoSize = true;
  141. Param.Anchor = AnchorStyles.Left;
  142. Param.Anchor = AnchorStyles.Top;
  143. Param.Location = new Point(30, y + 5);
  144. this.Controls["LabelParam"].Controls.Add(Param);
  145. //维护变量的打印测试参数
  146. EnterTextBox TempParam = new EnterTextBox();
  147. TempParam.Anchor = AnchorStyles.Left;
  148. TempParam.Anchor = AnchorStyles.Top;
  149. TempParam.Name = ParamName[i];
  150. TempParam.Location = new Point(110, y);
  151. y = y + 30;
  152. TempParam.Size = new Size(170, 22);
  153. this.Controls["LabelParam"].Controls.Add(TempParam);
  154. y = y + 30;
  155. }
  156. doc.Close();
  157. }
  158. }
  159. if (LabelDataGridView.Columns[e.ColumnIndex].HeaderText == "编辑")
  160. {
  161. if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
  162. {
  163. LabelPath = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelurl"].Value.ToString();
  164. string LabelName = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelname"].Value.ToString();
  165. pr_code.Text = LabelDataGridView.Rows[e.RowIndex].Cells["pr_code1"].Value.ToString();
  166. la_code.Text = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelcode"].Value.ToString();
  167. la_name.Text = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labelname"].Value.ToString();
  168. la_type.Text = LabelDataGridView.Rows[e.RowIndex].Cells["pl_labeltype"].Value.ToString();
  169. FolderPath.Text = ftpOperater.DownLoadTo;
  170. pl_id2 = LabelDataGridView.Rows[e.RowIndex].Cells["pl_id"].Value.ToString();
  171. System.Diagnostics.Process.Start(BaseUtil.GetLabelUrl(LabelPath, LabelName));
  172. }
  173. }
  174. }
  175. private void Screen_Click(object sender, EventArgs e)
  176. {
  177. sql.Clear();
  178. condition.Clear();
  179. //如果条件全部为空的时候
  180. if (pr_code2.Text == "" && pr_detail.Text == "" && pr_spec.Text == "")
  181. {
  182. LoadData();
  183. }
  184. else
  185. {
  186. sql.Append("select pl_labelurl,pl_labeltype,pl_isdefault,pl_prodcode,pl_id,pl_labelcode,pl_detno,pl_labelsoft,pr_detail,pr_spec,pr_code from productlabel left join product on pl_prodcode=pr_code");
  187. //设置筛选的条件
  188. condition.Append(BaseUtil.GetScreenSqlCondition(pr_code2, pr_detail, pr_spec));
  189. //最终刷选条件拼接成的sql
  190. LoadData();
  191. }
  192. }
  193. private void Update_Click(object sender, EventArgs e)
  194. {
  195. string LabelSoft = "";
  196. //需要处理新增的行和原有数据然后更新的行
  197. if (CodeSoft.Checked)
  198. {
  199. LabelSoft = "CodeSoft";
  200. }
  201. DataTable dt = (DataTable)LabelDataGridView.DataSource;
  202. //如果有改变的行才传递到后台
  203. if (dt.GetChanges() != null)
  204. {
  205. //如果是新增的默认加上Radio当前选中的打印软件
  206. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  207. {
  208. if (LabelDataGridView.Rows[i].Cells["pl_labelsoft"].Value.ToString() == "")
  209. {
  210. LabelDataGridView.Rows[i].Cells["pl_labelsoft"].Value = LabelSoft;
  211. }
  212. if (!dic.ContainsKey(LabelDataGridView.Rows[i].Cells["pl_prodcode"].Value.ToString() + LabelDataGridView.Rows[i].Cells["pl_labeltype"].Value.ToString()))
  213. {
  214. dic.Add(LabelDataGridView.Rows[i].Cells["pl_prodcode"].Value.ToString() + LabelDataGridView.Rows[i].Cells["pl_labeltype"].Value.ToString(), LabelDataGridView.Rows[i].Cells["pl_isdefault"].Value.ToString());
  215. }
  216. else {
  217. string outvalue = dic[LabelDataGridView.Rows[i].Cells["pl_prodcode"].Value.ToString() + LabelDataGridView.Rows[i].Cells["pl_labeltype"].Value.ToString()];
  218. if (outvalue == "0")
  219. {
  220. dic[LabelDataGridView.Rows[i].Cells["pl_prodcode"].Value.ToString() + LabelDataGridView.Rows[i].Cells["pl_labeltype"].Value.ToString()] = LabelDataGridView.Rows[i].Cells["pl_isdefault"].Value.ToString();
  221. }
  222. else if (LabelDataGridView.Rows[i].Cells["pl_isdefault"].Value.ToString() == "1"&&(LabelDataGridView.Rows[i].Cells["pl_prodcode"].Value.ToString() == LabelDataGridView.Rows[i-1].Cells["pl_prodcode"].Value.ToString()) &&(LabelDataGridView.Rows[i].Cells["pl_labeltype"].Value.ToString() == LabelDataGridView.Rows[i-1].Cells["pl_labeltype"].Value.ToString())){
  223. MessageBox.Show("保存的模板之前具有默认模板");
  224. LabelDataGridView.Rows[i].Cells["pl_isdefault"].Value = "0";
  225. }
  226. }
  227. DataTable table = (DataTable)dh.ExecuteSql("select pl_isdefault from productlabel where pl_id = '" + LabelDataGridView.Rows[i].Cells["pl_id"].Value.ToString() + " '", "select");
  228. if (LabelDataGridView.Rows[i].Cells["pl_isdefault"].Value.ToString() == "1" && table.Rows[0][0].ToString() == "0")
  229. {
  230. int is_defualt = isdefault(LabelDataGridView.Rows[i].Cells["pl_prodcode"].Value.ToString(), LabelDataGridView.Rows[i].Cells["pl_labeltype"].Value.ToString());
  231. if (is_defualt == 0)
  232. {
  233. MessageBox.Show("保存的模板之前具有默认模板");
  234. LabelDataGridView.Rows[i].Cells["pl_isdefault"].Value = is_defualt;
  235. }
  236. }
  237. }
  238. string sql = "Insert into productlabel (PL_ID,PL_PRODCODE,PL_LABELTYPE,PL_LABELCODE,PL_LABELURL,PL_DETNO,PL_LABELSOFT,PL_ISDEFAULT) values( ProductLabel_seq.nextval,'" + pr_code.Text + "',:PL_LABELTYPE,:PL_LABELCODE,:PL_LABELURL,:PL_DETNO,:PL_LABELSOFT,:PL_ISDEFAULT )";
  239. dh.SaveDataTable(dt.GetChanges(), "productlabel", "pl_id", sql.ToLower());
  240. LoadData();
  241. dic.Clear();
  242. }
  243. }
  244. private void DeleteDetail_Click(object sender, EventArgs e)
  245. {
  246. string[] deleteid = new string[LabelDataGridView.RowCount];
  247. for (int i = 0; i < LabelDataGridView.RowCount; i++)
  248. {
  249. deleteid[i] = LabelDataGridView.Rows[i].Cells["pl_id"].Value.ToString();
  250. }
  251. dh.DeleteDataByID("productlabel", "pl_id", deleteid);
  252. LoadData();
  253. }
  254. private void OpenFolder_Click(object sender, EventArgs e)
  255. {
  256. //根据勾选的不同设置不同的文件后缀过滤
  257. if (CodeSoft.Checked)
  258. {
  259. openFileDialog1.Filter = "(*.lab)|*.lab";
  260. }
  261. DialogResult result = openFileDialog1.ShowDialog();
  262. if (result == DialogResult.OK)
  263. {
  264. string FullPath = openFileDialog1.FileName;
  265. FolderPath.Text = FullPath.Substring(0, FullPath.LastIndexOf("\\"));
  266. la_name.Text = FullPath.Substring(FullPath.LastIndexOf("\\") + 1);
  267. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  268. {
  269. if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
  270. {
  271. if ((bool)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
  272. {
  273. LabelDataGridView.Rows[i].Cells["pl_labelurl"].Value = FolderPath.Text;
  274. }
  275. }
  276. }
  277. }
  278. }
  279. private void LabelDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
  280. {
  281. if (LabelDataGridView.Columns[e.ColumnIndex].Name == "pl_isdefault")
  282. {
  283. if (e.Value != null)
  284. {
  285. switch (e.Value.ToString())
  286. {
  287. case "0":
  288. e.Value = "否";
  289. break;
  290. case "1":
  291. e.Value = "是";
  292. break;
  293. default:
  294. break;
  295. }
  296. }
  297. }
  298. }
  299. private void LabelDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
  300. {
  301. //覆盖参数错误的事件,使得不会报错
  302. }
  303. //判断与维护标签相同ID是否具有默认模板
  304. private int isdefault(string pl_prodcode, string pl_labeltype)
  305. {
  306. LogStringBuilder sql2 = new LogStringBuilder();
  307. sql2.Append("select la_id,pl_labelname,pl_labelurl,pl_labeltype,pl_isdefault,pl_prodcode,pl_id,pl_labelcode,pl_detno,pl_labelsoft,pr_detail,pr_spec,");
  308. sql2.Append("pr_code from productlabel left join product on pl_prodcode=pr_code left join label on pl_labelcode=la_code");
  309. sql2.Append(" where pl_isdefault = '1' and pl_prodcode = '" + pl_prodcode + "' and pl_labeltype = '" + pl_labeltype + "'");
  310. dt = (DataTable)dh.ExecuteSql(sql2.GetString(), "select");
  311. if (dt.Rows.Count > 0)
  312. {
  313. sql2.Clear();
  314. return 0;
  315. }
  316. else
  317. {
  318. sql2.Clear();
  319. return 1;
  320. }
  321. }
  322. private void LoadData()
  323. {
  324. //如果没有任何筛选条件直接选取productlabel的数据
  325. if (sql.GetString().Length == 0)
  326. {
  327. sql.Clear();
  328. sql.Append("select la_id,pl_labelname,pl_labelurl,pl_labeltype,pl_isdefault,pl_prodcode,pl_id,pl_labelcode,pl_detno,pl_labelsoft,pr_detail,pr_spec,");
  329. sql.Append("pr_code from productlabel left join product on pl_prodcode=pr_code left join label on pl_labelcode=la_code");
  330. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  331. }
  332. else
  333. {
  334. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  335. }
  336. BaseUtil.FillDgvWithDataTable(LabelDataGridView, dt, PerviewColumn, OperateColumn);
  337. string Field = BaseUtil.GetGridViewSelectContent(LabelDataGridView);
  338. pagination1.BindDataToNavigator(LabelDataGridView, "productlabel left join product on pl_prodcode=pr_code left join label on pl_labelcode=la_code", Field, "pl_id", "", condition.Replace("where", "").ToString(), PerviewColumn, OperateColumn);
  339. }
  340. private void PrintTest_Click(object sender, EventArgs e)
  341. {
  342. if (LabelCode != "")
  343. {
  344. doc.Save();
  345. doc.PrintDocument();
  346. doc.Close();
  347. }
  348. }
  349. private void 产品标签维护_FormClosing(object sender, FormClosingEventArgs e)
  350. {
  351. //关闭所有的打印文件
  352. if (lbl.Documents != null)
  353. lbl.Documents.CloseAll();
  354. }
  355. private void Save_Click(object sender, EventArgs e)
  356. {
  357. if (la_code.Text != "" && la_type.Text != "" && FolderPath.Text != "" && pr_code.Text != "")
  358. {
  359. if (FTPShare.Checked)
  360. {
  361. string SoftWare = "CodeSoft";
  362. ftpOperater ftp = new ftpOperater();
  363. ftp.UpLoadFile(FolderPath.Text, la_name.Text);
  364. if (pl_id2 != "")
  365. {
  366. sql.Clear();
  367. sql.Append("update productlabel set pl_labelcode=:pl_labelcode,pl_labeltype=:pl_labeltype,pl_labelname=:pl_labelname,");
  368. sql.Append("pl_prodcode=:pl_prodcode,pl_indate=sysdate where pl_id='" + pl_id2 + "'");
  369. dh.ExecuteSql(sql.GetString(), "update", la_code.Text, la_type.Text, la_name.Text, pr_code.Text);
  370. }
  371. else
  372. {
  373. sql.Clear();
  374. sql.Append("insert into productlabel (pl_id,pl_labelcode,pl_labeltype,pl_isdefault,pl_labelurl,pl_labelsoft,pl_labelname,pl_prodcode,pl_indate) values( productlabel_seq.nextval, ");
  375. sql.Append("'" + la_code.Text + "','" + la_type.Text + "','" + isdefault(pr_code.Text, la_type.Text) + "','" + ftpOperater.FTPAddress + la_name.Text + "','" + SoftWare + "','" + la_name.Text + "','" + pr_code.Text + "',sysdate)");
  376. dh.ExecuteSql(sql.GetString(), "insert");
  377. }
  378. pl_id2 = "";
  379. MessageBox.Show("保存成功!");
  380. sql.Clear();
  381. LoadData();
  382. }
  383. }
  384. else
  385. MessageBox.Show("所有参数必须填写");
  386. }
  387. private void 产品标签维护_SizeChanged(object sender, EventArgs e)
  388. {
  389. asc.controlAutoSize(this);
  390. }
  391. private void ScreenEvent(object sender, KeyEventArgs e)
  392. {
  393. if (e.KeyCode == Keys.Enter)
  394. Screen.PerformClick();
  395. }
  396. private void Delete_Click(object sender, EventArgs e)
  397. {
  398. string[] deleteid = new string[LabelDataGridView.RowCount];
  399. for (int i = 0; i < LabelDataGridView.RowCount; i++)
  400. {
  401. if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
  402. {
  403. if ((bool)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
  404. {
  405. deleteid[i] = LabelDataGridView.Rows[i].Cells["pl_id"].Value.ToString();
  406. }
  407. }
  408. }
  409. dh.DeleteDataByID("productlabel", "pl_id", deleteid);
  410. LoadData();
  411. }
  412. }
  413. }