管道基础大数据平台系统开发-【CS】-ExportMap
13693261870
2023-09-07 093df84b78ebbf020fcb4f752b900925aac07565
添加月球出图的操作逻辑代码
已添加8个文件
已修改2个文件
1119 ■■■■■ 文件已修改
MoonExp/Models/ExportArgs.cs 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/Models/ResponseMsg.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/Models/SysTask.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/Models/XYZArgs.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/MoonExp.csproj 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/Tools.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/Web.config 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/cs/ExportUtil.cs 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/cs/LogOut.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/cs/PostgreHelper.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MoonExp/Models/ExportArgs.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MoonExp.Models
{
    /// <summary>
    /// å‡ºå›¾å‚æ•°
    /// </summary>
    public class ExportArgs
    {
        public ExportArgs() { }
        public String token { set; get; }
        /// <summary>
        /// æ ‡é¢˜
        /// </summary>
        public String title { set; get; }
        /// <summary>
        /// çº¸å¼ å¤§å°
        /// </summary>
        public String pageSize { set; get; }
        /// <summary>
        /// çœä»½
        /// </summary>
        public String province { set; get; }
        /// <summary>
        /// æ¯”例尺
        /// </summary>
        public String scale { set; get; }
        /// <summary>
        /// åˆ†è¾¨çŽ‡ï¼ˆå³ä¸‹è§’æ–‡æœ¬ï¼‰
        /// </summary>
        public String resolution { set; get; }
        /// <summary>
        /// åˆ¶å›¾æ—¶é—´
        /// </summary>
        public String date { set; get; }
        /// <summary>
        /// å›¾å±‚
        /// </summary>
        public String layers { set; get; }
        /// <summary>
        /// å¯¼å‡ºè·¯å¾„
        /// </summary>
        public String imgPath { set; get; }
        /// <summary>
        /// æ—‹è½¬è§’度
        /// </summary>
        public double rotation { set; get; }
        /// <summary>
        /// X最小
        /// </summary>
        public double xmin { set; get; }
        /// <summary>
        /// Y最小
        /// </summary>
        public double ymin { set; get; }
        /// <summary>
        /// Y最大
        /// </summary>
        public double ymax { set; get; }
        /// <summary>
        /// X最大
        /// </summary>
        public double xmax { set; get; }
        /// <summary>
        /// å‡ºå›¾åˆ†è¾¨çއ
        /// </summary>
        public int dpi { set; get; }
        /// <summary>
        /// æ¨¡æ¿æ–‡ä»¶
        /// </summary>
        public String qpt { set; get; }
        /// <summary>
        /// è®¾ç½®é»˜è®¤å€¼
        /// </summary>
        public void SetDefault()
        {
            if (string.IsNullOrWhiteSpace(title)) title = "管道基础大数据平台";
            if (string.IsNullOrWhiteSpace(province)) province = string.Empty;
            if (string.IsNullOrWhiteSpace(scale)) scale = string.Empty;
            if (string.IsNullOrWhiteSpace(resolution)) resolution = string.Empty;
            if (string.IsNullOrWhiteSpace(date)) date = DateTime.Now.ToString("yyyy.MM.dd");
            this.dpi = GetDpi(this.pageSize);
        }
        /// <summary>
        /// èŽ·å–DPI
        /// </summary>
        /// <param name="page">页面大小</param>
        /// <returns>DPI</returns>
        public int GetDpi(string page)
        {
            if (string.IsNullOrWhiteSpace(page)) return 300;
            switch (page.ToUpper())
            {
                case "A0":
                    return 1200;
                case "A1":
                    return 850;
                case "A2":
                    return 600;
                case "A3":
                    return 424;
                case "A4":
                    return 300;
                case "A5":
                    return 212;
                case "A6":
                    return 150;
                default:
                    return 300;
            }
        }
    }
}
MoonExp/Models/ResponseMsg.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MoonExp.Models
{
    public class ResponseMsg<T>
    {
        public ResponseMsg()
        {
            time = DateTime.Now.Ticks;
        }
        public ResponseMsg(int code)
            : this()
        {
            this.code = code;
        }
        public int code { set; get; }
        public String msg { set; get; }
        public long count { set; get; }
        public T result { set; get; }
        public long time { set; get; }
        public static ResponseMsg<T> success(String msg, T result, long count = 0)
        {
            ResponseMsg<T> rm = new ResponseMsg<T>(200);
            rm.msg = msg;
            rm.result = result;
            rm.count = count;
            return rm;
        }
        public static ResponseMsg<T> fail(String msg)
        {
            ResponseMsg<T> rm = new ResponseMsg<T>(500);
            rm.msg = msg;
            return rm;
        }
    }
}
MoonExp/Models/SysTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MoonExp.Models
{
    public class SysTask
    {
        public int id { set; get; }
        public string name { set; get; }
        /// <summary>
        /// çŠ¶æ€ï¼š0-未开始,1-进行中,2-正常结束,3-用户结束,4-运行出错
        /// </summary>
        public int status { set; get; }
        /// <summary>
        /// ç±»åˆ«ï¼šDOM,DEM,MPT,3DML,CPT,BIM,LAS,OSGB,PNG
        /// </summary>
        public string type { set; get; }
        public string descr { set; get; }
        public string err { set; get; }
        public string ip { set; get; }
        public int pid { set; get; }
        public string gids { set; get; }
        public string depcode { set; get; }
        public string dircode { set; get; }
        public int create_user { set; get; }
        public DateTime create_time { set; get; }
        public int update_user { set; get; }
        public DateTime update_time { set; get; }
    }
}
MoonExp/Models/XYZArgs.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MoonExp.Models
{
    /// <summary>
    /// XYZ参数
    /// </summary>
    public class XYZArgs
    {
        public XYZArgs()
        {
            srids = new List<int>();
            zs = new List<double>();
            ids = new List<int>();
            isNew = true;
        }
        /// <summary>
        /// ä»¤ç‰Œ
        /// </summary>
        public string token { set; get; }
        /// <summary>
        /// åç§°
        /// </summary>
        public string name { set; get; }
        /// <summary>
        /// ç”¨æˆ·ID
        /// </summary>
        public int userId { set; get; }
        /// <summary>
        /// åœ°å›¾æœ€å°çº§åˆ«
        /// </summary>
        public int min { set; get; }
        /// <summary>
        /// åœ°å›¾æœ€å¤§çº§åˆ«
        /// </summary>
        public int max { set; get; }
        /// <summary>
        /// æ— æ•°æ®
        /// </summary>
        public int noData { set; get; }
        /// <summary>
        /// æ•°æ®ç›®å½•编码
        /// </summary>
        public string dircode { set; get; }
        /// <summary>
        /// å•位目录编码
        /// </summary>
        public string depcode { set; get; }
        /// <summary>
        /// å…ƒæ•°æ®ID集合
        /// </summary>
        public List<int> ids { set; get; }
        /// <summary>
        /// å•体模型集合
        /// </summary>
        public List<int> models { set; get; }
        /// <summary>
        /// æ˜¯/否全新发布
        /// </summary>
        public bool isNew { set; get; }
        /// <summary>
        /// åæ ‡ç³»ID集合
        /// </summary>
        public List<int> srids { set; get; }
        /// <summary>
        /// é«˜åº¦åç§»é‡
        /// </summary>
        public List<double> zs { set; get; }
    }
}
MoonExp/MoonExp.csproj
@@ -38,7 +38,16 @@
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="log4net4">
      <HintPath>..\ExportMap\DLL\log4net4.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="Mono.Security">
      <HintPath>..\ExportMap\DLL\Mono.Security.dll</HintPath>
    </Reference>
    <Reference Include="Npgsql">
      <HintPath>..\ExportMap\DLL\Npgsql.dll</HintPath>
    </Reference>
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Web.DynamicData" />
    <Reference Include="System.Web.Entity" />
