示例#1
0
 public static void RemovePrintHelper(string key)
 {
     if (DicPrintDocuments.ContainsKey(key))
     {
         IPrintHelperEx printHelper = null;
         printHelper = DicPrintDocuments[key];
         lock (thisLock)
         {
             DicPrintDocuments.Remove(key);
         }
         printHelper.Dispose();
     }
 }
示例#2
0
        public static IPrintHelperEx CreatePrintHelper(string printName, string printPort, string content)
        {
            IPrintHelperEx printHelper = null;
            //string strKey = printName + content;
            string strKey          = printName;
            string strTemplatePath = content.Replace("codesoft://", string.Empty);
            string path            = content.Replace("codesoft://", string.Empty);

            if (DicPrintDocuments.ContainsKey(strKey) == false)
            {
                LabelManager2.IApplication lbl = null;
                LabelManager2.IDocument    doc = null;
                try
                {
                    lbl = new LabelManager2.ApplicationClass();
                    if (doc == null)
                    {
                        if (Path.IsPathRooted(path) == false)
                        {
                            string directoryName = System.AppDomain.CurrentDomain.BaseDirectory;
                            path = Path.GetFullPath(Path.Combine(directoryName, path));
                        }
                        lbl.Documents.Open(path);
                        if (lbl == null)
                        {
                            throw new Exception(string.Format("打开模板文件({0})失败。", path));
                        }
                        doc = lbl.ActiveDocument;
                    }

                    if (doc == null)
                    {
                        throw new Exception(string.Format("打开模板文件({0})失败。", path));
                    }

                    string defaultPrinterName = doc.Printer.Name;
                    //defaultPrinterName = printName;

                    if (defaultPrinterName != printName && doc.Printer.SwitchTo(printName, printPort, false) == false)
                    {
                        LabelManager2.Strings vars = lbl.PrinterSystem().Printers(LabelManager2.enumKindOfPrinters.lppxAllPrinters);
                        string printerNames        = string.Empty;
                        for (int i = 1; i <= vars.Count; i++)
                        {
                            printerNames += vars.Item(i) + ";";
                        }
                        throw new Exception(string.Format("打印机({0})不存在。系统中存在的打印机列表 {1}。", printName, printerNames));
                    }

                    printHelper = new CodeSoftPrintHelperEx(strKey, doc, lbl);
                    printHelper.PrintTemplatePath = strTemplatePath;
                    if (doc != null)
                    {
                        lock (thisLock)
                        {
                            DicPrintDocuments.Add(strKey, printHelper);
                        }
                    }
                }
                finally
                {
                }
            }
            else
            {
                printHelper = DicPrintDocuments[strKey];
                if (printHelper.PrintTemplatePath != strTemplatePath)
                {
                    IDocument doc = printHelper.PrintApplication.Documents.Open(path);
                    printHelper.PrintDocument     = doc;
                    printHelper.PrintTemplatePath = strTemplatePath;
                    lock (thisLock)
                    {
                        DicPrintDocuments[strKey] = printHelper;
                    }
                }
            }
            return(printHelper);
        }
