Пример #1
0
        /// <summary>
        ///
        /// </summary>
        private void GetInfo()
        {
            try
            {
                //根据源ID,获取对应数据信息
                string sql_TL_SYS_AUTO_PRINT_TASK           = @"SELECT TOP {0} [ID],[FID],[SHEET_FID],[PULL_MODEL],[PART_BOX_CODE],[PRINT_CONFIG_CODE],[PRINT_FILEPATH],[STATUS],[PRINT_TIME],[VALID_FLAG],
[SOURCE_ID],[CREATE_DATE],[CREATE_USER],[MODIFY_DATE],[MODIFY_USER] FROM [dbo].[TL_SYS_AUTO_PRINT_TASK]  WHERE [STATUS]=10 AND [SOURCE_ID]={1} ORDER BY [ID] ASC";
                List <AutoPrintTaskInfo> autoprinttaskinfos = new AutoPrintTaskBLL().GetList(String.Format(sql_TL_SYS_AUTO_PRINT_TASK, topSize, sourceId));
                if (autoprinttaskinfos.Count < 1)
                {
                    return;
                }
                ///获取基本配置信息
                string sql_TM_AUTO_PRINTER_CONFIG           = @"SELECT [ID] ,[FID],[VALID_FLAG],[CREATE_USER],[CREATE_DATE],[MODIFY_USER],[MODIFY_DATE]
      ,[COMMENTS],[PULL_MODEL],[PART_BOX_CODE],[PRINT_CONFIG_CODE],[PRINTER_NAME] ,[PRINTER_IPADDRESS],[IS_AUTO_PRINTER],[PAPER_SIZE],[PRINT_DIRECTION]
  FROM [dbo].[TM_AUTO_PRINTER_CONFIG]";
                List <PrinterConfigInfo> printerconfiginfos = new PrinterConfigBLL().GetList(sql_TM_AUTO_PRINTER_CONFIG);
                if (printerconfiginfos.Count < 1)
                {
                    return;
                }
                ///加载打印机配置信息
                string sql_TS_SYS_PRINT_CONFIG          = @"SELECT [ID],[FID],[PRINT_CONFIG_CODE],[PRINT_CONFIG_NAME],[PRINT_TEMPLATE_FILENAME],[PRINT_TEMPLATE_URL],[TEMPLATE_FILE_TYPE]
      ,[PRINT_COPIES],[PRINTER_NAME],[LAST_UPLOADFILE_TIME],[STATUS],[COMMENTS],[VALID_FLAG],[CREATE_USER],[CREATE_DATE],[MODIFY_USER],[MODIFY_DATE] FROM [dbo].[TS_SYS_PRINT_CONFIG]";
                List <PrintConfigInfo> printconfiginfos = new PrintConfigBLL().GetList(sql_TS_SYS_PRINT_CONFIG);

                ///循环匹配打印机设置
                foreach (var item in autoprinttaskinfos)
                {
                    string pullModel   = item.PullModel.GetValueOrDefault().ToString();
                    string partBoxCode = item.PartBoxCode;
                    if (string.IsNullOrEmpty(pullModel) || string.IsNullOrEmpty(partBoxCode))
                    {
                        continue;
                    }
                    //开始匹配,如果不为NULL,则表示匹配成功
                    var selectlist = printerconfiginfos.FirstOrDefault(a => a.PullModel == int.Parse(pullModel) && a.PartBoxCode == partBoxCode);
                    if (selectlist == null)
                    {
                        continue;
                    }
                    string printConfigCode = item["PRINT_CONFIG_CODE"].ToString();
                    //通过匹配到的PRINT_CONFIG_CODE 在printconfiginfos集合中匹配,如果匹配成功,则获取打印信息;
                    var listPathRout = printconfiginfos.FirstOrDefault(a => a.PrintConfigCode == printConfigCode && a.Status == 20);
                    if (listPathRout == null)
                    {
                        continue;
                    }
                    //Thread.Sleep(100);
                    string printTemplateFilename = listPathRout.PrintTemplateFilename; //获取模板名称
                    string printTemplateUrl      = listPathRout.PrintTemplateUrl;      //获取路径

                    ///根据打印配置代码①从打印配置TS_SYS_PRINT_CONFIG中获取对应的配置信息,如未能获取有效数据则提示<打印配置信息错误>,并记录系统日志
                    PrintConfigInfo info = new PrintConfigBLL().GetInfoByCode(printConfigCode);
                    if (info == null)
                    {
                        throw new Exception("MC:0x00000731");///打印配置信息错误
                    }
                    ///根据打印配置中的打印模板路径④及打印模板文件名称③获取服务端中的两个文件
                    ///一个为打印模板文件名称③,另一个为同名的xml字段匹配配置文件
                    string templateFileType = "html";
                    switch (info.TemplateFileType.GetValueOrDefault())
                    {
                    case (int)TemplateFileTypeConstants.xlsx: templateFileType = "xlsx"; break;

                    case (int)TemplateFileTypeConstants.xls: templateFileType = "xls"; break;

                    default: templateFileType = "html"; break;
                    }
                    ///根据打印文件路径名称在服务端获取相应的文件,如未能成功获取则提示<打印文件错误>,并记录系统日志TL_SYS_OPERATION_LOG
                    if (!info.PrintTemplateUrl.StartsWith("/"))
                    {
                        info.PrintTemplateUrl = "/" + info.PrintTemplateUrl;
                    }
                    string templateFileName = HttpContext.Current.Server.MapPath(info.PrintTemplateUrl) + "/" + info.PrintTemplateFilename + "." + templateFileType;
                    if (!File.Exists(templateFileName))
                    {
                        throw new Exception("MC:0x00000061");///打印模板文件不存在
                    }
                    string configFileName = HttpContext.Current.Server.MapPath(info.PrintTemplateUrl) + "/" + info.PrintTemplateFilename + ".xml";
                    if (!File.Exists(configFileName))
                    {
                        throw new Exception("MC:0x00000067");///打印配置文件不存在
                    }
                    ///
                    string tempPrintFilePathConfig = "/TEMP/PRINTFILES";
                    ///
                    string tempPrintFilePath = HttpContext.Current.Server.MapPath(tempPrintFilePathConfig);
                    ///文件夹是否存在
                    if (!Directory.Exists(tempPrintFilePath))
                    {
                        Directory.CreateDirectory(tempPrintFilePath);
                    }

                    List <string> listfiles = new PrintBLL().CreatePrintFiles(templateFileName, configFileName, templateFileType, GetPrintDataInfos("A", item["SHEET_FID"].ToString()), tempPrintFilePath, tempPrintFilePathConfig);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #2
0
        public void Handler()
        {
            while (status != 10)
            {
                #region 获取第一条数据
                string idswhere = string.Empty;
                //数据库执行语句
                StringBuilder sqlText = new StringBuilder();
                //集合大于0,排除
                if (dealedIds.Count > 0)
                {
                    idswhere = "and [ID] not in (" + string.Join(",", dealedIds.ToArray()) + ")";
                }
                AutoPrintTaskInfo autoPrintTaskInfo = new AutoPrintTaskBLL().GetTopInfo(idswhere);
                if (autoPrintTaskInfo == null)
                {
                    throw new Exception("0x00000001");///TODO:没有未打印的任务
                }
                dealedIds.Add(autoPrintTaskInfo.Id);
                #endregion

                #region 打印
                PrintConfigInfo printConfigInfo = new PrintConfigBLL().GetInfoByCode(autoPrintTaskInfo.PrintConfigCode);
                if (printConfigInfo == null)
                {
                    throw new Exception("0x00000002");///TODO:没有配置信息
                }
                System.Diagnostics.Process p = new System.Diagnostics.Process();
                //不现实调用程序窗口,但是对于某些应用无效
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.WindowStyle    = System.Diagnostics.ProcessWindowStyle.Hidden;
                //采用操作系统自动识别的模式
                p.StartInfo.UseShellExecute = true;
                //要打印的文件路径
                p.StartInfo.FileName = printConfigInfo.PrintTemplateUrl;
                //指定执行的动作,是打印,即print,打开是 open
                p.StartInfo.Verb = "print";
                //将指定的打印机设为默认打印机
                SetDefaultPrinter(printConfigInfo.PrinterName);
                //打印数量
                for (int i = 0; i < printConfigInfo.PrintCopies; i++)
                {
                    //开始打印
                    p.Start();
                }
                ////等待十秒
                //p.WaitForExit(10000);
                #endregion

                //ü   记录打印时间到最后修改时间⑦,同时标记状态③为20.已打印
                sqlText.AppendFormat(@" update TL_SYS_AUTO_PRINT_TASK set [STATUS] = 20,[MODIFY_TIME]=getdate(),[MODIFY_USER]='{0}' where [ID]={1}", loginUser, autoPrintTaskInfo.Id);
                #region 执行
                using (TransactionScope trans = new TransactionScope())
                {
                    if (!BLL.LES.CommonBLL.ExecuteNonQueryBySql(sqlText.ToString()))
                    {
                        throw new Exception("0x00000003");///TODO:写入数据库失败
                    }
                    trans.Complete();
                }
                #endregion
            }
        }