@@ -77,10 +86,18 @@
  </ItemGroup>
  <ItemGroup>
    <Compile Include="App_Start\WebApiConfig.cs" />
    <Compile Include="cs\ExportUtil.cs" />
    <Compile Include="cs\LogOut.cs" />
    <Compile Include="cs\PostgreHelper.cs" />
    <Compile Include="Global.asax.cs">
      <DependentUpon>Global.asax</DependentUpon>
    </Compile>
    <Compile Include="Models\ExportArgs.cs" />
    <Compile Include="Models\ResponseMsg.cs" />
    <Compile Include="Models\SysTask.cs" />
    <Compile Include="Models\XYZArgs.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Tools.cs" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="packages.config" />
@@ -88,7 +105,6 @@
  <ItemGroup>
    <Folder Include="App_Data\" />
    <Folder Include="Controllers\" />
    <Folder Include="Models\" />
  </ItemGroup>
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
MoonExp/Tools.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,131 @@
using MoonExp.cs;
using MoonExp.Models;
using Npgsql;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Web;
namespace MoonExp
{
    public class Tools
    {
        /// <summary>
        /// åŸºç¡€ç›®å½•
        /// </summary>
        public static readonly string BaseDir = AppDomain.CurrentDomain.BaseDirectory;
        private static PostgreHelper _dbHelper;
        /// <summary>
        /// DB帮助类
        /// </summary>
        public static PostgreHelper DBHelper
        {
            get
            {
                if (null == _dbHelper)
                {
                    _dbHelper = new PostgreHelper();
                }
                return _dbHelper;
            }
        }
        /// <summary>
        /// æ ¹æ®åœç‰ŒèŽ·å–ç”¨æˆ·ID
        /// </summary>
        public static int SelectUserIdByToken(string token)
        {
            string sql = "select create_user from lf.sys_token where token=@token order by create_time desc limit 1;";
            DbParameter dp1 = new NpgsqlParameter("@token", token);
            object obj = DBHelper.GetScalar(sql, dp1);
            return null == obj ? 0 : int.Parse(obj.ToString());
        }
        /// <summary>
        /// æ‰§è¡ŒCMD
        /// </summary>
        /// <param name="cmd">命令行</param>
        /// <param name="isPy">是否为QGIS Py脚本</param>
        /// <param name="isOut">是否输出错误</param>
        /// <returns>执行结果或出错信息</returns>
        public static string ExecCmd(string cmd, bool isPy = false, bool isOut = false)
        {
            List<string> list = new List<string>();
            if (isPy)
            {
                list.Add("cd \"C:\\Program Files\\QGIS 3.16\\apps\\Python37\"");
                list.Add("\"C:\\Program Files\\QGIS 3.16\\bin\\qgis_process-qgis-ltr.bat\"");
                //list.Add("\"C:\\Program Files\\QGIS 3.16\\bin\\python-qgis-ltr.bat\"");
                //list.Add("exit()");
            }
            list.Add(cmd);
            string str = ExecCmd(list, isOut);
            return str;
        }
        /// <summary>
        /// æ‰§è¡ŒCMD
        /// </summary>
        /// <param name="task">任务</param>
        /// <param name="list">命令集合</param>
        /// <param name="isOut">是否输出错误</param>
        /// <returns>执行结果或出错信息</returns>
        public static string ExecCmd(List<string> list, bool isOut = false)
        {
            string str;
            try
            {
                Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                //p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = isOut;
                p.StartInfo.RedirectStandardError = true;
                p.Start();
                StreamWriter si = p.StandardInput; // æ ‡å‡†è¾“入流
                StreamReader so = isOut ? p.StandardOutput : null; // æ ‡å‡†è¾“出流
                StreamReader se = p.StandardError; // æ ‡å‡†é”™è¯¯æµ
                LogOut.Info("cmd = " + string.Join(",", list));
                si.AutoFlush = true;
                foreach (string cmd in list)
                {
                    si.WriteLine(cmd);
                }
                si.WriteLine("exit");
                string info = null == so ? null : so.ReadToEnd();
                str = se.ReadToEnd();
                //if (!string.IsNullOrEmpty(info)) LogOut.Debug(info);
                if (!string.IsNullOrEmpty(str) && !str.Contains("@jit(cache=True, nogil=True)")) LogOut.Error(str);
                if (p.HasExited == false) p.Kill();
                if (null != so) so.Close();
                se.Close();
                si.Close();
                p.Close();
            }
            catch (Exception ex)
            {
                LogOut.Error(ex.Message + "\r\n" + ex.StackTrace);
                str = ex.Message;
            }
            return str;
        }
    }
}
MoonExp/Web.config
@@ -1,21 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=301879
  -->
