using MoonExp.Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; namespace MoonExp.cs { public class ExportUtil { /// /// 最大文件数 /// public const int MaxFileCount = 2000; private static string sourcesPath; /// /// 获取资源目录 /// public static string SourcesPath { get { if (string.IsNullOrEmpty(sourcesPath)) { sourcesPath = Path.Combine(Tools.BaseDir, "Sources"); } return sourcesPath; } } private static string pyFile; /// /// 获取Python文件 /// public static string PyFile { get { if (string.IsNullOrWhiteSpace(pyFile)) { pyFile = Path.Combine(SourcesPath, "render.py"); } return pyFile; } } /// /// 获取上期字符串 /// public static string DateStr { get { return DateTime.Now.ToString("yyyyMMddHHmmss"); } } /// /// 获取下载目录 /// public static string DownloadFolder { get { return ConfigurationManager.AppSettings["downloadFolder"]; } } /// /// 后台服务地址 /// public static string MoonServer { get { return ConfigurationManager.AppSettings["moonServer"]; } } /// /// 获取出图子目录 /// public static string GetExportSubFolder() { string root = DownloadFolder; if (!Directory.Exists(root)) { Directory.CreateDirectory(root); } int i = 1; while (true) { string subFolder = Path.Combine(root, i.ToString()); if (!Directory.Exists(subFolder)) { Directory.CreateDirectory(subFolder); break; } DirectoryInfo dir = new DirectoryInfo(subFolder); FileInfo[] files = dir.GetFiles(); if (files == null || files.Length < MaxFileCount) { break; } i++; } return i.ToString(); } /// /// 生成 /// /// 出图参数 /// 错误信息 /// 图片路径 public static string Generate(ExportArgs args, ref string err) { string date = DateStr; string sub = GetExportSubFolder(); string qgz = "Test.qgz"; args.imgPath = sub + "\\" + date + ".png"; args.qpt = date + ".qpt"; args.SetDefault(); CreateTemplate(args); string cmd = string.Format("python \"{0}\" -qgz {1} -qpt {2}", PyFile, qgz, args.qpt); err = Tools.ExecCmd(cmd, true, true); string qptFile = Path.Combine(SourcesPath, args.qpt); if (File.Exists(qptFile)) File.Delete(qptFile); string imgPath = Path.Combine(DownloadFolder, args.imgPath); bool flag = File.Exists(imgPath); return flag ? args.imgPath : null; } /// /// 转换为XYZ参数 /// private static XYZArgs ToXYZArgs(ExportArgs ea) { XYZArgs args = new XYZArgs(); args.name = ea.title; args.ids = new List(); args.depcode = null; args.dircode = null; args.userId = Tools.SelectUserIdByToken(ea.token); return args; } /// /// 创建模板 /// /// 出图参数 public static void CreateTemplate(ExportArgs args) { string imgPath = Path.Combine(DownloadFolder, args.imgPath); string templateFile = Path.Combine(SourcesPath, "Template.qpt"); string qptFile = Path.Combine(SourcesPath, args.qpt); LogOut.Info("imgPath = " + imgPath + ", tempFile = " + templateFile + ", qptFile = " + qptFile); string xml = File.ReadAllText(templateFile); xml = xml .Replace("{dpi}", args.dpi.ToString()) .Replace("{title}", args.title) .Replace("{sourcesPath}", SourcesPath) .Replace("{rotation}", args.rotation.ToString()) .Replace("{xmin}", args.xmin.ToString()) .Replace("{ymin}", args.ymin.ToString()) .Replace("{ymax}", args.ymax.ToString()) .Replace("{xmax}", args.xmax.ToString()) .Replace("{province}", args.province) .Replace("{scale}", args.scale) .Replace("{resolution}", args.resolution) //.Replace("{date}", args.date) .Replace("{date}", DateTime.Now.ToString("yyyy.MM.dd")) .Replace("{layers}", args.layers) .Replace("{imgPath}", imgPath); File.WriteAllText(qptFile, xml); } /// /// 验证令牌 /// /// 令牌 /// 是/否有效 public static bool VerifyToken(string token) { try { string url = MoonServer + "/sign/check?token=" + token.Trim(); string json = GetData(url); if (string.IsNullOrWhiteSpace(json)) { return false; } ResponseMsg rm = JsonConvert.DeserializeObject>(json); return rm != null && rm.code == 200 && rm.result; } catch { return false; } } /// /// Get获取数据 /// /// URL /// 数据 public static string GetData(string url) { Uri uri = new Uri(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string str = reader.ReadToEnd(); reader.Close(); return str; } } }