using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; using System.IO; using HH.WMS.Client; using Newtonsoft.Json; using DevComponents.DotNetBar.Controls; using System.Collections; using Newtonsoft.Json.Linq; using System.Net; using System.Management; using HH.WMS.Client.Common; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Entitys.PrintDataSource; using HH.WMS.Client.frm; using HH.WMS.Entitys.Sys; using DevComponents.DotNetBar; namespace WindowsFormsApplication2 { public partial class ItemTagPrint : frmTemplet { //全局变量 DataTable dt = new DataTable(); private string currentPrintOrder = ""; public ItemTagPrint() { InitializeComponent(); } /// /// 物料编码 /// public bool isItems { get; set; } private void ItemTagPrint_Load(object sender, EventArgs e) { dgvWaitPrintDg.AutoGenerateColumns = false; PrintService(); GetOrder(); GetPrinter(); GetBarMode(); DevComponents.DotNetBar.ButtonItem btnItemSet = new DevComponents.DotNetBar.ButtonItem(); btnItemSet.Image = global::HH.WMS.Client.Properties.Resources.moban; btnItemSet.ItemAlignment = DevComponents.DotNetBar.eItemAlignment.Center; //btnItemHome.Name = "btnItemHome"; btnItemSet.PopupWidth = 100; btnItemSet.Text = "设置"; btnItemSet.Click += btnItemSet_Click; //btnItemSet.ItemAlignment = DevComponents.DotNetBar.eItemAlignment.Far; this.AddMenu(btnItemSet); } void btnItemSet_Click(object sender, EventArgs e) { frmTempletSet from = new frmTempletSet(); from.ShowDialog(); } //填充表格 public void BindData(string opNo) { dgvlist.Refresh(); string str = ""; var type = this.cmbOrderType.Text; if (type == "入库单") { str = WebApiManager.HttpWMS_Get("/api/In/GetListInventoryDtl?opNo=" + opNo); } else if (type == "采购单") { str = WebApiManager.HttpWMS_Get("/api/In/GetInDtlList?opNo=" + opNo); } else if (type == "到货单") { str = WebApiManager.HttpWMS_Get("/api/Arrival/GetDtlList?opNo=" + opNo); } OperateResult results = JsonConvert.DeserializeObject(str); dgvlist.AutoGenerateColumns = false; this.dgvlist.DataSource = results.Data; SetPrintQty(); } #region 计算打印数量 public void SetPrintQty() { List items = new List(); foreach (DataGridViewRow r in this.dgvlist.Rows) { items.Add(r.Cells["CN_S_ITEM_CODE"].Value.ToString()); } string str = WebApiManager.HttpWMS_Get("/api/Item/GetItemModels?itemCodes=" + string.Join(",", items)); OperateResult results = JsonConvert.DeserializeObject(str); if (results.Status == ResultStatus.Success) { List itemlist = JsonConvert.DeserializeObject>(results.Data.ToString()); foreach (DataGridViewRow r in this.dgvlist.Rows) { AutoBomItemEntity item = itemlist.Find(x => x.CN_S_ITEM_CODE.Equals(r.Cells["CN_S_ITEM_CODE"].Value.ToString())); if (item == null) { MessageBoxEx.Show("Mongo中未找到该物料!"); return; } if (item.CN_F_MIN_PACK_QTY == 0) { r.Cells["CN_F_MIN_PACK_QTY"].Value = Convert.ToInt16(r.Cells["CN_F_QUANTITY"].Value); r.Cells["PrintQuantity"].Value = 1; } else { r.Cells["CN_F_MIN_PACK_QTY"].Value = item.CN_F_MIN_PACK_QTY; r.Cells["PrintQuantity"].Value = Convert.ToInt16(Convert.ToInt16(r.Cells["CN_F_QUANTITY"].Value) / item.CN_F_MIN_PACK_QTY); } } } } #endregion //事件处理方法 void frm_TransfEvent(string value) { BindData(value); } /// /// 绑定选择Item的数据源 /// /// public void GetItemlist(DataTable ds) { isItems = true; dgvlist.Refresh(); dgvlist.AutoGenerateColumns = false; ds.Columns.Add("PrintQuantity"); foreach (DataRow dr in ds.Rows) dr["PrintQuantity"] = 1; this.dgvlist.DataSource = ds; //results.Data; } #region 加载打印机 /// /// 加载打印机 /// public void GetPrinter() { PrintDocument print = new PrintDocument(); string sDefault = print.PrinterSettings.PrinterName;//默认打印机名 var printers = PrinterSettings.InstalledPrinters;//获取全部打印机 foreach (string sPrint in PrinterSettings.InstalledPrinters)//获取所有打印机名称 { cmbPrinter.Items.Add(sPrint); } } #endregion //加载单据 public void GetOrder() { DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(string)); dt.Columns.Add("name", typeof(string)); dt.Rows.Add("0", "--请选择--"); dt.Rows.Add("1", "入库单"); dt.Rows.Add("2", "采购单"); dt.Rows.Add("3", "到货单"); this.cmbOrderType.DataSource = dt; this.cmbOrderType.ValueMember = "id"; this.cmbOrderType.DisplayMember = "name"; } #region 获取bartender文件模版 /// /// 获取bartender文件模版 /// public void GetBarMode() { this.cmbBartender.Items.Clear(); string path = @"ActionReport/Template/"; DirectoryInfo root = new DirectoryInfo(path); FileInfo[] files = root.GetFiles(); foreach (FileInfo m in files) this.cmbBartender.Items.Add(m.Name); //string str = WebApiManager.HttpWMS_Get("/api/PrintTemplet/GetPrintTemplet?ip=" + StaticUtil.Ip // + "&mac=" + StaticUtil.Mac); //OperateResult results = JsonConvert.DeserializeObject(str); //if (results.Status == ResultStatus.Success) //{ //List v = JsonConvert.DeserializeObject>(results.Data.ToString()); //this.cmbBartender.DataSource = v.FindAll(x => x.CN_S_TEMPLET_TYPE.Equals("物料标签") && x.CN_S_MAC.Equals(StaticUtil.Mac)); //this.cmbBartender.DisplayMember ="CN_S_TEMPLET_NAME"; //} //else //{ // MessageBoxEx.Show("打印模板加载失败!"); //} } #endregion #region 打印 /// /// 打印 /// /// /// private void btnPrint_Click(object sender, EventArgs e) { //组织打印信息 List list = new List(); dt = new DataTable(); if (this.dgvlist.Rows.Count == 0) { MessageBoxEx.Show("请选择打印信息!", "汉和信息"); return; } if (string.IsNullOrEmpty(this.cmbBartender.Text)) { MessageBoxEx.Show("请选择打印模版!", "汉和信息"); return; } TN_WM_B_STRATEGY_VALUEEntity strategy = StaticUtil.StrategyList.Find(x => x.CN_S_CODE.Equals("IsUseSNCode")); string IsUseSNCode = "Y"; if (strategy != null) IsUseSNCode = strategy.CN_S_VALUE; DataTable printDt = new DataTable(); printDt.Columns.Add("ItemCode"); printDt.Columns.Add("ItemName"); printDt.Columns.Add("Model"); printDt.Columns.Add("Qty"); printDt.Columns.Add("Unit"); printDt.Columns.Add("FigureNo"); printDt.Columns.Add("UniqueCode"); for (int i = 0; i < dgvlist.Rows.Count; i++) { int printQuantity = Convert.ToInt32(dgvlist.Rows[i].Cells["PrintQuantity"].FormattedValue); for (int j = 0; j < printQuantity; j++) { string itemCode = dgvlist.Rows[i].Cells["CN_S_ITEM_CODE"].Value.ToString(); decimal packQty = Convert.ToDecimal(dgvlist.Rows[i].Cells["CN_F_MIN_PACK_QTY"].Value); if (packQty == 0) { MessageBoxEx.Show("请维护最小包装数!"); return; } string uniqueCode = ""; if (IsUseSNCode == "Y") { //启用唯一码时生成 PAK唯一号 uniqueCode = Guid.NewGuid().ToString(); } printDt.Rows.Add( itemCode, dgvlist.Rows[i].Cells["CN_S_ITEM_NAME"].Value, dgvlist.Rows[i].Cells["CN_S_MODEL"].Value, packQty, dgvlist.Rows[i].Cells["CN_S_MEASURE_UNIT"].Value, dgvlist.Rows[i].Cells["CN_S_FIGURE_NO"].Value, uniqueCode); list.Add(new MONGO_PRINT_BARCODE() { CN_S_IN_ORDER = currentPrintOrder, CN_S_ITEM_CODE = itemCode, CN_S_ITEM_NAME = dgvlist.Rows[i].Cells["CN_S_ITEM_NAME"].Value.ToString(), CN_S_FIGURE_NO = dgvlist.Rows[i].Cells["CN_S_FIGURE_NO"].Value.ToString(), CN_S_UNIQUE_CODE = uniqueCode, //CN_S_PACKING_UNIT = CN_F_PACKING_QTY = packQty, CN_F_QUANTITY = packQty//.ToDecimal(dgvlist.Rows[i].Cells["CN_F_QUANTITY"].Value) }); } } currPrintDS = printDt; //var info = SysStrategyList.Where(x => (x["CN_S_STOCK_CODE"]).ToString() ==StaticUtil.StockCode && (x["CN_S_CODE"]).ToString() == "IsUseSNCode").ToArray(); if (IsUseSNCode.Equals("Y")) { string str = WebApiManager.HttpWMS_Post("/api/PrintTag/PrintItemTag", JsonConvert.SerializeObject(list)); OperateResult results = JsonConvert.DeserializeObject(str); if (results.Status == ResultStatus.Error) { MessageBoxEx.Show("打印失败", "合肥汉和"); return; } } OperateResult or = ArPrint(cmbPrinter.Text, cmbBartender.Text, currPrintDS); if (or.Status != ResultStatus.Success) MessageBoxEx.Show(or.Msg); else MessageBoxEx.Show("打印成功!"); //ArPrint(); } #endregion #region 删除 /// /// 删除 /// /// /// private void btnDelete_Click(object sender, EventArgs e) { if (this.dgvlist.SelectedRows.Count == 0) { MessageBoxEx.Show(this, "请选择需要删除的行!", "合肥汉和"); return; } DialogResult dr = MessageBoxEx.Show(this, "确定要删除选中行数据码?", "合肥汉和", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == System.Windows.Forms.DialogResult.Yes) { for (int i = this.dgvlist.SelectedRows.Count; i > 0; i--) { dgvlist.Rows.RemoveAt(dgvlist.SelectedRows[i - 1].Index); if (dgvlist.Rows.Count == 0) btnSelectOne.Enabled = true; } } } #endregion //新增 private void btnSelectOne_Click(object sender, EventArgs e) { ItemForm item = new ItemForm(); item.Text = "单品选择"; item.itemCodes += GetItemlist; item.Show(); } //弹出子窗体 private void btnSelect_Click(object sender, EventArgs e) { var fromtext = this.cmbOrderType.Text; if (fromtext == "--请选择--") { MessageBoxEx.Show("请选择单据类型", "合肥汉和"); return; } if (fromtext == "入库单") { InFrom f2 = new InFrom(); f2.Text = fromtext; //注册事件 f2.TransfEvent += frm_TransfEvent; f2.ShowDialog(); } else if (fromtext == "采购单") { InOrderFrom io = new InOrderFrom(); io.Text = fromtext; //注册事件 io.TransfEvent += frm_TransfEvent; io.ShowDialog(); } else if (fromtext == "到货单") { ArrivalOrderForm ao = new ArrivalOrderForm(); ao.Text = fromtext; ao.TransfEvent += frm_TransfEvent; ao.ShowDialog(); } } private void dgvlist_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) { for (int i = 0; i < this.dgvlist.Rows.Count; i++) { DataGridViewRow r = this.dgvlist.Rows[i]; r.HeaderCell.Value = string.Format("{0}", i + 1); } } private void btnEmpty_Click(object sender, EventArgs e) { this.dgvlist.DataSource = null; btnSelectOne.Enabled = true; } //设置默认值 private void dgvlist_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) { e.Row.Cells["PrintQuantity"].Value = "1"; } #region 打印 private DataTable currPrintDS; /// /// 打印 /// /// 打印机名 /// 打印模板 /// 打印数据源 private OperateResult ArPrint(string printer, string templetName, DataTable dt) { try { currPrintDS = dt; GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(@"ActionReport/Template/" + templetName + ""));//打开模版 rpt.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(SetPrintDataSource); rpt.Document.Printer.PrinterName = printer; //this.viewer1.LoadDocument(rpt.Document); bool b = GrapeCity.ActiveReports.PrintExtension.Print(rpt.Document, false, false); if (b) return OperateResult.Succeed(); else return OperateResult.Error("打印异常!"); } catch (Exception ex) { return OperateResult.Error(ex.Message); } } private void SetPrintDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args) { args.Data = currPrintDS; } #endregion #region 刷新模板 /// /// 刷新模板 /// /// /// private void btnShuaxin_Click(object sender, EventArgs e) { //清除 GetBarMode();//从新加载 } #endregion #region 编辑格式限制 /// /// 编辑格式限制 /// /// /// TextBox control; private void dgvlist_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control.GetType().BaseType.Name == "TextBox") { control = new TextBox(); control = (TextBox)e.Control; if (control.Text == "0") //需要限制输入数字的单元格 { control.KeyPress += new KeyPressEventHandler(control_KeyPress); } else { //非数字类型单元格 control.Leave += new EventHandler(control_Leave); } } } void control_KeyPress(object sender, KeyPressEventArgs e) { //限制只能输入-9的数字,退格键,小数点和回车 //if (((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) || e.KeyChar == 13 || e.KeyChar == 8 || e.KeyChar == 46) if (((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) || e.KeyChar == 13 || e.KeyChar == 8) { e.Handled = false; } else { e.Handled = true; MessageBoxEx.Show("只能输入数字!"); } } void control_Leave(object sender, EventArgs e) { //如果需要限制字符串输入长度 //if (control.Text.Length != 11) //{ // MessageBox.Show("只能为位!"); // control.Focus(); //} } #endregion #region 后台打印服务 Timer GetTaskTimer; /// /// 后台打印服务 /// private void PrintService() { GetTaskTimer = new Timer(); GetTaskTimer.Interval = 2000; GetTaskTimer.Tick += GetTaskTimer_Tick; GetTaskTimer.Start(); } private void GetTaskTimer_Tick(object sender, EventArgs e) { GetPrintTask(true); } #endregion #region 复选历史打印任务 /// /// 复选历史打印任务 /// /// /// private void cbkHistory_CheckedChanged(object sender, EventArgs e) { dtiStart.Visible = dtiEnd.Visible = lbl1.Visible = chkHistory.Checked; } #endregion #region 补打任务 /// /// 补打任务 /// /// /// private void btnRePrint_Click(object sender, EventArgs e) { try { if (dgvTask.SelectedRows.Count == 0) { MessageBoxEx.Show("请选择需要补打的行!"); return; } bool isOk = true; foreach (DataGridViewRow m in dgvTask.SelectedRows) { string content = m.Cells["CN_S_CONTENT"].Value.ToString().Replace('<', '[').Replace('(', '{').Replace('\\', '\"').Replace(')', '}').Replace('>', ']'); currPrintDS = JsonConvert.DeserializeObject(content); OperateResult or = ArPrint(m.Cells["CN_S_PRINTER"].Value.ToString().Replace('!', '\\'), m.Cells["CN_S_TEMPLET_NAME"].Value.ToString(), currPrintDS); if (or.Status == ResultStatus.Success) WebApiManager.HttpWMS_Get("/api/PrintTemplet/UpdatePrintFlag?guids=" + m.Cells["CN_GUID"].ToString()); else { m.Cells["columnRemark"].Value = or.Msg; isOk = false; } } if (!isOk) { MessageBoxEx.Show("打印失败,请查看备注!"); } } catch (Exception ex) { MessageBoxEx.Show(ex.Message); } } #endregion #region 搜索 /// /// 搜索 /// /// /// private void btnSearch_Click(object sender, EventArgs e) { if (chkHistory.Checked && (dtiStart.Value.ToShortDateString().Equals("0001/1/1") || dtiEnd.Value.ToShortDateString().Equals("0001/1/1"))) { MessageBoxEx.Show("请选择查找范围!"); return; } GetPrintTask(false); } #endregion #region 获取打印任务 /// /// 获取打印任务 /// /// 是否自动打印 private void GetPrintTask(bool isPrint) { string startDate = "", endDate = ""; if (chkHistory.Checked) { startDate = dtiStart.Value.ToShortDateString(); endDate = dtiEnd.Value.ToShortDateString(); } string str = WebApiManager.HttpWMS_Get("/api/PrintTemplet/GetPrintTask?mac=" + StaticUtil.Mac + "&isHistory=" + (chkHistory.Checked ? "Y" : "N") + "&key=" + txtKey.Text + "&startDate=" + startDate + "&endDate=" + endDate); OperateResult results = JsonConvert.DeserializeObject(str); if (results.Status == ResultStatus.Error) { return; } if (!isPrint) { dgvTask.Rows.Clear(); } if (!results.Data.ToString().Equals("[]")) { foreach (TN_WM_PRINT_TASKEntity m in JsonConvert.DeserializeObject>(results.Data.ToString())) { bool b = true; foreach (DataGridViewRow r in dgvTask.Rows) { if (r.Cells[0].Tag.ToString().Equals(m.CN_GUID)) { b = false; break; } } if (!b) continue; if (!chkHistory.Checked) { DataGridViewRow row = new DataGridViewRow(); DataGridViewCheckBoxCell cell0 = new DataGridViewCheckBoxCell(); cell0.Tag = m.CN_GUID; row.Cells.Add(cell0); DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell(); cell1.Value = m.CN_S_TEMPLET_TYPE.Trim(); row.Cells.Add(cell1); DataGridViewTextBoxCell cell2 = new DataGridViewTextBoxCell(); cell2.Value = m.CN_S_TEMPLET_NAME.Trim(); row.Cells.Add(cell2); DataGridViewTextBoxCell cell3 = new DataGridViewTextBoxCell(); cell3.Value = m.CN_S_PRINTER.Trim(); row.Cells.Add(cell3); DataGridViewTextBoxCell cell5 = new DataGridViewTextBoxCell(); cell5.Value = m.CN_S_CONTENT.Trim(); row.Cells.Add(cell5); DataGridViewTextBoxCell cell9 = new DataGridViewTextBoxCell(); cell9.Value = m.CN_T_CREATE; row.Cells.Add(cell9); DataGridViewTextBoxCell cell8 = new DataGridViewTextBoxCell(); cell8.Value = m.CN_C_IS_PRINTED.Trim(); row.Cells.Add(cell8); dgvTask.Rows.Add(row); } if (isPrint) { m.CN_S_CONTENT = m.CN_S_CONTENT.Replace('<', '[').Replace('(', '{').Replace('\\', '\"').Replace(')', '}').Replace('>', ']'); currPrintDS = JsonConvert.DeserializeObject(m.CN_S_CONTENT); OperateResult or = ArPrint(m.CN_S_PRINTER.Replace('!', '\\'), m.CN_S_TEMPLET_NAME, currPrintDS); if (or.Status == ResultStatus.Success) { string strResult = WebApiManager.HttpWMS_Get("/api/PrintTemplet/UpdatePrintFlag?guids=" + m.CN_GUID.Trim()); or = JsonConvert.DeserializeObject(strResult); if (or.Status == ResultStatus.Success) { //清除已打印的任务 foreach (DataGridViewRow r in dgvTask.Rows) { if (r.Cells[0].Tag.ToString().Trim().Equals(m.CN_GUID.Trim())) { dgvTask.Rows.Remove(r); break; } } } else { foreach (DataGridViewRow r in dgvTask.Rows) { if (r.Cells[0].Tag.ToString().Trim().Equals(m.CN_GUID.Trim())) { r.Cells["columnRemark"].Value = or.Msg; break; } } } } else { foreach (DataGridViewRow r in dgvTask.Rows) { if (r.Cells[0].Tag.ToString().Trim().Equals(m.CN_GUID.Trim())) { r.Cells["columnRemark"].Value = or.Msg; break; } } } } } } } #endregion #region 选择打印机模板 /// /// 选择打印机模板 /// /// /// private void cmbBartender_SelectedValueChanged(object sender, EventArgs e) { if (cmbBartender.SelectedValue != null) { string printer = cmbBartender.SelectedValue.ToString().Replace('!', '\\'); cmbPrinter.SelectedIndex = cmbPrinter.Items.IndexOf(printer); } } #endregion #region 刷新未完全打印的入库单 /// /// 刷新未完全打印的入库单 /// /// /// private void btnRef_Click(object sender, EventArgs e) { string strResult = WebApiManager.HttpWMS_Get("/api/In/GetWaitPrintOrder?StockCode=" + StaticUtil.StockCode); OperateResult or = JsonConvert.DeserializeObject(strResult); if (or.Status == ResultStatus.Success) { //JsonConvert.DeserializeObject>(results.Data.ToString()) dgvWaitPrintDg.DataSource = or.Data; } else { MessageBoxEx.Show(or.Msg); } } #endregion /// /// 单击待打印的入库单单号 /// /// /// private void dgvWaitPrintDg_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 0) { string opNo = dgvWaitPrintDg.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); string str = WebApiManager.HttpWMS_Get("/api/In/GetListInventoryDtl?opNo=" + opNo); OperateResult results = JsonConvert.DeserializeObject(str); if (results.Status == ResultStatus.Success) { tabControl1.SelectedTabIndex = 1; btnSelectOne.Enabled = false; currentPrintOrder = opNo; dgvlist.AutoGenerateColumns = false; this.dgvlist.DataSource = results.Data; SetPrintQty(); colPrintedQty.Visible = true; } } } private void cmbPrinter_SelectedIndexChanged(object sender, EventArgs e) { } } }