<configuration>
  <appSettings>
    <!-- æœåŠ¡åœ°å€ -->
    <add key="moonServer" value="http://127.0.0.1:9000/MoonServer"/>
    <!-- ä¸‹è½½ç›®å½• -->
    <add key="downloadFolder" value="D:\Moon\download"/>
    <!-- PG连接 -->
    <add key="pgConn" value="Server=192.168.20.83;Port=5433;Database=moon;User Id=postgres;Password=Postgres!_14_moon;"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 1GB = 1073741824 -->
        <requestLimits maxAllowedContentLength="2147483647"/>
      </requestFiltering>
    </security>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <staticContent>
      <remove fileExtension=".wsv"/>
      <mimeMap fileExtension=".wsv" mimeType="application/octet-stream"/>
      <remove fileExtension=".czml"/>
      <mimeMap fileExtension=".czml" mimeType="application/json"/>
      <remove fileExtension=".glsl"/>
      <mimeMap fileExtension=".glsl" mimeType="text/plain"/>
      <remove fileExtension=".b3dm"/>
      <mimeMap fileExtension=".b3dm" mimeType="application/octet-stream"/>
      <remove fileExtension=".pnts"/>
      <mimeMap fileExtension=".pnts" mimeType="application/octet-stream"/>
      <remove fileExtension=".i3dm"/>
      <mimeMap fileExtension=".i3dm" mimeType="application/octet-stream"/>
      <remove fileExtension=".cmpt"/>
      <mimeMap fileExtension=".cmpt" mimeType="application/octet-stream"/>
      <remove fileExtension=".gltf"/>
      <mimeMap fileExtension=".gltf" mimeType="model/gltf+json"/>
      <remove fileExtension=".bgltf"/>
      <mimeMap fileExtension=".bgltf" mimeType="model/gltf-binary"/>
      <remove fileExtension=".glb"/>
      <mimeMap fileExtension=".glb" mimeType="model/gltf-binary"/>
      <remove fileExtension=".json"/>
      <mimeMap fileExtension=".json" mimeType="application/json"/>
      <remove fileExtension=".geojson"/>
      <mimeMap fileExtension=".geojson" mimeType="application/json"/>
      <remove fileExtension=".topojson"/>
      <mimeMap fileExtension=".topojson" mimeType="application/json"/>
      <remove fileExtension=".wasm"/>
      <mimeMap fileExtension=".wasm" mimeType="application/wasm"/>
      <remove fileExtension=".woff"/>
      <mimeMap fileExtension=".woff" mimeType="application/font-woff"/>
      <remove fileExtension=".woff2"/>
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2"/>
      <remove fileExtension=".kml"/>
      <mimeMap fileExtension=".kml" mimeType="application/vnd.google-earth.kml+xml"/>
      <remove fileExtension=".kmz"/>
      <mimeMap fileExtension=".kmz" mimeType="application/vnd.google-earth.kmz"/>
      <remove fileExtension=".svg"/>
      <mimeMap fileExtension=".svg" mimeType="image/svg+xml"/>
      <remove fileExtension=".terrain"/>
      <mimeMap fileExtension=".terrain" mimeType="application/vnd.quantized-mesh"/>
      <remove fileExtension=".ktx"/>
      <mimeMap fileExtension=".ktx" mimeType="image/ktx"/>
      <remove fileExtension=".crn"/>
      <mimeMap fileExtension=".crn" mimeType="image/crn"/>
      <remove fileExtension=".ktx2"/>
      <mimeMap fileExtension=".ktx2" mimeType="image/ktx2"/>
      <remove fileExtension=".eot"/>
      <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject"/>
      <remove fileExtension=".ttf"/>
      <mimeMap fileExtension=".ttf" mimeType="application/octet-stream"/>
      <remove fileExtension=".csv"/>
      <mimeMap fileExtension=".csv" mimeType="application/octet-stream"/>
      <remove fileExtension=".fly"/>
      <mimeMap fileExtension=".fly" mimeType="application/octet-stream"/>
      <remove fileExtension=".emp"/>
      <mimeMap fileExtension=".emp" mimeType="application/octet-stream"/>
      <remove fileExtension=".edp"/>
      <mimeMap fileExtension=".edp" mimeType="application/octet-stream"/>
      <remove fileExtension=".flv"/>
      <mimeMap fileExtension=".flv" mimeType="flv-application/octet-stream"/>
      <remove fileExtension=".mp4"/>
      <mimeMap fileExtension=".mp4" mimeType="video/mp4"/>
      <remove fileExtension=".wmv"/>
      <mimeMap fileExtension=".wmv" mimeType="audio/x-ms-wmv"/>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00"/>
    </staticContent>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Headers" value="*,X-Requested-With"/>
        <add name="Access-Control-Allow-Origin" value="*"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
