FrmThermometerCoding.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using WDProduceTool.CNPrintTemplateData;
  13. using WDProduceTool.Common;
  14. using WDProduceTool.Context;
  15. using WDProduceTool.controls;
  16. using WDProduceTool.Model;
  17. using WDProduceTool.Service;
  18. using WDProduceTool.Utils;
  19. namespace WDProduceTool.Forms
  20. {
  21. public partial class FrmThermometerCoding : Form
  22. {
  23. ProduceService service = null;
  24. private List<WdThermometerCategory> categories = new List<WdThermometerCategory>();
  25. private List<WdThermometerSchedual> scheduals = new List<WdThermometerSchedual>();
  26. private List<WdPrinterSolution> thermometerSolution = new List<WdPrinterSolution>();
  27. public FrmThermometerCoding()
  28. {
  29. InitializeComponent();
  30. service = new ProduceService();
  31. initComponents();
  32. }
  33. private void initComponents()
  34. {
  35. using (WdSqliteDbContext context = new WdSqliteDbContext())
  36. {
  37. categories = context.WdThermometerCategorySet.ToList();
  38. scheduals = context.WdThermometerSchedualSet.ToList();
  39. cb_model.DataSource = categories;
  40. cb_model.DisplayMember = "name";
  41. cb_model.ValueMember = "union_id";
  42. cb_model.AutoCompleteMode = AutoCompleteMode.None;
  43. if (categories.Count > 0)
  44. {
  45. cb_model.SelectedIndex = 0;
  46. }
  47. cb_schedual.DataSource = scheduals;
  48. cb_schedual.DisplayMember = "schedual_name";
  49. cb_schedual.ValueMember = "union_id";
  50. cb_schedual.AutoCompleteMode = AutoCompleteMode.None;
  51. if (scheduals.Count > 0)
  52. {
  53. cb_schedual.SelectedIndex = 0;
  54. }
  55. string printName = ParamConfigHelper.GetParamByName(Constants.PRINTER_NAME);
  56. List<string> prints = PrintHelper.GetLocalPrinters();
  57. string defaultPrint = PrintHelper.GetDefaultPrinter();
  58. cb_printer.DataSource = prints;
  59. if (!string.IsNullOrEmpty(printName))
  60. {
  61. int pindex = prints.IndexOf(printName);
  62. cb_printer.SelectedIndex = pindex;
  63. }
  64. cb_operate.SelectedIndex = 0;
  65. this.dataGridView1.AutoGenerateColumns = false; // 防止自由生成所有数据列
  66. this.dataGridView1.AllowUserToAddRows = false;
  67. DatagridViewCheckBoxHeaderCell cbHeader = new DatagridViewCheckBoxHeaderCell();
  68. cbHeader.Value = "全选";
  69. cbHeader.OnCheckBoxClicked += new CheckBoxClickedHandler(cbHeader_OnCheckBoxClicked);
  70. DataGridViewCheckBoxColumn checkbox = new DataGridViewCheckBoxColumn();
  71. checkbox.Name = "IsChecked";
  72. checkbox.TrueValue = true;
  73. checkbox.FalseValue = false;
  74. checkbox.DataPropertyName = "IsChecked";
  75. dataGridView1.Columns.Insert(0, checkbox);
  76. // 防止自由生成所有数据列
  77. dataGridView1.Columns.Add("name", "体温枪名称"); // 手动添加某列
  78. dataGridView1.Columns.Add("model", "体温枪型号");
  79. dataGridView1.Columns.Add("serial_no", "出厂编号");
  80. dataGridView1.Columns.Add("security_code", "防伪码");
  81. dataGridView1.Columns.Add("batch_number", "生产批号");
  82. dataGridView1.Columns.Add("schedual_code", "生产班次");
  83. dataGridView1.Columns.Add("number", "批次序号");
  84. dataGridView1.Columns.Add("produce_date", "生产日期");
  85. dataGridView1.Columns.Add("uploaded", "是否已上传");
  86. dataGridView1.Columns.Add("security_printed", "已打印防伪标贴");
  87. dataGridView1.Columns.Add("qc_printed", "已打印合格证");
  88. dataGridView1.Columns.Add("union_id", "union_id");
  89. dataGridView1.Columns.Add("expiration", "使用期限");
  90. dataGridView1.Columns[0].HeaderCell = cbHeader;
  91. dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
  92. dataGridView1.Columns[0].Width = 100;
  93. dataGridView1.Columns[1].DataPropertyName = "name";
  94. dataGridView1.Columns[2].DataPropertyName = "model";
  95. dataGridView1.Columns[3].DataPropertyName = "serial_no";
  96. dataGridView1.Columns[4].DataPropertyName = "security_code";
  97. dataGridView1.Columns[5].DataPropertyName = "batch_number";
  98. dataGridView1.Columns[6].DataPropertyName = "schedual_code";
  99. dataGridView1.Columns[7].DataPropertyName = "number";
  100. dataGridView1.Columns[8].DataPropertyName = "produce_date";
  101. dataGridView1.Columns[9].DataPropertyName = "uploaded";
  102. dataGridView1.Columns[10].DataPropertyName = "security_printed";
  103. dataGridView1.Columns[10].Width = 130;
  104. dataGridView1.Columns[11].DataPropertyName = "qc_printed";
  105. dataGridView1.Columns[11].Width = 130;
  106. dataGridView1.Columns[12].DataPropertyName = "union_id";
  107. dataGridView1.Columns[12].Visible = false;
  108. dataGridView1.Columns[13].DataPropertyName = "expiration";
  109. dataGridView1.Columns[13].Width = 120;
  110. BindData();
  111. thermometerSolution = context.WdPrinterSolutionSet.Where(p=>p.dev_value==10 || p.dev_value==11).ToList();
  112. }
  113. }
  114. private void cbHeader_OnCheckBoxClicked(bool state)
  115. {
  116. //这一句很重要结束编辑状态
  117. dataGridView1.EndEdit();
  118. if (dataGridView1.Rows.Count > 0)
  119. {
  120. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  121. {
  122. dataGridView1.Rows[i].Cells[0].Value = state;
  123. }
  124. }
  125. }
  126. private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
  127. {
  128. switch (e.ColumnIndex)
  129. {
  130. case 9:
  131. case 10:
  132. case 11:
  133. if (e.Value != null && e.Value.ToString() == "True")
  134. {
  135. e.Value = "是";
  136. e.CellStyle.ForeColor = Color.DarkTurquoise;
  137. }
  138. else
  139. {
  140. e.Value = "否";
  141. e.CellStyle.ForeColor = Color.Red;
  142. }
  143. break;
  144. case 8:
  145. if (e.Value != null && !String.IsNullOrEmpty(e.Value.ToString()))
  146. {
  147. var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
  148. dtDateTime = dtDateTime.AddMilliseconds(long.Parse(e.Value.ToString()) * 1000);
  149. e.Value = dtDateTime.ToString("yyyy/MM/dd");
  150. }
  151. break;
  152. }
  153. }
  154. private void BindData()
  155. {
  156. List<WdThermometerProduced> source = service.GetWdThemometerProduceds();
  157. dataGridView1.DataSource = source;
  158. }
  159. private void txt_qty_KeyPress(object sender, KeyPressEventArgs e)
  160. {
  161. if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8 &&
  162. e.KeyChar != 1 && e.KeyChar != 3 && e.KeyChar != 22)
  163. {
  164. e.Handled = true;
  165. }
  166. }
  167. private void btn_generate_Click(object sender, EventArgs e)
  168. {
  169. if (cb_model.SelectedItem == null)
  170. {
  171. MessageBox.Show("请选择体温枪型号", "系统提示");
  172. return;
  173. }
  174. if (cb_schedual.SelectedItem == null)
  175. {
  176. MessageBox.Show("请选择生产班次", "系统提示");
  177. return;
  178. }
  179. if (String.IsNullOrEmpty(txt_qty.Text))
  180. {
  181. MessageBox.Show("请输入生产数量", "系统提示");
  182. return;
  183. }
  184. if (cb_operate.SelectedItem==null)
  185. {
  186. MessageBox.Show("请选择操作类型", "系统提示");
  187. return;
  188. }
  189. WdThermometerCategory wdThermometerCategory =(WdThermometerCategory)cb_model.SelectedItem;
  190. WdThermometerSchedual wdThermometerSchedual = (WdThermometerSchedual)cb_schedual.SelectedItem;
  191. int qty = int.Parse(txt_qty.Text);
  192. DateTime date = date_time_picker.Value;
  193. JObject result = service.GenerateCodes(wdThermometerCategory, wdThermometerSchedual, qty,date);
  194. if(result.Value<Boolean>("success"))
  195. {
  196. BindData();
  197. }
  198. else
  199. {
  200. MessageBox.Show(result.Value<String>("message"), "系统提示");
  201. }
  202. }
  203. private void btn_choose_unprint_Click(object sender, EventArgs e)
  204. {
  205. String operate = cb_operate.SelectedItem.ToString();
  206. int cellIndex = 10;
  207. if (operate == "合格证")
  208. {
  209. cellIndex = 11;
  210. }
  211. else
  212. {
  213. cellIndex = 10;
  214. }
  215. if (dataGridView1.Rows.Count > 0)
  216. {
  217. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  218. {
  219. if (!(bool)dataGridView1.Rows[i].Cells[cellIndex].Value)
  220. {
  221. dataGridView1.Rows[i].Cells[0].Value = true;
  222. }
  223. else
  224. {
  225. dataGridView1.Rows[i].Cells[0].Value = false;
  226. }
  227. }
  228. }
  229. }
  230. private void btn_delete_choosed_Click(object sender, EventArgs e)
  231. {
  232. List<string> checkIds = new List<string>();
  233. //取得选中的行
  234. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  235. {
  236. if (dataGridView1.Rows[i].Cells[0].Value != null && (bool)dataGridView1.Rows[i].Cells[0].Value == true)
  237. {
  238. checkIds.Add(dataGridView1.Rows[i].Cells[12].Value.ToString());
  239. }
  240. }
  241. if (checkIds.Count == 0)
  242. {
  243. MessageBox.Show("请勾选要删除的数据行!");
  244. return;
  245. }
  246. service.deleteThermometerProduced(checkIds);
  247. BindData();
  248. }
  249. private void btn_print_choosed_Click(object sender, EventArgs e)
  250. {
  251. List<string> checkIds = new List<string>();
  252. //取得选中的行
  253. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  254. {
  255. if (dataGridView1.Rows[i].Cells[0].Value != null && (bool)dataGridView1.Rows[i].Cells[0].Value == true)
  256. {
  257. checkIds.Add(dataGridView1.Rows[i].Cells[12].Value.ToString());
  258. }
  259. }
  260. if (checkIds.Count == 0)
  261. {
  262. MessageBox.Show("请勾选要打印的数据行!");
  263. return;
  264. }
  265. List<WdThermometerProduced> checkThermometerProduced = (dataGridView1.DataSource as List<WdThermometerProduced>).Where(p => checkIds.Contains(p.union_id)).ToList();
  266. if(checkThermometerProduced.Count >0)
  267. {
  268. foreach(var wdThermometerProduced in checkThermometerProduced)
  269. {
  270. printLabel(wdThermometerProduced);
  271. }
  272. }
  273. }
  274. private void btn_upload_choosed_Click(object sender, EventArgs e)
  275. {
  276. JObject result = service.UploadThermometerProduced();
  277. if ((bool)result["success"])
  278. {
  279. MessageBox.Show("上传成功!", "系统提示");
  280. BindData();
  281. }
  282. else
  283. {
  284. MessageBox.Show("上传失败!", "系统提示");
  285. return;
  286. }
  287. }
  288. private void printLabel(WdThermometerProduced wdThermometerProduced)
  289. {
  290. try
  291. {
  292. String operate = cb_operate.SelectedItem.ToString();
  293. WdPrinterSolution printerSolution = null;
  294. if (thermometerSolution.Count == 0)
  295. {
  296. MessageBox.Show("没有打印模板,请联系管理员设置", "系统提示");
  297. return;
  298. }
  299. object printData = null;
  300. if (operate == "合格证")
  301. {
  302. printData = new ThermometerQCData(wdThermometerProduced);
  303. printerSolution = thermometerSolution.FirstOrDefault(p => p.dev_value == 11);
  304. }
  305. else
  306. {
  307. printData = new ThermometerSecurityData(wdThermometerProduced);
  308. printerSolution = thermometerSolution.FirstOrDefault(p => p.dev_value == 10);
  309. }
  310. if(printerSolution == null)
  311. {
  312. MessageBox.Show("没有打印模板,请联系管理员设置", "系统提示");
  313. return;
  314. }
  315. string serverUrl = Constants.serverUrl + "/";
  316. //打印标签
  317. if (wdThermometerProduced != null)
  318. {
  319. var doc = CNPrintCommandHelper.getPrintDocument(
  320. printData,
  321. serverUrl + printerSolution.template_url);
  322. int qty = 1;
  323. CNPrint.PrintDocument[] documents = new CNPrint.PrintDocument[qty];
  324. for (int i = 0; i < qty; i++)
  325. {
  326. CNPrint.PrintDocument copydoc = doc.Clone() as CNPrint.PrintDocument;
  327. copydoc.documentID = MongoDB.Bson.ObjectId.GenerateNewId().ToString();
  328. documents[i] = copydoc;
  329. }
  330. var printTask = CNPrintCommandHelper.getPrintTaskCommand(cb_printer.SelectedItem.ToString(), false, "pdf", 1, 1, documents);
  331. //发送打印指令
  332. WebsocketClient.Instance.SendMessageAsync(JsonConvert.SerializeObject(printTask));
  333. if(operate == "合格证")
  334. {
  335. wdThermometerProduced.qc_printed = true;
  336. }
  337. else
  338. {
  339. wdThermometerProduced.security_printed = true;
  340. }
  341. service.updateWdThermomoeterProduced(wdThermometerProduced);
  342. }
  343. }
  344. catch (Exception e)
  345. {
  346. }
  347. }
  348. }
  349. }