using System; using System.Collections.Generic; using System.Linq; using System.Web; using Estsh.Web.Util; using System.Data; using Estsh.Web.Dal; using System.Collections; using System.IO; using NPOI.HSSF.UserModel; using Com.Estsh.MES.App; using System.Text; using Aspose.Cells; using DbCommon; /*************************************************************************************************** * * 作者:王勇 * * *************************************************************************************************/ namespace Estsh.Core.Services { /// /// /// public class VendorOrderPrintService { private VendorOrderPrintDal dal = new VendorOrderPrintDal(RemotingProxyProvider._remotingProxy); private int PRE_PAGE_ITEMS = 6; public Hashtable getStockVendorOrderPrintByPage(Pager pager, String direction, string str) { Hashtable result = new Hashtable(); result = dal.getStockVendorOrderPrintByPage(pager.pageSize, pager.pageNo, str); return result; } public Hashtable getStockOrderDetailByPage(Pager pager, String direction, string str) { Hashtable result = new Hashtable(); result = dal.getStockOrderDetailByPage(pager.pageSize, pager.pageNo, str); return result; } /// /// /// /// public bool changeOrderStatus(string PoNo_Data, string PartNo_Data, string TIME, string ztxm, string evrtp) { Hashtable result = new Hashtable(); bool boolResult = dal.changeOrderStatus(ztxm); TIME = TIME.Substring(0, TIME.Length - 1); TIME = Convert.ToDateTime(TIME).ToString("yyyyMMdd"); bool selectResult = dal.selectPrintState(PoNo_Data, PartNo_Data, TIME, evrtp); if (selectResult == false) { dal.updateDspoSetStaflg(PoNo_Data, PartNo_Data, TIME, evrtp); } return boolResult; } public bool changeOrderStatus(string EBELN) { Hashtable result = new Hashtable(); bool boolResult = dal.updateDspoSetStaflg(EBELN); return boolResult; } /// /// 获取工厂 /// /// public ArrayList GetFactory() { Hashtable result = new Hashtable(); DataTable dt = dal.GetFactory(); return DataTypeConvert.NewObject.DataTableToArrayList(dt); } /// /// 获取供应商 /// /// public ArrayList GetVendor() { Hashtable result = new Hashtable(); DataTable dt = dal.GetVendor(); return DataTypeConvert.NewObject.DataTableToArrayList(dt); } public DataTable updatePrintData(string ebeln) { DataTable dt = new DataTable(); dt = this.dal.updatePrintData(ebeln); return dt; } /// /// 订单确认 /// /// public bool dingDanQueRen(string ebeln) { Hashtable result = new Hashtable(); bool bool_1 = dal.dingDanQueRen(ebeln); return bool_1; } /// /// 发运确认 /// /// public bool shipQueRen(string ebeln) { Hashtable result = new Hashtable(); bool bool_1 = dal.shipQueRen(ebeln); return bool_1; } public Hashtable exportBarcodeInfo(string excelTemplate, string folder, string weekNo) { Hashtable result = new Hashtable(); //判断条码是否生成 //if (!dal.IsBuildCode(weekNo)) //{ // result.Add("message", weekNo + ":该订单的条码未生成,请先生成条码!"); // result.Add("flag", "error"); // return result; //} DataTable dt = dal.GetCartonNo(weekNo); //if (dt == null || dt.Rows.Count < 1) //{ // result.Add("message", "没有需要导出的条码数据,请确认!"); // result.Add("flag", "error"); // return result; //} ////判断条码是否已导出 //if (dal.GetDspoYN(weekNo)) //{ // //未导出,第一次打导出标志 // dal.UpdateData(weekNo); //} string saveFolder = folder; //if (!Directory.Exists(saveFolder)) //{ // Directory.CreateDirectory(saveFolder); //} string str = Export(excelTemplate, saveFolder, weekNo); if (!(string.IsNullOrEmpty(str))) { String zipFile = folder + weekNo + "-" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".zip"; result.Add("fileName", str); result.Add("message", "导出数据成功!"); result.Add("flag", "OK"); return result; } else { result.Add("message", "导出数据异常,请重试!"); result.Add("flag", "error"); return result; } } public string Export(string excelTemplate, string saveFolder, String weekNo) { DataTable dt = dal.GetCartonNo(weekNo); string str = ""; try { //创建数据集,用来存放选中的数据 DataTable dtRePrintSome = new DataTable("dtData"); dtRePrintSome.Columns.Add("customer", Type.GetType("System.String")); //客户名称 dtRePrintSome.Columns.Add("VendorName", Type.GetType("System.String")); //供应商名称 dtRePrintSome.Columns.Add("ZTXM", Type.GetType("System.String")); //箱条码 dtRePrintSome.Columns.Add("MATNR", Type.GetType("System.String")); //零件号 dtRePrintSome.Columns.Add("MAKTX", Type.GetType("System.String")); //零件描述 dtRePrintSome.Columns.Add("ZDEV_NUM", Type.GetType("System.String")); //数量 dtRePrintSome.Columns.Add("ModelName", Type.GetType("System.String")); //项目名称 dtRePrintSome.Columns.Add("ProdDate", Type.GetType("System.String")); //生产日期 dtRePrintSome.Columns.Add("LotNo", Type.GetType("System.String")); //送货批次 dtRePrintSome.Columns.Add("SEQ", Type.GetType("System.String")); //标签序号 dtRePrintSome.Columns.Add("subEBELN", Type.GetType("System.String")); //订单号 string factoryName = dal.GetFactoryName();//获取客户名称 //初始化获取第一个单号 string _orderNo = dt.Rows[0]["order_no"].ToString(); string _vendorNname = dt.Rows[0]["vendor_name"].ToString(); string _vendor_code = dt.Rows[0]["vendor_code"].ToString(); int _CodeCount = 0; int j = 0; for (int i = 0; i < dt.Rows.Count; i++) { if (i == 0) { _CodeCount = dal.GetWmsCodeCount(_orderNo, dt.Rows[i]["part_no"].ToString(), dt.Rows[i]["evrtp"].ToString()); j = 0; } else { if (_orderNo != dt.Rows[i]["order_no"].ToString() || dt.Rows[i]["part_no"].ToString() != dt.Rows[i - 1]["part_no"].ToString() || dt.Rows[i]["evrtp"].ToString() != dt.Rows[i - 1]["evrtp"].ToString()) { _CodeCount = dal.GetWmsCodeCount(dt.Rows[i]["order_no"].ToString(), dt.Rows[i]["part_no"].ToString(), dt.Rows[i]["evrtp"].ToString()); j = 0; } } if (_orderNo == dt.Rows[i]["order_no"].ToString()) //判断是否与上条数据为同一单号 { string orderNo = _orderNo + "_" + dt.Rows[j]["version"].ToString(); j++; string seq = j.ToString() + "/" + _CodeCount.ToString(); //将选中的数据存放到数据集中 dtRePrintSome.Rows.Add(new Object[] { factoryName, dt.Rows[i]["vendor_name"].ToString(), dt.Rows[i]["carton_no"].ToString(), dt.Rows[i]["part_no"].ToString(), dt.Rows[i]["part_spec"].ToString(), Convert.ToDecimal(dt.Rows[i]["zdev_num"].ToString()).ToString ("0.###"), dt.Rows[i]["option3"].ToString(),string.Empty,dt.Rows[i]["zdate"].ToString().Replace("-",""), seq, orderNo}); } else //新的单号,导出前table,重新赋值 { //导出前table string fileName = saveFolder + _orderNo + "-" + _vendor_code + "-" + _vendorNname + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx"; ExportSave(dtRePrintSome, fileName, dtRePrintSome.Rows.Count, _orderNo, excelTemplate); //重新初始化 _orderNo = dt.Rows[i]["order_no"].ToString(); _vendorNname = dt.Rows[i]["vendor_name"].ToString(); _vendor_code = dt.Rows[i]["vendor_code"].ToString(); _CodeCount = dal.GetWmsCodeCount(dt.Rows[i]["order_no"].ToString(), dt.Rows[i]["part_no"].ToString(), dt.Rows[i]["evrtp"].ToString()); j = 1; //删除所有行 dtRePrintSome.Rows.Clear(); string orderNo = _orderNo + "_" + dt.Rows[j]["version"].ToString(); string seq = j.ToString() + "/" + _CodeCount.ToString(); //将选中的数据存放到数据集中 dtRePrintSome.Rows.Add(new Object[] { factoryName, dt.Rows[i]["vendor_name"].ToString(), dt.Rows[i]["carton_no"].ToString(), dt.Rows[i]["part_no"].ToString(), dt.Rows[i]["part_spec"].ToString(), Convert.ToDecimal(dt.Rows[i]["zdev_num"].ToString()).ToString ("0.###"), dt.Rows[i]["option3"].ToString(),string.Empty,dt.Rows[i]["zdate"].ToString().Replace("-",""), seq, orderNo}); } //判断是否为最后一条数据 if (i == dt.Rows.Count - 1) { //导出当前table string strName = _orderNo + "-" + _vendor_code + "-" + _vendorNname + "-" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx"; string fileName = saveFolder + strName; ExportSave(dtRePrintSome, fileName, dtRePrintSome.Rows.Count, _orderNo, excelTemplate); str = strName; } } return str; } catch (System.Exception ex) { //return false; return ""; } } public void ExportSave(DataTable table, string FileName, int jCount, string orderNo, string excelTemplate) { int sheetIndex = 0; int cellIndex = 0; WorkbookDesigner designer = new WorkbookDesigner(); designer.Open(excelTemplate); //获取汇总明细 //DataSet ds = dal.GetExpInfo(orderNo); //DataTable dtHead = ds.Tables[2]; //designer.SetDataSource("recymd", ds.Tables[0].Rows[0]["recymd"] is DBNull ? "" : ds.Tables[0].Rows[0]["recymd"].ToString()); //designer.SetDataSource("vendorCode", ds.Tables[0].Rows[0]["lifnr"] is DBNull ? "" : ds.Tables[0].Rows[0]["lifnr"].ToString()); //designer.SetDataSource("vendorSale", ds.Tables[0].Rows[0]["vendor_sale"] is DBNull ? "" : ds.Tables[0].Rows[0]["vendor_sale"].ToString()); //designer.SetDataSource("vendorTel", ds.Tables[0].Rows[0]["vendor_tel"] is DBNull ? "" : ds.Tables[0].Rows[0]["vendor_tel"].ToString()); //designer.SetDataSource("vendorFax", ds.Tables[0].Rows[0]["vendor_fax"] is DBNull ? "" : ds.Tables[0].Rows[0]["vendor_fax"].ToString()); //designer.SetDataSource("warehouseDesc", ds.Tables[0].Rows[0]["lgort"] is DBNull ? "" : ds.Tables[0].Rows[0]["lgort"].ToString()); //designer.SetDataSource("emp_name", ds.Tables[0].Rows[0]["emp_name"] is DBNull ? "" : ds.Tables[0].Rows[0]["emp_name"].ToString()); ////填写订单号 //designer.Workbook.Worksheets[0].Cells[4, 10].PutValue(orderNo); //int BeginRow = 24; ////填写时间 //DataTable dtDate = dal.GetStartDate(orderNo); //for (int i = 0; i < dtDate.Rows.Count; i++) //{ // dtHead.Columns.Add(new DataColumn(dtDate.Rows[i]["InDate"].ToString(), typeof(string))); // designer.Workbook.Worksheets[0].Cells[23, 2 + i].PutValue(dtDate.Rows[i]["InDate"].ToString()); //} ////插入行 //if (dtHead.Rows.Count > 1) //{ // designer.Workbook.Worksheets[0].Cells.InsertRows(BeginRow, dtHead.Rows.Count - 1); //} ////填写零件号 //for (int i = 0; i < dtHead.Rows.Count; i++) //{ // designer.Workbook.Worksheets[0].Cells[i + BeginRow, 0].PutValue(dtHead.Rows[i]["matnr"].ToString()); // designer.Workbook.Worksheets[0].Cells[i + BeginRow, 1].PutValue(dtHead.Rows[i]["part_spec"].ToString()); //} ////填写数量 //DataTable dtDetail = ds.Tables[1]; //for (int i = 0; i < dtDetail.Rows.Count; i++) //{ // for (int q = 0; q < dtHead.Rows.Count; q++) // { // if (dtDetail.Rows[i]["PartNo"].ToString() == dtHead.Rows[q]["matnr"].ToString()) // { // for (int j = 0; j < dtHead.Columns.Count; j++) // { // if (dtDetail.Rows[i]["InDate"].ToString() == dtHead.Columns[j].ColumnName.ToString()) // { // decimal dQty = Convert.ToDecimal(dtDetail.Rows[i]["Qty"].ToString()); // int sQty = Convert.ToInt32(dQty); // designer.Workbook.Worksheets[0].Cells[BeginRow + q, j].PutValue(sQty.ToString()); // } // } // } // } //} //designer.Process(0, true); //sheet2写入条码明细 DataTable dtCode = dal.GetCodeDetail(orderNo); for (int i = 0; i < dtCode.Rows.Count; i++) { designer.Workbook.Worksheets[0].Cells[i + 1, 0].PutValue(dtCode.Rows[i]["factory_name"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 1].PutValue(dtCode.Rows[i]["vendor_name"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 2].PutValue(dtCode.Rows[i]["ZTXM"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 3].PutValue(dtCode.Rows[i]["MATNR"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 4].PutValue(dtCode.Rows[i]["part_spec"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 5].PutValue(dtCode.Rows[i]["ZDEV_NUM"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 6].PutValue(dtCode.Rows[i]["option3"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 7].PutValue(dtCode.Rows[i]["ZDATE"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 8].PutValue(dtCode.Rows[i]["seq"].ToString()); designer.Workbook.Worksheets[0].Cells[i + 1, 9].PutValue(dtCode.Rows[i]["order_no"].ToString()); } designer.Process(0, true); //写入箱条码 for (int rowIndex = 0; rowIndex < jCount; rowIndex++) { cellIndex = (rowIndex % PRE_PAGE_ITEMS) + 1; sheetIndex = (rowIndex / PRE_PAGE_ITEMS) + 1; if (0 == rowIndex % PRE_PAGE_ITEMS) { designer.Workbook.Worksheets.AddCopy(sheetIndex); } designer.SetDataSource("barcode" + cellIndex, "*" + table.Rows[rowIndex]["ZTXM"].ToString() + "*"); designer.SetDataSource("supplier" + cellIndex, table.Rows[rowIndex]["VendorName"].ToString()); designer.SetDataSource("customer" + cellIndex, table.Rows[rowIndex]["customer"].ToString()); designer.SetDataSource("partNo" + cellIndex, table.Rows[rowIndex]["MATNR"].ToString()); designer.SetDataSource("partSpec" + cellIndex, table.Rows[rowIndex]["MAKTX"].ToString()); designer.SetDataSource("qty" + cellIndex, table.Rows[rowIndex]["ZDEV_NUM"].ToString()); designer.SetDataSource("lotNo" + cellIndex, table.Rows[rowIndex]["LotNo"].ToString()); designer.SetDataSource("model" + cellIndex, table.Rows[rowIndex]["ModelName"].ToString()); designer.SetDataSource("serialNo" + cellIndex, table.Rows[rowIndex]["SEQ"].ToString()); designer.SetDataSource("prodDate" + cellIndex, "" + table.Rows[rowIndex]["ProdDate"].ToString() + ""); designer.SetDataSource("poNo" + cellIndex, table.Rows[rowIndex]["subEBELN"].ToString()); designer.Process(sheetIndex, true); designer.ClearDataSource(); } designer.Save(FileName, FileFormatType.Excel2007Xlsx); } } }