MoonExp/cs/ExportUtil.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,248 @@
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
    {
        /// <summary>
        /// æœ€å¤§æ–‡ä»¶æ•°
        /// </summary>
        public const int MaxFileCount = 2000;
        private static string sourcesPath;
        /// <summary>
        /// èŽ·å–èµ„æºç›®å½•
        /// </summary>
        public static string SourcesPath
        {
            get
            {
                if (string.IsNullOrEmpty(sourcesPath))
                {
                    sourcesPath = Path.Combine(Tools.BaseDir, "Sources");
                }
                return sourcesPath;
            }
        }
        private static string pyFile;
        /// <summary>
        /// èŽ·å–Python文件
        /// </summary>
        public static string PyFile
        {
            get
            {
                if (string.IsNullOrWhiteSpace(pyFile))
                {
                    pyFile = Path.Combine(SourcesPath, "render.py");
                }
                return pyFile;
            }
        }
        /// <summary>
        /// èŽ·å–ä¸ŠæœŸå­—ç¬¦ä¸²
        /// </summary>
        public static string DateStr
        {
            get
            {
                return DateTime.Now.ToString("yyyyMMddHHmmss");
            }
        }
        /// <summary>
        /// èŽ·å–ä¸‹è½½ç›®å½•
        /// </summary>
        public static string DownloadFolder
        {
            get
            {
                return ConfigurationManager.AppSettings["downloadFolder"];
            }
        }
        /// <summary>
        /// åŽå°æœåŠ¡åœ°å€
        /// </summary>
        public static string MoonServer
        {
            get
            {
                return ConfigurationManager.AppSettings["moonServer"];
            }
        }
        /// <summary>
        /// èŽ·å–å‡ºå›¾å­ç›®å½•
        /// </summary>
        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();
        }
        /// <summary>
        /// ç”Ÿæˆ
        /// </summary>
        /// <param name="args">出图参数</param>
        /// <param name="err">错误信息</param>
        /// <returns>图片路径</returns>
        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;
        }
        /// <summary>
        /// è½¬æ¢ä¸ºXYZ参数
        /// </summary>
        private static XYZArgs ToXYZArgs(ExportArgs ea)
        {
            XYZArgs args = new XYZArgs();
            args.name = ea.title;
            args.ids = new List<int>();
            args.depcode = null;
            args.dircode = null;
            args.userId = Tools.SelectUserIdByToken(ea.token);
            return args;
        }
        /// <summary>
        /// åˆ›å»ºæ¨¡æ¿
        /// </summary>
        /// <param name="args">出图参数</param>
        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);
        }
        /// <summary>
        /// éªŒè¯ä»¤ç‰Œ
        /// </summary>
        /// <param name="token">令牌</param>
        /// <returns>是/否有效</returns>
        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<bool> rm = JsonConvert.DeserializeObject<ResponseMsg<bool>>(json);
                return rm != null && rm.code == 200 && rm.result;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// Get获取数据
        /// </summary>
        /// <param name="url">URL</param>
        /// <returns>数据</returns>
        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;
        }
    }
}
MoonExp/cs/LogOut.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
namespace MoonExp.cs
{
    /// <summary>
    /// æ—¥å¿—输出类
    /// </summary>
    public class LogOut
    {
        /// <summary>
        /// æ—¥å¿—
        /// </summary>
        protected static readonly log4net.ILog _log;
        /// <summary>
        /// é™æ€æž„造函数
        /// </summary>
        static LogOut()
        {
            try
            {
                _log = log4net.LogManager.GetLogger("log4net");
                //HttpContext.Current.Request.PhysicalApplicationPath
                string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Sources\\Log.config");
                log4net.Config.XmlConfigurator.Configure(new FileInfo(fileName));
            }
            catch
            {
            }
        }
        /// <summary>
        /// è°ƒè¯•
        /// </summary>
        /// <param name="message">日志</param>
        public static void Debug(string message)
        {
            try
            {
                if (_log.IsDebugEnabled)
                {
                    _log.Debug("调试:" + message + "\r\n\r\n");
                }
            }
            catch
            {
            }
        }
        /// <summary>
        /// ä¿¡æ¯
        /// </summary>
        /// <param name="message">日志</param>
        public static void Info(string message)
        {
            try
            {
                if (_log.IsInfoEnabled)
                {
                    _log.Info("信息:" + message + "\r\n\r\n");
                }
            }
            catch
            {
            }
        }
        /// <summary>
        /// è­¦å‘Š
        /// </summary>
        /// <param name="message">日志</param>
        public static void Warn(string message)
        {
            try
            {
                if (_log.IsWarnEnabled)
                {
                    _log.Warn("警告:" + message + "\r\n\r\n");
                }
            }
            catch
            {
            }
        }
        /// <summary>
        /// é”™è¯¯
        /// </summary>
        /// <param name="message">日志</param>
        public static void Error(string message)
        {
            try
            {
                if (_log.IsErrorEnabled)
                {
                    _log.Error("错误:" + message + "\r\n\r\n");
                }
            }
            catch
            {
            }
        }
        /// <summary>
        /// è‡´å‘½
        /// </summary>
        /// <param name="message">日志</param>
        public static void Fatal(string message)
        {
            try
            {
                if (_log.IsFatalEnabled)
                {
                    _log.Fatal("致命:" + message + "\r\n\r\n");
                }
            }
            catch
            {
            }
        }
    }
}
MoonExp/cs/PostgreHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using Npgsql;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
namespace MoonExp.cs
{
    /// <summary>
    /// Postgre帮助类
    /// </summary>
    public class PostgreHelper
    {
        private const string StrRegex = @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt)\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";
        private string conStr = null;
        public PostgreHelper()
        {
            this.conStr = ConfigurationManager.AppSettings["pgConn"];
        }
        /// <summary>
        /// è¿žæŽ¥å­—符串
        /// </summary>
        public String ConStr
        {
            get
            {
                return this.conStr;
            }
        }
        /// <summary>
        /// èŽ·å–DataTable
        /// </summary>
        public DataTable GetDataTable(string sql, params DbParameter[] args)
        {
            using (NpgsqlConnection con = new NpgsqlConnection(ConStr))
            {
                if (con.State != ConnectionState.Open)
                {
                    con.Open();
                }
                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, con))
                {
                    if (args != null)
                    {
                        foreach (DbParameter arg in args)
                        {
                            //arg.ParameterName = arg.ParameterName.Replace("@", ":");
                            cmd.Parameters.Add(arg);
                        }
                    }
                    using (NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(cmd))
                    {
                        DataTable dt = new DataTable();
                        adapter.Fill(dt);
                        return dt;
                    }
                }
            }
        }
        /// <summary>
        /// èŽ·å–è®°å½•æ•°
        /// </summary>
        public int GetCount(string sql, params DbParameter[] args)
        {
            using (NpgsqlConnection con = new NpgsqlConnection(ConStr))
            {
                if (con.State != ConnectionState.Open)
                {
                    con.Open();
                }
                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, con))
                {
                    if (args != null)
                    {
                        foreach (DbParameter arg in args)
                        {
                            //arg.ParameterName = arg.ParameterName.Replace("@", ":");
                            cmd.Parameters.Add(arg);
                        }
                    }
                    object obj = cmd.ExecuteScalar();
                    return obj == null ? 0 : Convert.ToInt32(obj);
                }
            }
        }
        public Object GetScalar(string sql, params DbParameter[] args)
        {
            using (NpgsqlConnection con = new NpgsqlConnection(ConStr))
            {
                if (con.State != ConnectionState.Open)
                {
                    con.Open();
                }
                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, con))
                {
                    if (args != null)
                    {
                        foreach (DbParameter arg in args)
                        {
                            cmd.Parameters.Add(arg);
                        }
                    }
                    return cmd.ExecuteScalar();
                }
            }
        }
        public int GetIntScalar(string sql, params DbParameter[] args)
        {
            using (NpgsqlConnection con = new NpgsqlConnection(ConStr))
            {
                if (con.State != ConnectionState.Open)
                {
                    con.Open();
                }
                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, con))
                {
                    if (args != null)
                    {
                        foreach (DbParameter arg in args)
                        {
                            cmd.Parameters.Add(arg);
                        }
                    }
                    object obj = cmd.ExecuteScalar();
                    return null == obj ? 0 : Convert.ToInt32(obj);
                }
            }
        }
        /// <summary>
        /// æ‰§è¡ŒSQL,返回影响行数
        /// </summary>
        public int ExecuteNonQuery(string sql, params DbParameter[] args)
        {
            using (NpgsqlConnection con = new NpgsqlConnection(ConStr))
            {
                if (con.State != ConnectionState.Open)
                {
                    con.Open();
                }
                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, con))
                {
                    if (args != null)
                    {
                        foreach (DbParameter arg in args)
                        {
                            //arg.ParameterName = arg.ParameterName.Replace("@", ":");
                            cmd.Parameters.Add(arg);
                        }
                    }
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        /// <summary>
        /// æ£€æŸ¥å­—符串
        /// </summary>
        public static bool CheckStr(string input)
        {
            return Regex.IsMatch(input, StrRegex, RegexOptions.IgnoreCase);
        }
    }
}