/// <summary> /// 将加工单保存为图片新版本 /// </summary> /// <param name="processTask"></param> /// <returns></returns> public virtual async Task SaveTaskSheetToImage2(ProcessTask processTask) { var htmlUrl = $"{HostingEnvironment.GetAppConfiguration()["base:url"]}/sheets/{processTask.TenantId}/ProcessSheet/{processTask.Part?.ProjectId ?? 0}/{processTask.ProcessSN}.html"; string upload_path = $"{Directory.GetCurrentDirectory()}\\wwwroot\\sheets\\{processTask.TenantId}\\ProcessSheet\\{processTask.Part?.ProjectId ?? 0}\\"; if (!System.IO.Directory.Exists(upload_path)) { System.IO.Directory.CreateDirectory(upload_path); } var imagename = upload_path + "\\" + processTask.ProcessSN + ".png"; //若文件已存在则不生成 //if (System.IO.File.Exists(imagename)) //{ // return; //} try { //Common.Fun.Html2Pdf(htmlUrl, filename, "Powerd By 模来模往"); Common.Fun.Html2Image(htmlUrl, imagename); }catch (Exception ex) { Logger.Error(ex.Message, ex); throw new UserFriendlyException(L("生成图片失败")); } //string exeFilePath = Directory.GetCurrentDirectory() + @"\wkhtmltopdf.exe"; ////MoveFolderTo(fileName, Application.StartupPath + @"\PDFLIB\"); ////生成ProcessStartInfo //ProcessStartInfo pinfo = new ProcessStartInfo(exeFilePath); ////设置参数 //StringBuilder sb = new StringBuilder(); //sb.Append("--footer-line "); //sb.Append("--footer-center \"powered by 模来模往(https://master.imould.me)\" "); //sb.Append("\"" +htmlUrl +"\""); //sb.Append(" \"" + filename + "\""); //pinfo.Arguments = sb.ToString(); ////隐藏窗口 //pinfo.WindowStyle = ProcessWindowStyle.Hidden; ////启动程序 //Process p = Process.Start(pinfo); //p.WaitForExit(); ////DeleteFiles(Application.StartupPath + @"\PDFLIB\"); //if (p.ExitCode == 0) //{ //} //else //{ // Logger.Error("PDF生成失败:" + sb.ToString()); // throw new UserFriendlyException(L("生成PDF文件失败")); //} }
/// <summary> /// 获取任务的加工单图片路径 /// </summary> /// <param name="taskId"></param> /// <returns></returns> public virtual async Task <string> GetTaskSheetImagePath(int taskId) { var task = await GetAll().Include(o => o.Part).ThenInclude(o => o.Project).Where(o => o.Id == taskId).SingleOrDefaultAsync(); if (task == null) { throw new UserFriendlyException(L("未找到加工任务")); } var projectId = task.Part?.Project?.Id; var host = $"{HostingEnvironment.GetAppConfiguration()["base:url"]}"; return($"/sheets/{task.TenantId}/ProcessSheet/{projectId??0}/{task.ProcessSN}.png"); }
public override void Execute(SendWeiXinMessageJobArgs args) { var processQuote = ProcessQuoteManager.GetAll() .Include(o => o.Tenant) .Where(o => o.Id == args.DataId).SingleOrDefault(); if (processQuote != null) { var config = HostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/ProcessQuoteProcessor#/msg/" + processQuote.Id; var templateId = "jd3mdo68Y2mmObCZafu5C8Tq5zFu3f9hdZg6rllGB2A";//模来模往 //var templateId = "Hm3BL2i0zPKLzfAIl0Po71cnVRVTf8rYvA_qaezHZk8";//云报工 if (!string.IsNullOrEmpty(config["TemplateId:SendProcessQuote"])) { templateId = config["TemplateId:SendProcessQuote"]; } var message = new { first = new TemplateDataItem($"收到{processQuote.Tenant.TenancyName}询价信息"), keyword1 = new TemplateDataItem(processQuote.QuoteSN), keyword2 = new TemplateDataItem(processQuote.QuoteName), keyword3 = new TemplateDataItem(processQuote.ExpireDate.ToString("yyyy-MM-dd HH:mm:ss")), remark = new TemplateDataItem("请及时处理") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public override void Execute(SendWeiXinMessageJobArgs args) { var processQuote = ProcessQuoteManager.GetAll() .Include(o => o.Tenant) .Where(o => o.Id == args.DataId).SingleOrDefault(); if (processQuote != null) { var config = HostingEnvironment.GetAppConfiguration(); var baseurl = config["base:url"]; var url = baseurl + "/MES/ProcessQuoteProcessor#/msg/" + processQuote.Id; var templateId = "nNYnBiwnwqvstTqeNfZ1JByKBNqJIPVIi4g8Wj3Bhog";//模来模往 //var templateId = "XS1LGGjeKHMsyoiKJLDz94wpgwndY4ilOY6y21aoJ_k";//云报工 if (!string.IsNullOrEmpty(config["TemplateId:SendProcessQuoteChoose"])) { templateId = config["TemplateId:SendProcessQuoteChoose"]; } var message = new { first = new TemplateDataItem($"您已成功中标{processQuote.Tenant.TenancyName}询价信息"), keyword1 = new TemplateDataItem(processQuote.QuoteSN), keyword2 = new TemplateDataItem(processQuote.QuoteName), remark = new TemplateDataItem("") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
/// <summary> /// 将加工单生成为图片 /// </summary> /// <param name="processTask"></param> public virtual async Task SaveTaskSheetToImage(ProcessTask processTask) { if (string.IsNullOrEmpty(processTask.ProcessSN)) { throw new UserFriendlyException(L("未开单任务无法生成图片")); } var projectId = processTask.Part?.Project?.Id; var targetUrl = $"{HostingEnvironment.GetAppConfiguration()["base:url"]}/Home/Show?name=../MES/SheetView&taskid={processTask.Id}"; string upload_path = $"{Directory.GetCurrentDirectory()}\\wwwroot\\sheets\\{processTask.TenantId}\\ProcessSheet\\{projectId ?? 0}\\"; if (!System.IO.Directory.Exists(upload_path)) { System.IO.Directory.CreateDirectory(upload_path); } var filename = upload_path + "\\" + processTask.ProcessSN + ".png"; //若文件已存在则不生成 if (System.IO.File.Exists(filename)) { return; } //var arg = new Html2ImageJobArgs() //{ // Url=targetUrl, // FilePath=filename, // WaitForId="app" //}; ////产生图片的后台任务 //await BackgroundJobManager.EnqueueAsync<Html2ImageJob, Html2ImageJobArgs>(arg); ChromeOptions op = new ChromeOptions(); op.BinaryLocation = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"; op.AddArguments("--headless"); //开启无gui模式 op.AddArguments("--no-sandbox"); //停用沙箱以在Linux中正常运行 ChromeDriver driver = new ChromeDriver(Environment.CurrentDirectory, op, TimeSpan.FromSeconds(180)); driver.Navigate().GoToUrl(targetUrl); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(o => o.FindElement(By.Id("app")).Displayed); //System.Threading.Thread.Sleep(3000); //截图保存 Screenshot screenshot = driver.GetScreenshot(); screenshot.SaveAsFile(filename, ScreenshotImageFormat.Png); //退出 driver.Quit(); }
public override void Execute(SendWeiXinMessageJobArgs args) { var notice = NoticeManager.GetAll() .IgnoreQueryFilters() .Include(o => o.Tenant) .Where(o => o.Id == args.DataId) .SingleOrDefault(); if (notice != null) { var baseurl = HostingEnvironment.GetAppConfiguration()["base:url"]; var url = baseurl + "/MES/TenantNoticeView?id=" + args.DataId; var templateId = "r5azOIRD5TP2heIi-6TTF29h_0TvyM4gruh4wy4YXMQ";//模来模往 //var templateId = "MPrQIbyjLaa-grTkEihsEPEWtCUvvguDk6mtmMO0hnc";//云报工 var message = new { first = new TemplateDataItem($"收到{notice.Tenant.TenancyName}公告消息"), keyword1 = new TemplateDataItem(notice.Tenant.TenancyName), keyword2 = new TemplateDataItem(notice.NoticeTitle), //keyword3 = new TemplateDataItem(processQuote.PublishDate?.ToString("yyyy-MM-dd")), remark = new TemplateDataItem("请及时查看") }; SendTemplateMessageResult sendResult; try { sendResult = WeiXin.WeiXinHelper.SendTemplateMessage(args.OpenId, templateId, url, message); } catch (Exception ex) { sendResult = new SendTemplateMessageResult() { errcode = Senparc.Weixin.ReturnCode.系统繁忙此时请开发者稍候再试, errmsg = ex.Message }; } //更新提醒记录状态 var remindLog = RemindLogManager.GetAll().IgnoreQueryFilters().Where(o => o.Id == args.RemindLogId).SingleOrDefault(); if (remindLog != null) { remindLog.Success = sendResult.ErrorCodeValue == 0; remindLog.SetPropertyValue("errCode", sendResult.errcode); remindLog.SetPropertyValue("errMsg", sendResult.errmsg); RemindLogManager.UpdateAsync(remindLog).GetAwaiter().GetResult(); } } }
public virtual async Task <string> SaveAccountingSheetToImage(string taskIds, string currentTenantId, string tenantId) { Logger.Error("\r\n\r\nScreenshotstart"); var targetUrl = $"{HostingEnvironment.GetAppConfiguration()["base:url"]}/Home/Show?name=../MES/ProcessCost_Duii&modulekey=ProcessTask&data={taskIds}"; string upload_path = $"{Directory.GetCurrentDirectory()}\\wwwroot\\sheets\\{currentTenantId}\\CountingPic\\{tenantId}\\{DateTime.Today.ToString("yyyyMMdd")}"; if (!System.IO.Directory.Exists(upload_path)) { System.IO.Directory.CreateDirectory(upload_path); } var time = System.DateTime.Now.ToString("yyyyMMddHHmmss"); var filename = upload_path + "\\" + time + ".png"; //若文件已存在则不生成 if (System.IO.File.Exists(filename)) { System.IO.File.Delete(filename); } //try //{ // Common.Fun.Html2Image(targetUrl, filename); //} //catch (Exception ex) //{ // Logger.Error(ex.Message, ex); // throw new UserFriendlyException(L("生成图片失败")); //} ChromeOptions op = new ChromeOptions(); op.BinaryLocation = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"; op.AddArguments("--headless"); //开启无gui模式 op.AddArguments("--no-sandbox"); //停用沙箱以在Linux中正常运行 ChromeDriver driver = new ChromeDriver(Environment.CurrentDirectory, op, TimeSpan.FromSeconds(180)); //targetUrl = $"http://demo.imould.me/"; Logger.Error("\r\n" + filename + "\r\n" + targetUrl); driver.Navigate().GoToUrl(targetUrl); //driver.Manage().Timeouts().ImplicitWait(10, TimeUnit.SECONDS); //识别元素时的超时时间 //driver.Manage().Timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //页面加载时的超时时间 //driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10); //异步脚本的超时时间 //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); //driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(10); //Logger.Error("\r\n" + driver.PageSource + "\r\n\r\n\r\n\r\n\r\n\r\n" ); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); //wait.Until(o => o.FindElement(By.Id("app")).Displayed); //wait.Until(o => o.FindElement(By.Name("accounting")).Displayed); //wait.Until(o => o.FindElement(By.Id("searchTable")).Displayed); System.Threading.Thread.Sleep(5000); //Logger.Error("\r\n\r\nScreenshotstep"); ////截图保存 Screenshot screenshot = driver.GetScreenshot(); screenshot.SaveAsFile(filename, ScreenshotImageFormat.Png); //var tasks = taskIds.Split(','); //var taskFilename = ""; //foreach(var taskId in tasks) //{ // taskFilename = filename.Replace(".png", taskId + ".png"); // //// targetUrl = $"{HostingEnvironment.GetAppConfiguration()["base:url"]}/Home/Show?name=../MES/ShowTask&data={taskId}"; // targetUrl = $"{HostingEnvironment.GetAppConfiguration()["base:url"]}/Home/Show?name=../MES/SheetView&taskid={taskId}"; // //try // //{ // // Common.Fun.Html2Image(targetUrl, taskFilename); // //} // //catch (Exception ex) // //{ // // Logger.Error(ex.Message, ex); // // throw new UserFriendlyException(L("生成图片失败")); // //} // driver.Navigate().GoToUrl(targetUrl); // //wait.Until(o => o.FindElement(By.Id("app")).); // System.Threading.Thread.Sleep(3000); // screenshot = driver.GetScreenshot(); // screenshot.SaveAsFile(taskFilename, ScreenshotImageFormat.Png); //} //退出 driver.Quit(); return(DateTime.Today.ToString("yyyyMMdd") + "/" + time); }