示例#3
0
        public ActionResult Save(NameplatePrintViewModel model)
        {
            System.DateTime    dateStartTime;
            System.DateTime    dateEndTime;
            TimeSpan           tSpan;
            string             lotNumber = "";
            MethodReturnResult result    = new MethodReturnResult();

            try
            {
                dateStartTime = System.DateTime.Now;
                dateEndTime   = System.DateTime.Now;
                //获取批值。
                lotNumber = model.LotNumber.ToUpper();
                result    = GetLot(lotNumber);
                if (result.Code > 0)
                {
                    return(Json(result));
                }
                Lot obj = (result as MethodReturnResult <Lot>).Data;
                //获取打印机名称
                ClientConfig printer = null;
                if (!string.IsNullOrEmpty(model.PrinterName))
                {
                    using (ClientConfigServiceClient client = new ClientConfigServiceClient())
                    {
                        MethodReturnResult <ClientConfig> rst = client.Get(model.PrinterName);
                        if (rst.Code > 0)
                        {
                            return(Json(rst));
                        }
                        printer = rst.Data;
                    }
                }
                //获取打印条码内容
                PrintLabel label = null;
                if (!string.IsNullOrEmpty(model.PrintLabelCode))
                {
                    using (PrintLabelServiceClient client = new PrintLabelServiceClient())
                    {
                        MethodReturnResult <PrintLabel> rst = client.Get(model.PrintLabelCode);
                        if (rst.Code > 0)
                        {
                            return(Json(rst));
                        }
                        label = rst.Data;
                    }
                }
                //获取IV测试数据及其对应的分档数据。
                IVTestData ivtest = null;
                using (IVTestDataServiceClient client = new IVTestDataServiceClient())
                {
                    PagingConfig cfg = new PagingConfig()
                    {
                        IsPaging = false,
                        Where    = string.Format(@"Key.LotNumber='{0}' AND IsDefault=1"
                                                 , model.LotNumber),
                        OrderBy = "Key.TestTime Desc"
                    };
                    MethodReturnResult <IList <IVTestData> > rst = client.Get(ref cfg);
                    if (rst.Code > 0)
                    {
                        return(Json(rst));
                    }
                    if (rst.Data.Count <= 0)
                    {
                        LogHelper.WriteLogInfo(string.Format("GetIVDataError>{0}IV测试数据不存在。", model.LotNumber));
                        rst.Message = string.Format("{0} IV测试数据不存在。", model.LotNumber);
                        rst.Code    = 1000;
                        return(Json(rst));
                    }
                    ivtest = rst.Data[0];
                }
                //获取工单分档规则
                WorkOrderPowerset wop = null;
                using (WorkOrderPowersetServiceClient client = new WorkOrderPowersetServiceClient())
                {
                    MethodReturnResult <WorkOrderPowerset> rst = client.Get(new WorkOrderPowersetKey()
                    {
                        Code         = ivtest.PowersetCode,
                        ItemNo       = ivtest.PowersetItemNo ?? -1,
                        OrderNumber  = obj.OrderNumber,
                        MaterialCode = obj.MaterialCode
                    });
                    if (rst.Code > 0)
                    {
                        return(Json(rst));
                    }
                    wop = rst.Data;
                }

                //根据物料编码获取物料数据,进一步获取产品类型。
                Material material = null;
                using (MaterialServiceClient client = new MaterialServiceClient())
                {
                    MethodReturnResult <Material> rst = client.Get(obj.MaterialCode);
                    if (rst.Code > 0)
                    {
                        return(Json(rst));
                    }
                    material = rst.Data;
                }

                //新增打印内容
                using (IVTestDataPrintLogServiceClient client = new IVTestDataPrintLogServiceClient())
                {
                    int itemNo = 1;

                    if (model.IsRepeatPrint == false)
                    {
                        MethodReturnResult <IVTestDataPrintLog> rst = client.Get(new IVTestDataPrintLogKey()
                        {
                            LotNumber     = ivtest.Key.LotNumber,
                            EquipmentCode = ivtest.Key.EquipmentCode,
                            TestTime      = ivtest.Key.TestTime,
                            ItemNo        = itemNo
                        });
                        if (rst.Code == 0 && rst.Data != null)
                        {
                            //表示重复打印过
                            result = new MethodReturnResult()
                            {
                                Code    = 1001,
                                Message = string.Format("批次({0})已打印铭牌。", ivtest.Key.LotNumber)
                            };
                            return(Json(result));
                        }
                    }

                    IVTestDataPrintLog ivdpl = new IVTestDataPrintLog()
                    {
                        CoefFF          = ivtest.CoefFF,
                        CoefIPM         = ivtest.CoefIPM,
                        CoefISC         = ivtest.CoefISC,
                        CoefPM          = ivtest.CoefPM,
                        CoefVOC         = ivtest.CoefVOC,
                        CoefVPM         = ivtest.CoefVPM,
                        CreateTime      = DateTime.Now,
                        Creator         = User.Identity.Name,
                        CTM             = ivtest.CTM,
                        LabelCode       = model.PrintLabelCode,
                        PowersetCode    = ivtest.PowersetCode,
                        PowersetItemNo  = ivtest.PowersetItemNo.Value,
                        PowersetSubCode = ivtest.PowersetSubCode,
                        PrintTime       = DateTime.Now,
                        Key             = new IVTestDataPrintLogKey()
                        {
                            LotNumber     = ivtest.Key.LotNumber,
                            EquipmentCode = ivtest.Key.EquipmentCode,
                            TestTime      = ivtest.Key.TestTime,
                            ItemNo        = itemNo
                        }
                    };
                    client.Add(ivdpl);
                }
                bool bSuccess = true;
                //打印动态内容。
                if (printer != null && label != null)
                {
                    //获取工单打印规则
                    WorkOrderPrintSet woprint = null;
                    using (WorkOrderPrintSetServiceClient client = new WorkOrderPrintSetServiceClient())
                    {
                        MethodReturnResult <WorkOrderPrintSet> rst = client.Get(new WorkOrderPrintSetKey()
                        {
                            OrderNumber  = obj.OrderNumber,
                            MaterialCode = obj.MaterialCode,
                            LabelCode    = model.PrintLabelCode
                        });
                        if (rst.Code > 0)
                        {
                            return(Json(rst));
                        }
                        woprint = rst.Data;
                    }

                    dynamic d = new ExpandoObject();
                    d.PrintQty        = woprint.Qty;
                    d.LotNumber       = lotNumber;
                    d.PM              = ivtest.CoefPM;
                    d.ISC             = ivtest.CoefISC;
                    d.VOC             = ivtest.CoefVOC;
                    d.IPM             = ivtest.CoefIPM;
                    d.VPM             = ivtest.CoefVPM;
                    d.FF              = ivtest.CoefFF;
                    d.StandardPower   = string.Format("{0:0.0}", wop.StandardPower);
                    d.StandardFuse    = wop.StandardFuse;
                    d.StandardIsc     = wop.StandardIsc;
                    d.StandardVoc     = wop.StandardVoc;
                    d.StandardVPM     = wop.StandardVPM;
                    d.StandardIPM     = wop.StandardIPM;
                    d.PowerName       = wop.PowerName;
                    d.PowerDifference = wop.PowerDifference;
                    d.ProductType     = string.Format("JNM{1}{2}-{0}"
                                                      , wop == null ? string.Empty : Convert.ToString(wop.StandardPower)
                                                      , material.Key.StartsWith("1201") ? "M" : "P"
                                                      , material.MainRawQtyPerLot);
                    d.ProductSpec = material.Spec.Replace("*", "x");

                    dateEndTime   = System.DateTime.Now;
                    tSpan         = dateEndTime - dateStartTime;
                    dateStartTime = dateEndTime;

                    LogHelper.WriteLogInfo(string.Format(@"BeforePrintLabel{3}>从{0:yyyy-MM-dd HH:mm:ss} 到 {1:yyyy-MM-dd HH:mm:ss} ,时间间隔{2}",
                                                         dateStartTime.ToString(), dateEndTime.ToString(), tSpan.TotalMilliseconds, lotNumber
                                                         )
                                           );

                    if (printer.ClientType == EnumClientType.NetworkPrinter)
                    {
                        string[] vals = printer.IPAddress.Split(':');
                        string   port = "9100";
                        if (vals.Length > 1)
                        {
                            port = vals[1];
                        }

                        IPrintHelperEx helper = PrintHelperFactoryEx.CreatePrintHelper(vals[0], port, label.Content);
                        try {
                            helper.Print(d);
                            dateEndTime = System.DateTime.Now;
                            tSpan       = dateEndTime - dateStartTime;
                            LogHelper.WriteLogInfo(string.Format(@"PrintLabel{3}>从{0:yyyy-MM-dd HH:mm:ss} 到 {1:yyyy-MM-dd HH:mm:ss} ,时间间隔{2}",
                                                                 dateStartTime.ToString(), dateEndTime.ToString(), tSpan.TotalMilliseconds, lotNumber
                                                                 ));
                        }
                        catch (Exception ex)
                        {
                            PrintHelperFactoryEx.RemovePrintHelper(helper.Key);
                            LogHelper.WriteLogError(string.Format(@"PrintLabel{0}失败", lotNumber), ex);
                            bSuccess = false;
                        }
                    }
                }
                else
                {
                    bSuccess = false;
                }

                //返回打印结果。
                StringBuilder sbMessage = new StringBuilder();
                if (bSuccess == false)
                {
                    result.Code = 1001;
                    sbMessage.AppendFormat("批次 {0} 打印操作失败。<br/>", model.LotNumber);
                }
                else
                {
                    sbMessage.AppendFormat("批次 {0} 打印操作成功。<br/>", model.LotNumber);
                }
                sbMessage.Append("<table border='1px' width='100%'><tr><td>");
                sbMessage.AppendFormat("<font size='14px' color='red'>档位:{0}</font>", wop.PowerName);
                sbMessage.Append("</td><td>");
                sbMessage.AppendFormat("<font size='14px' color='red'>子档位:{0}</font>  ", ivtest.PowersetSubCode);
                sbMessage.AppendFormat("<img src='/ZPVM/WorkOrderPowersetDetail/ShowPicture?OrderNumber={0}&MaterialCode={1}&Code={2}&ItemNo={3}&SubCode={4}&TimeStamp={5}' width='150px'/>"
                                       , obj.OrderNumber
                                       , obj.MaterialCode
                                       , ivtest.PowersetCode
                                       , ivtest.PowersetItemNo
                                       , ivtest.PowersetSubCode
                                       , DateTime.Now.Ticks);
                sbMessage.Append("</td><td>");
                sbMessage.AppendFormat("<font size='14px' color='blue'>花色:{0}</font><br/>", obj.Color);
                sbMessage.Append("</td><td>");
                sbMessage.AppendFormat("<br/><font size='14px' color='blue'>等级:{0}</font><br/>", obj.Grade);
                sbMessage.Append("</td><tr></table>");

                sbMessage.AppendFormat("<font size='10px' color='blue'>功率:{0}</font><br/>", ivtest.CoefPM);
                sbMessage.AppendFormat("<font size='10px' color='blue'>ISC:{0}</font><br/>", ivtest.CoefISC);
                sbMessage.AppendFormat("<font size='10px' color='blue'>IPM:{0}</font><br/>", ivtest.CoefIPM);
                sbMessage.AppendFormat("<font size='10px' color='blue'>VOC:{0}</font><br/>", ivtest.CoefVOC);
                sbMessage.AppendFormat("<font size='10px' color='blue'>VPM:{0}</font><br/>", ivtest.CoefVPM);
                result.Message = sbMessage.ToString();
            }
            catch (Exception ex)
            {
                LogHelper.WriteLogError(string.Format(@"PrintLabel{0}失败", lotNumber), ex);
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }