using iWareCommon.Utils; using iWareSql.MyDbContext; using OfficeOpenXml; using OfficeOpenXml.Drawing; using System; using System.IO; using System.Threading; using WindowsFormsApplication1.Common; namespace autuPrint.printService { public class creatExcelPrintForSC { /// /// //线程锁防止并发 /// private static Mutex single = new Mutex(); /// /// 生成打印数据源 /// /// 条形码 /// 标签参数 /// 成功返回true public static bool creatEXcel(System.Drawing.Image img, ware_material_print_history label, ref string errMsg) { if (single.WaitOne())//增加线程锁防止双击并发 { try { #region 验证模板文件是否存在 if (!File.Exists(SystemConst.TEMPLATE_FILEPATH_生产订单发货标签)) { Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 模板缺失", null); errMsg = "类名: creatExcelPrint 方法名: creatEXcel 模板缺失"; return false; } //if (img == null) //{ // logtxt.txtWrite("类名: creatExcelPrint 方法名: creatEXcel 标签条形码为空", 2); // errMsg = "类名: creatExcelPrint 方法名: creatEXcel 标签条形码为空"; // return false; //} if (label == null) { Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 标签参数为空", null); errMsg = "类名: creatExcelPrint 方法名: creatEXcel 标签参数为空"; return false; } #endregion //获取模板文件 FileInfo copyFile = new FileInfo(SystemConst.TEMPLATE_FILEPATH_生产订单发货标签); copyFile.CopyTo(SystemConst.TEMPORARY_FILEPATH_生产订单发货标签, true); FileInfo existingFile = new FileInfo(SystemConst.TEMPORARY_FILEPATH_生产订单发货标签); using (ExcelPackage package = new ExcelPackage(existingFile)) { //获取模板内容 ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; //行,列 //注意:行和列都是从1开始,而不是从0开始!!! worksheet.Cells[1, 2].Value = label.Code;//物料单号 worksheet.Cells[2, 1].Value = "Descript:" + label.Name; worksheet.Cells[3, 1].Value = "BOM No.:" + (label.BOMNumber ?? "");// + "\r\n" + "BOM Description:" + (label.BOMDescription ?? ""); worksheet.Cells[4, 1].Value = "Collective Order:" + label.SubOrderNo; worksheet.Cells[5, 1].Value = "Qty:" + label.Quantity; worksheet.Cells[6, 1].Value = "Batch:" + label.BatchNo; //替换 【Editby shaocx,2024-10-11】 //worksheet.Cells[7, 1].Value = "Stage:" + label.Process + " " + "Machine:" + label.Equipment; //worksheet.Cells[8, 1].Value = "Time:" + DateTime.Now.ToString("dd.MM.yyyy") + " " + DateTime.Now.ToString("HH:mm:ss"); worksheet.Cells[7, 1].Value = "Time:" + DateTime.Now.ToString("dd.MM.yyyy") + " " + DateTime.Now.ToString("HH:mm:ss"); worksheet.Cells[8, 1].Value = "Stage:" + label.Process + " " + "Machine:" + label.Equipment; if (img != null) { ExcelPicture pic = worksheet.Drawings.AddPicture("barCode", img);//插入图片 pic.SetSize(103, 78);//设置图片尺寸 pic.SetPosition(3, 3, 2, 3);//设置图片位置,以单元格为单位(参数1,3行和列,2,4是偏移量) } package.Save();//保存 } } catch (Exception ex) { Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 生成打印文件出错 \r\n " + ex.ToString(), ex); //logtxt.txtWrite("类名: creatExcelPrint 方法名: creatEXcel 生成打印文件出错 \r\n " + ex.ToString(), 2); errMsg = ex.Message; return false; } finally { single.ReleaseMutex(); }//一轮结束 } return true; } public static string PrintFor生产订单标签(MyDbContext mod, ware_material_print_history item) { #region 单个处理标签打印 Thread.Sleep(1000); var errMsg = ""; //二维码格式 //PARTS NUMBER:18VS130A406-01,SAP: ,LOT NO: ,ORDER NO: 122100059369_1,QUANTITY: 1 string barCode = $"PARTS NUMBER:{item.Code},SAP:{item.Sap_Location ?? ""} ,LOT NO: {item.BatchNo},ORDER NO: {item.DeliveryNo},QUANTITY: {item.Quantity}";//标签条码 System.Drawing.Image img = QrCodeAndBarCode.printQr(barCode); bool saveSucceed = creatExcelPrintForSC.creatEXcel(img, item, ref errMsg); if (saveSucceed) { if (File.Exists(SystemConst.TEMPORARY_FILEPATH_生产订单发货标签)) { bool printSucceed = true; item.PrintSheetNum = item.PrintSheetNum ?? 1;//打印张数 for (int i = 0; i < item.PrintSheetNum; i++) { printSucceed = print.printExcel(SystemConst.TEMPORARY_FILEPATH_生产订单发货标签, SystemConst.Default_LeftMargin, 0.43); } if (printSucceed) { //打印成功 删除临时文件,并改状态 FileInfo myfile = new FileInfo(SystemConst.TEMPORARY_FILEPATH_生产订单发货标签);//PartStatus myfile.Delete(); item.PrintStatu = 1;//打印状态(0:未打印 1:已打印) item.PrintNum = (item.PrintNum ?? 0) + 1; int isSave = mod.SaveChanges(); if (isSave < 1) { Log4NetHelper.WriteErrorLog(LogType.Print, "类名: Form1 方法名: do_autoPrint 修改库存自动打印状态失败 ", null); } } //*/ } } else { // this.tb_Msg.Text = "失败,失败内容:" + errMsg; } return errMsg; #endregion } } }