using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Stone.Common; using Stone.Entity; using Stone.WinModule.JISData; using Stone.WinBiz.Standard; using Gm_WMS.DataAccess.DataService; using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser; namespace Stone.WinModule.Standard { public partial class frmJISVDA : Stone.WinModule.BasicData.frmBaseMain { public frmJISVDA() { InitializeComponent(); this.tlbSelect.Visible = false; this.tlbAdd.Visible = false; this.tlbAddCopy.Visible = false; this.tlbEdit.Visible = false; this.tlbDelete.Visible = false; this.tlbInput.Visible = false; this.tlbFilter.Visible = false; this.dgrdView.MultiSelect = true; } public override void Search(string code) { string d1 = MyDateTime.Format(this.dateTimePicker1.Value, MyDateTimeType.Date); string d2 = MyDateTime.Format(this.dateTimePicker2.Value, MyDateTimeType.Date); if (code == "") { strWhere = "1=1"; } else { strWhere = " [PartNumber] like '%" + code + "%' or "; strWhere += " [Description] like '%" + code + "%' or "; strWhere += " [releaseId] like '%" + code + "%' or "; strWhere += " [location] like '%" + code + "%' or "; strWhere += " [locationCode] like '%" + code + "%' or "; strWhere += " [filename] like '%" + code + "%' "; } strWhere = "[IsStandard]=1 and [startDate]>='" + d1 + "' and [startDate]<='" + d2 + "' and (" + strWhere + ")"; if (cbIsDiff.Checked) { strWhere += " and quantity > quantity_print "; } } private void frmJISLog_Load(object sender, EventArgs e) { timer1.Enabled = true; timer2.Interval = 60 * 1000; //1分钟刷新一次 timer2.Enabled = true; ToolStripButton btnPrint = new ToolStripButton("号码预分配"); btnPrint.Image = this.imageList1.Images[0]; btnPrint.TextImageRelation = TextImageRelation.ImageAboveText; btnPrint.Click += new EventHandler(btnPrint_Click); this.toolStrip1.Items.Insert(0, btnPrint); ToolStripButton btnAddVDAPrint = new ToolStripButton("增加VDA"); btnAddVDAPrint.Image = this.imageList1.Images[0]; btnAddVDAPrint.TextImageRelation = TextImageRelation.ImageAboveText; btnAddVDAPrint.Click += new EventHandler(btnAddVDAPrint_Click); this.toolStrip1.Items.Insert(1, btnAddVDAPrint); ToolStripButton btnImportPDFVDA = new ToolStripButton("VDA导入-已校验"); btnImportPDFVDA.Image = this.imageList1.Images[1]; btnImportPDFVDA.TextImageRelation = TextImageRelation.ImageAboveText; btnImportPDFVDA.Click += new EventHandler(btnImportVDA_Click); this.toolStrip1.Items.Insert(1, btnImportPDFVDA); ToolStripButton btnImportPDFVDA2 = new ToolStripButton("VDA导入-未校验"); btnImportPDFVDA2.Image = this.imageList1.Images[1]; btnImportPDFVDA2.TextImageRelation = TextImageRelation.ImageAboveText; btnImportPDFVDA2.Click += new EventHandler(btnImportVDA2_Click); this.toolStrip1.Items.Insert(1, btnImportPDFVDA2); } private void timer1_Tick(object sender, EventArgs e) { this.timer1.Enabled = false; try { DataSet dsData = m_Base.entityView.GetDataDistinct("partNumber", "(" + strWhere + ") and [IsStandard]=1 and [description] is null", "partNumber"); if (dsData.Tables[0].Rows.Count > 0) { frmTodNowProduct frm = new frmTodNowProduct(); frm.dgrdView.DataSource = dsData.Tables[0]; Stone.Common.MyGridViewStyle.SetDataGridRowNumber(frm.dgrdView); Stone.Common.MyGridViewStyle.SetDataGridMenuCommon(frm.dgrdView); frm.ShowDialog(); frm.Dispose(); } } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } } #region old bak 2022-03-16 private void btnAddVDAPrint_Click(object sender, EventArgs e) { LastAutoCheck = this.chkAuto.Checked; this.chkAuto.Checked = false; this.chkAuto.Update(); try { if (this.dgrdView.SelectedRows.Count == 0) { throw new Exception("请选择要打印的记录"); } if (this.dgrdView.SelectedRows[0].Cells["PackNumer"].Value == DBNull.Value) { throw new Exception( "零件号:" + this.dgrdView.SelectedRows[0].Cells["PartNumber"].Value + "没有基础资料,请先添加基础资料" ); } if (this.dgrdView.SelectedRows[0].Cells["IsStandard"].Value.ToString() != "1") { throw new Exception( "零件号:" + this.dgrdView.SelectedRows[0].Cells["PartNumber"].Value + "不是Standard零件号,不能打印" ); } string id = this.dgrdView.SelectedRows[0].Cells["ID"].Value.ToString(); Entity_v_JIS_Lab_List v_JIS_Lab = new Entity_v_JIS_Lab_List(); DataTable dtData = v_JIS_Lab.GetData($"[ID]={id}").Tables[0]; if (dtData.Rows.Count == 0) throw new Exception("选择的记录不存在,请刷新数据"); string PartNumber = dtData.Rows[0]["PartNumber"].ToString(); int quantity = Convert.ToInt32(dtData.Rows[0]["quantity"]); //本次需求货数量 int quantity_transit = Convert.ToInt32(dtData.Rows[0]["quantity_transit"]); //在途数量 if(quantity_transit > 0 ) { if (quantity_transit > quantity) { if (!MyMessageBox.ShowQuestion($"零件号 {PartNumber} 在途数量 {quantity_transit} 大于本次需求数量 {quantity} ,是否要继续?")) { return; } } else if (quantity_transit < quantity) { if (MyMessageBox.ShowQuestion($"零件号 {PartNumber} 在途数量 {quantity_transit},是否将本次需求数量由 {quantity} 改为 {quantity - quantity_transit}?")) { quantity = quantity - quantity_transit; } } } frmVDAPrint frm = new frmVDAPrint(); frm.f_JIS_VDA = (F_JIS_VDA)m_Base; frm.LocatioCode = dtData.Rows[0]["LocationCode"].ToString(); frm.txtreleaseId.Text = dtData.Rows[0]["releaseId"].ToString(); frm.txtDescription.Text = dtData.Rows[0]["Description"].ToString(); frm.txtLocation.Text = dtData.Rows[0]["location"].ToString(); frm.txtPartNumber.Text = dtData.Rows[0]["PartNumber"].ToString(); frm.txtPackNumer.Text = dtData.Rows[0]["PackNumer"].ToString(); frm.txtQty.Text = Convert.ToString(Convert.ToDecimal(quantity) / Convert.ToDecimal(dtData.Rows[0]["PackNumer"])); frm.txtDate.Value = Convert.ToDateTime(dtData.Rows[0]["StartDate"]); frm.txtStandardNo.Text = dtData.Rows[0]["OrderNumber"].ToString(); frm.ShowDialog(); frm.Dispose(); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } finally { this.chkAuto.Checked = LastAutoCheck; } } #endregion private bool LastAutoCheck = true; private void btnPrint_Click(object sender, EventArgs e) { LastAutoCheck = this.chkAuto.Checked; this.chkAuto.Checked = false; this.chkAuto.Update(); try { int count = this.dgrdView.SelectedRows.Count; if (count == 0) throw new Exception("请选择要打印的记录,可按Shift或Ctrl多选"); string ids = ""; for (int i = 0; i < this.dgrdView.SelectedRows.Count; i++) { ids += this.dgrdView.SelectedRows[i].Cells["ID"].Value.ToString() + ","; } if (ids.Length > 0) ids = ids.Substring(0, ids.Length - 1); Entity_v_JIS_Lab_List v_JIS_Lab = new Entity_v_JIS_Lab_List(); DataTable dtData = v_JIS_Lab.GetData("*, quantity as quantity_new", $"[ID] in({ids})", "[PartNumber] asc").Tables[0]; if (dtData.Rows.Count == 0) throw new Exception("记录不存在"); string msg1 = ""; string msg2 = ""; foreach (DataRow drData in dtData.Rows) { if (drData["PackNumer"] == DBNull.Value) { throw new Exception( "零件号:" + drData["PartNumber"].ToString() + "没有基础资料,请先添加基础资料" ); } if (drData["IsStandard"].ToString() != "1") { throw new Exception( "零件号:" + drData["PartNumber"].ToString() + "不是STD零件号,不能打印" ); } string PartNumber = drData["PartNumber"].ToString(); int quantity = Convert.ToInt32(drData["quantity"]); //本次需求货数量 int quantity_transit = Convert.ToInt32(drData["quantity_transit"]); //在途数量 if (quantity_transit > 0) { if (quantity_transit > quantity) { msg1 += $"零件号 {PartNumber} 在途数量 {quantity_transit} 大于本次需求数量 {quantity}\r\n"; } else if (quantity_transit < quantity) { msg2 += $"零件号 {PartNumber} 在途数量 {quantity_transit},是否将本次需求数量由 {quantity} 改为 {quantity - quantity_transit}\r\n"; drData["quantity_new"] = quantity - quantity_transit; } } } if (msg1 != "") { if (!MyMessageBox.ShowQuestionPop("以下询问是否继续?\r\n" + msg1)) { return; } } bool quantity_new = false; //是否采用新的数量来计算 if (msg2 != "") { var dr = ShowQuestionPopDr("以下询问是否继续?\r\n" + msg2); if(dr == DialogResult.Cancel) return; if (dr==DialogResult.OK) { quantity_new = true; } else { quantity_new = false; } } CreateVDA(dtData, quantity_new); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } finally { this.chkAuto.Checked = LastAutoCheck; } } //号码预分配 private void CreateVDA(DataTable dtData, bool quantity_new) { LocalDBService db = null; try { db = new LocalDBService(); db.BeginTrans(); Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(db); Entity_t_Product t_Product = new Entity_t_Product(); Entity_t_Location t_Location = new Entity_t_Location(); string fileType = ((F_JIS_VDA)m_Base).fileType; string PackageNos = ""; string LabelDate = MyDateTime.GetServerDateTime().ToString("yyyy-MM-dd HH:mm"); string Date = MyDateTime.GetServerDateTime().ToString("yyyy-MM-dd"); string AsnNumbers = ""; // var strsql = ""; // var dtPartOutQty = new DataTable(); // strsql = "select * from t_PartOutQty"; // dtPartOutQty = db.Exec_DataSet(strsql).Tables[0]; foreach (DataRow drData in dtData.Rows) { string Location = drData["Location"].ToString(); if (Location == "") throw new Exception("卸货点不能为空"); #region 取ASN号 DataTable dtASN = t_JIS_VDA.GetData( $"top 1 *", $"[fileType]='{fileType}' and [Location]='{Location}' and [IsUpload]=0", $"[ID] desc").Tables[0]; string AsnNumber = ""; if (dtASN.Rows.Count > 0) { AsnNumber = dtASN.Rows[0]["AsnNumber"].ToString(); } else { AsnNumber = F_JIS_VDA_ASN.GetVDA_AsnNumber(db, fileType, 3); } if (AsnNumber.Substring(0, 3) != "ADT") { throw new Exception("ASN编号 必需以[ADT]开头"); } if (AsnNumber.Length != 13) { throw new Exception("ASN编号 必需13长"); } #endregion int PageQty = 0; //整箱数量 int Odd = 0; //零头数量 if (!quantity_new) //是否计算在途 { PageQty = Convert.ToInt32(Math.Floor(Convert.ToDecimal(drData["quantity"]) / Convert.ToDecimal(drData["PackNumer"]))); Odd = Convert.ToInt32(drData["quantity"]) - Convert.ToInt32(PageQty * Convert.ToInt32(drData["PackNumer"])); //计算零头 } else { PageQty = Convert.ToInt32(Math.Floor(Convert.ToDecimal(drData["quantity_new"]) / Convert.ToDecimal(drData["PackNumer"]))); Odd = Convert.ToInt32(drData["quantity_new"]) - Convert.ToInt32(PageQty * Convert.ToInt32(drData["PackNumer"])); //计算零头 } for (int i = 1; i <= PageQty; i++) { DataRow drVDA = t_JIS_VDA.Table.NewRow(); drVDA["fileType"] = fileType; drVDA["LabelDate"] = LabelDate; drVDA["Date"] = Date; drVDA["PackageNo"] = F_JIS_VDA_ASN.GetVDA_PackNumber(db, "ADT9", 10); drVDA["AsnNumber"] = AsnNumber; drVDA["PartNumber"] = drData["PartNumber"].ToString(); drVDA["Qty"] = drData["PackNumer"].ToString(); drVDA["location"] = drData["Location"].ToString(); drVDA["OrderNumber"] = drData["OrderNumber"].ToString(); drVDA["LocationCode"] = drData["LocationCode"].ToString(); drVDA["releaseId"] = drData["releaseId"].ToString(); t_JIS_VDA.Add(drVDA); //增加已发货数量 // var code = drData["PartNumber"].ToString(); // var outQty = decimal.Parse(drData["PackNumer"].ToString()); // strsql = CreatePartOutSql(code, outQty, dtPartOutQty,out dtPartOutQty); // if (!string.IsNullOrEmpty(strsql)) // { // db.Exec_NonQuery(strsql); // } PackageNos += drVDA["PackageNo"].ToString() + ","; } if(Odd > 0) { DataRow drVDA = t_JIS_VDA.Table.NewRow(); drVDA["fileType"] = fileType; drVDA["LabelDate"] = LabelDate; drVDA["Date"] = Date; drVDA["PackageNo"] = F_JIS_VDA_ASN.GetVDA_PackNumber(db, "ADT9", 10); drVDA["AsnNumber"] = AsnNumber; drVDA["PartNumber"] = drData["PartNumber"].ToString(); drVDA["Qty"] = Odd; drVDA["location"] = drData["Location"].ToString(); drVDA["OrderNumber"] = drData["OrderNumber"].ToString(); drVDA["LocationCode"] = drData["LocationCode"].ToString(); drVDA["releaseId"] = drData["releaseId"].ToString(); t_JIS_VDA.Add(drVDA); //增加已发货数量 // var code = drData["PartNumber"].ToString(); // var outQty = Odd; // strsql = CreatePartOutSql(code, outQty, dtPartOutQty, out dtPartOutQty); // if (!string.IsNullOrEmpty(strsql)) // { // db.Exec_NonQuery(strsql); // } PackageNos += drVDA["PackageNo"].ToString() + ","; } } //MyMessageBox.ShowInfoMessage($"ASN编号:{AsnNumber}\r\n装箱单号:{PackageNos} 生成完成!"); MyMessageBox.ShowInfoMessage($"装箱单号:{PackageNos} 生成完成!"); db.Commit(); } catch (Exception ex) { if (db != null) db.Rollback(); throw ex; } finally { if (db != null) db.EndTrans(); } } private static string CreatePartOutSql(string PartCode,decimal outQty,DataTable dt, out DataTable dtPartOutQty) { dtPartOutQty = dt; string strsql = ""; if (dtPartOutQty.Select(" Code = '" + PartCode + "'").Length > 0) { strsql = "Update t_PartOutQty" + " set PartOutQty += " + outQty + "" + " where Code = '" + PartCode + "'"; } else { strsql = "Insert into t_PartOutQty(Code,PartOutQty) values ('" + PartCode + "'," + outQty + ")"; var db = new LocalDBService(); db.Exec_NonQuery(strsql); //DT重新赋值 strsql = "select * from t_PartOutQty"; dtPartOutQty = db.Exec_DataSet(strsql).Tables[0]; strsql = ""; } return strsql; } private void timer2_Tick(object sender, EventArgs e) { this.timer2.Enabled = false; try { if (chkAuto.Checked) { UpdateGridView(); } } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } finally { this.timer2.Enabled = true; } } // public virtual void UpdateGridView() // { // // string code = this.txtCode.Text.Trim(); // Search(code); // // m_Base.BindPageData(strWhere); // m_Base.GetView(this.dgrdView); // tlbAllCount.Text = "记录数:" + m_Base.dsMain.Tables["Data"].Rows.Count; // } private void chkAuto_CheckedChanged(object sender, EventArgs e) { } private void btnImportVDA_Click(object sender, EventArgs e) { LastAutoCheck = this.chkAuto.Checked; this.chkAuto.Checked = false; this.chkAuto.Update(); try { LocalDBService db = null; db = new LocalDBService(); db.BeginTrans(); OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "PDF文件(*.PDF)|*.PDF|所有文件|*.*"; dialog.ValidateNames = true; dialog.CheckPathExists = true; dialog.CheckFileExists = true; var dr = dialog.ShowDialog(); if (dr != DialogResult.OK) return; string strFileName = dialog.FileName; PdfReader pdfReader = new PdfReader(strFileName); int numberOfPages = pdfReader.NumberOfPages; //读取PDF文件 生成ASN信息 和VDA信息 Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(db); string fileType = ((F_JIS_VDA)m_Base).fileType; string LabelDate = MyDateTime.GetServerDateTime().ToString("yyyy-MM-dd HH:mm"); string Date = MyDateTime.GetServerDateTime().ToString("yyyy-MM-dd"); var packageNo = ""; var asnNum = ""; var partNumber = ""; var qty = ""; var location = ""; var orderNumber = ""; var locationCode = ""; for (int i = 1; i <= numberOfPages; ++i) { //获取PDF文件的文本内容 var strPage = PdfTextExtractor.GetTextFromPage(pdfReader, i); var lstStr = strPage.Split(new[] { "\n" }, StringSplitOptions.None).ToList(); if ((i & 1) == 1) { packageNo = lstStr[32].Split(new[] {"\n", " "}, StringSplitOptions.None)[0]; asnNum = lstStr[10].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; partNumber = lstStr[16].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; qty = lstStr[23].Split(new[] { "\n", " " }, StringSplitOptions.None)[0].Split('.')[0]; var lstLoc = lstStr[27].Split(new[] {"\n", " "}, StringSplitOptions.None); if (lstLoc.Length < 2) { throw new Exception("PDF文件中Location解析失败!"); } //todo location 的取值需要确定 location = lstStr[4].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; //todo orderNumber 的取值需要确定 orderNumber = ""; //todo locationCode 的取值需要确定 locationCode = lstStr[4].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; // .Replace("SNP工厂", string.Empty); DataRow drVDA = t_JIS_VDA.Table.NewRow(); drVDA["fileType"] = fileType; drVDA["LabelDate"] = LabelDate; drVDA["Date"] = Date; drVDA["PackageNo"] = packageNo; drVDA["AsnNumber"] = asnNum; drVDA["PartNumber"] = partNumber; drVDA["Qty"] = qty; drVDA["location"] = location; drVDA["OrderNumber"] = orderNumber; drVDA["LocationCode"] = locationCode; drVDA["releaseId"] = ""; drVDA["IsPrintLabel"] = 1; drVDA["IsPackingVerification"] = 1; drVDA["IsShipingVerification"] = 1; drVDA["IsPrintASN"] = 1; drVDA["IsUpload"] = 1; drVDA["UploadTime"] = DateTime.Now; drVDA["PrintASNTime"] = DateTime.Now; t_JIS_VDA.Add(drVDA); } } pdfReader.Close(); MyMessageBox.ShowInfoMessage($"VDA导入完成!"); db.Commit(); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } finally { this.chkAuto.Checked = LastAutoCheck; } } private void btnImportVDA2_Click(object sender, EventArgs e) { LastAutoCheck = this.chkAuto.Checked; this.chkAuto.Checked = false; this.chkAuto.Update(); try { LocalDBService db = null; db = new LocalDBService(); db.BeginTrans(); OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "PDF文件(*.PDF)|*.PDF|所有文件|*.*"; dialog.ValidateNames = true; dialog.CheckPathExists = true; dialog.CheckFileExists = true; var dr = dialog.ShowDialog(); if (dr != DialogResult.OK) return; string strFileName = dialog.FileName; PdfReader pdfReader = new PdfReader(strFileName); int numberOfPages = pdfReader.NumberOfPages; //读取PDF文件 生成ASN信息 和VDA信息 Entity_t_JIS_VDA t_JIS_VDA = new Entity_t_JIS_VDA(db); string fileType = ((F_JIS_VDA)m_Base).fileType; string LabelDate = MyDateTime.GetServerDateTime().ToString("yyyy-MM-dd HH:mm"); string Date = MyDateTime.GetServerDateTime().ToString("yyyy-MM-dd"); var packageNo = ""; var asnNum = ""; var partNumber = ""; var qty = ""; var location = ""; var orderNumber = ""; var locationCode = ""; for (int i = 1; i <= numberOfPages; ++i) { //获取PDF文件的文本内容 var strPage = PdfTextExtractor.GetTextFromPage(pdfReader, i); var lstStr = strPage.Split(new[] { "\n" }, StringSplitOptions.None).ToList(); if ((i & 1) == 1) { packageNo = lstStr[32].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; asnNum = lstStr[10].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; partNumber = lstStr[16].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; qty = lstStr[23].Split(new[] { "\n", " " }, StringSplitOptions.None)[0].Split('.')[0]; var lstLoc = lstStr[27].Split(new[] { "\n", " " }, StringSplitOptions.None); if (lstLoc.Length < 2) { throw new Exception("PDF文件中Location解析失败!"); } //todo location 的取值需要确定 location = lstStr[4].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; //todo orderNumber 的取值需要确定 orderNumber = ""; //todo locationCode 的取值需要确定 locationCode = lstStr[4].Split(new[] { "\n", " " }, StringSplitOptions.None)[0]; // .Replace("SNP工厂", string.Empty); DataRow drVDA = t_JIS_VDA.Table.NewRow(); drVDA["fileType"] = fileType; drVDA["LabelDate"] = LabelDate; drVDA["Date"] = Date; drVDA["PackageNo"] = packageNo; drVDA["AsnNumber"] = asnNum; drVDA["PartNumber"] = partNumber; drVDA["Qty"] = qty; drVDA["location"] = location; drVDA["OrderNumber"] = orderNumber; drVDA["LocationCode"] = locationCode; drVDA["releaseId"] = ""; drVDA["IsPrintLabel"] = 1; // drVDA["IsPackingVerification"] = 1; // drVDA["IsShipingVerification"] = 1; drVDA["IsPrintASN"] = 1; // drVDA["IsUpload"] = 1; // drVDA["UploadTime"] = DateTime.Now; // drVDA["PrintASNTime"] = DateTime.Now; t_JIS_VDA.Add(drVDA); } } pdfReader.Close(); MyMessageBox.ShowInfoMessage($"VDA导入完成!"); db.Commit(); } catch (Exception ex) { MyMessageBox.ShowErrorMessage(ex.Message); } finally { this.chkAuto.Checked = LastAutoCheck; } } /// /// 修改t_PartOutQty表的数量 /// /// 零件号 /// 数量 //public void UpdatePartOutQty(string code, int qty) //{ // Entity_t_PartOutQty partOutQty = new Entity_t_PartOutQty(); // partOutQty.GetData()[] // partOutQty.Edit(part, qty); //} struct PartOutQty { string partcode; int qty; } public static DialogResult ShowQuestionPopDr(string MessageInfo) { var dr = new DialogResult(); frmMessageQuestion frm = new frmMessageQuestion(1); frm.ShowQuestion(MessageInfo); dr = frm.DialogResult; return dr; } } }