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 creatExcelPrintForDO
|
{
|
/// <summary>
|
/// //线程锁防止并发
|
/// </summary>
|
private static Mutex single = new Mutex();
|
/// <summary>
|
/// 生成打印数据源
|
/// </summary>
|
/// <param name="img">条形码</param>
|
/// <param name="label">标签参数</param>
|
/// <returns>成功返回true</returns>
|
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_DO单发货标签))
|
{
|
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_DO单发货标签);
|
copyFile.CopyTo(SystemConst.TEMPORARY_FILEPATH_DO单发货标签, true);
|
FileInfo existingFile = new FileInfo(SystemConst.TEMPORARY_FILEPATH_DO单发货标签);
|
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 = "Vendor:" + (label.SupplierNo ?? "") + " " + (label.SupplierName ?? "");//供应商
|
//DO号改为 NO,是为了兼容 其他非do单的,如 STO出库单、退货单等 【Editby shaocx,2023-10-10】
|
//worksheet.Cells[4, 1].Value = "DO:" + label.DeliveryNo;
|
worksheet.Cells[4, 1].Value = "NO:" + label.DeliveryNo;
|
worksheet.Cells[5, 1].Value = "Qty:" + label.Quantity;
|
worksheet.Cells[6, 1].Value = "Batch:" + label.BatchNo;
|
worksheet.Cells[7, 1].Value = "Time:" + DateTime.Now.ToString("dd.MM.yyyy") + " " + DateTime.Now.ToString("HH:mm:ss");
|
|
|
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 PrintForDO订单标签(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 = creatExcelPrintForDO.creatEXcel(img, item, ref errMsg);
|
|
if (saveSucceed)
|
{
|
if (File.Exists(SystemConst.TEMPORARY_FILEPATH_DO单发货标签))
|
{
|
bool printSucceed = true;
|
|
item.PrintSheetNum = item.PrintSheetNum ?? 1;//打印张数
|
for (int i = 0; i < item.PrintSheetNum; i++)
|
{
|
printSucceed = print.printExcel(SystemConst.TEMPORARY_FILEPATH_DO单发货标签, SystemConst.Default_LeftMargin, SystemConst.Default_TopMargin);
|
}
|
|
if (printSucceed)
|
{
|
//打印成功 删除临时文件,并改状态
|
FileInfo myfile = new FileInfo(SystemConst.TEMPORARY_FILEPATH_DO单发货标签);//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
|
}
|
}
|
}
|