using Admin.NET.Core; using iWareCommon; using iWareCommon.Utils; using iWareSql.MyDbContext; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading; namespace iWareCC { /// /// 打印处理的线程 /// public class PrintHandler { public static void Handler() { var errMsg = ""; while (true) { try { SystemWarningMsg.lbl_Alert_ReceivingPoOrderHandler = "循环开始..."; if (SystemValue.isAllowRuning_PrintHandler && SystemValue.isStartedModel) { errMsg = "";//重置 try { Do(ref errMsg); if (!string.IsNullOrEmpty(errMsg)) { SystemWarningMsg.lbl_Alert_ReceivingPoOrderHandler = errMsg; } } catch (Exception ex) { Log4NetHelper.WriteErrorLog(LogType.PrintHandler, "打印处理的线程=>" + errMsg + ",异常:" + ex.Message, ex); SystemWarningMsg.lbl_Alert_ReceivingPoOrderHandler = "打印处理的线程=>" + errMsg + ",异常:" + ex.Message; } } } catch (Exception ex) { SystemWarningMsg.lbl_Alert_ReceivingPoOrderHandler = "出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.PrintHandler, "PrintHandler 出现异常:" + ex.Message, ex); } Thread.Sleep(2 * 1000);//休眠2秒 } } /// /// 打印 /// /// /// /// /// private static void Do(ref string errMsg) { using (MyDbContext mycontext = new MyDbContext()) { var query_PrintStatuEnum = (int)PrintStatuEnum.未打印; var list = mycontext.wms_record_sncode_print.Where(x => (x.IsDelete == false) && x.PrintStatus == query_PrintStatuEnum) .OrderBy(x => x.Id).ToList(); wms_config_print printConfig = null; string _PrinterName = ""; if (list.Count > 0) { } else { errMsg = $"没有可打印的内容!"; return; } foreach (var item in list) { PrintClassifyEnum printClassifyEnum = default(PrintClassifyEnum); var isRight = GetPrintClassifyEnum(item, mycontext, ref errMsg, ref printClassifyEnum); if (!isRight) { return; } printConfig = mycontext.wms_config_print.Where(x => x.PrintClassify == (int)printClassifyEnum).FirstOrDefault(); if (printConfig == null) { errMsg = $"没有找到{printClassifyEnum.ToString()}的打印配置!"; return; } //设置打印机,注意:这里只获取第一个,以后可能要改! _PrinterName = printConfig.PrinterList.Split(',')[0]; //根据配置名字查询 打印机名字 var printConfigData = mycontext.SysDictData.Where(x => x.Name == _PrinterName).FirstOrDefault(); if (printConfigData == null) { errMsg = $"没有找到{_PrinterName.ToString()}的打印机名字!"; return; } _PrinterName = printConfigData.Value; Dictionary data = new Dictionary(); if (printClassifyEnum == PrintClassifyEnum.看板卡) { data.Add("cardNo", item.KanBanCardNo ?? ""); data.Add("ToAreaName", item.ToAreaName ?? ""); data.Add("bar", item.KanBanCardNo); data.Add("material", item.MaterialCode ?? "" + "/" + item.MaterialName ?? ""); data.Add("supplier", item.SupplierName ?? ""); data.Add("unit", item.MaterialUnit ?? ""); data.Add("qty", item.Quantity); data.Add("date", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } else { data.Add("bar", item.SNCode); data.Add("material", item.MaterialCode ?? "" + "/" + item.MaterialName ?? ""); data.Add("supplier", item.SupplierName ?? ""); data.Add("unit", item.MaterialUnit ?? ""); data.Add("qty", item.Quantity); data.Add("date", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } //调用打印接口 bool isSuccess = false; using (PrintBaseService.PrintWcfServiceClient client = new PrintBaseService.PrintWcfServiceClient()) { //isSuccess = client.Print3(data, 1, @"D:\打印程序\跟踪码打印模板\跟踪码打印模板_一维码.btw", "ZDesigner ZD888-203dpi ZPL", out errMsg); //isSuccess = client.Print3(data, 1, @"D:\打印程序\跟踪码打印模板\跟踪码打印模板_二维码.btw", "ZDesigner ZD888-203dpi ZPL", out errMsg); isSuccess = client.Print3(data, item.PrintSheetNum, printConfig.PrintTemplateAddr, _PrinterName, out errMsg); } if (isSuccess) { item.PrintStatus = 1;//打印状态(0:未打印 1:已打印) item.PrintNum = (item.PrintNum) + 1; mycontext.SaveChanges(); } else { errMsg = $"打印错误,跟踪码{item.SNCode},打印机名称{_PrinterName},错误信息:(打印服务返回)" + errMsg; Log4NetHelper.WriteErrorLog(LogType.PrintHandler, errMsg, null); return; } Thread.Sleep(2000); } } } private static bool GetPrintClassifyEnum(wms_record_sncode_print item, MyDbContext mycontext, ref string errMsg, ref PrintClassifyEnum printClassifyEnum) { if (item.PrintType == (int)PrintTypeEnum.看板卡) { printClassifyEnum = PrintClassifyEnum.看板卡; } else { wms_config_sncode_rule rule = null; var ruleList = mycontext.wms_config_sncode_rule.Where(x => (x.RuleName == "ASN一维码" || x.RuleName == "ASN二维码") && x.IsDisabled == false).ToList(); if (ruleList != null && ruleList.Count > 1) { errMsg = "条码生成规则配置中,ASN一维码和ASN二维码只能启用其中一个!"; return false; } if (ruleList == null || ruleList.Count == 0) { errMsg = "条码生成规则配置中,ASN一维码和ASN二维码两个都没有配置启用!"; return false; } rule = ruleList.First(); printClassifyEnum = default(PrintClassifyEnum); if (rule.RuleName == "ASN一维码") { printClassifyEnum = PrintClassifyEnum.一维跟踪码; } else { printClassifyEnum = PrintClassifyEnum.二维跟踪码; } } return true; } } }