管道基础大数据平台系统开发-【CS】-ExportMap
13693261870
2024-09-07 8d7a67ab1d635cb954337d8a767878ae526dd3dc
ExportMap/cs/SGUtils.cs
@@ -16,28 +16,6 @@
    public class SGUtils
    {
        /// <summary>
        /// Mpt目录
        /// </summary>
        public static string MptPath
        {
            get
            {
                return ConfigurationManager.AppSettings["mptFolder"];
            }
        }
        /// <summary>
        /// 3DML目录
        /// </summary>
        public static string D3mlFolder
        {
            get
            {
                return ConfigurationManager.AppSettings["3dmlFolder"];
            }
        }
        /// <summary>
        /// 廊坊数据目录
        /// </summary>
        public static string LFData
@@ -67,9 +45,11 @@
            switch (meta.type)
            {
                case "mpt":
                    return "http://{host}/SG/Imagery;" + sgsID + ".mpt"; // Elevation
                    return "{host}/SG/Imagery;" + sgsID + ".mpt"; // Elevation
                case "3dml":
                    return "http://{host}/SG/b3dm/" + sgsID + "/tileset.json";
                    return "{host}/SG/b3dm/" + sgsID + "/tileset.json";
                case "cpt":
                    return "{host}/SG/pnts/" + sgsID + "/tileset.json";
                default:
                    return string.Empty;
            }
@@ -80,54 +60,101 @@
        /// </summary>
        /// <param name="args">XYZ参数</param>
        /// <returns>行数</returns>
        public int Release(XYZArgs args, ref string err)
        public List<int> Release(XYZArgs args, ref string err)
        {
            List<SysMeta> list = XYZUtils.selectMetas(args.ids, "and type in ('mpt', '3dml')");
            if (null == list || list.Count == 0) return 0;
            List<SysMeta> list = XYZUtils.SelectMetas(args.ids, "and type in ('mpt', '3dml', 'cpt')");
            if (null == list || list.Count == 0) return null;
            int maxId = GetMaxId(); // maxId = 411576;
            //int maxId = GetMaxId(); // maxId = 411576;
            RomoveNoneFiles(list);
            if (list.Count == 0) return 0;
            if (list.Count == 0) return null;
            //err = LinkFiles(list);
            //if (!string.IsNullOrEmpty(err)) return 0;
            Tools.SetIsModel(args, list);
            MoveFiles(list);
            int count = 0;
            for (int i = 0; i < 25; i++)
            SysTask task = CreateTask(args, list);
            task.pid = 0;
            task.id = TaskDBHelper.Insert(task);
            //string names = GetNames(list);
            string sql = getSql(list);
            for (int i = 0; i < 61; i++)
            {
                Thread.Sleep(3000);
                List<SpatialItem> items = SelectItems(maxId);
                //List<SpatialItem> items = SelectItems(names);
                List<SpatialItem> items = SelectItemsBySql(sql);
                if (null == items || items.Count == 0) continue;
                InsertInto(list, items, args);
                count = items.Count;
                break;
                task = TaskDBHelper.SelectById(task.id);
                if (null != task && task.status < 2)
                {
                    task.status = 2;
                    TaskDBHelper.Update(task);
                }
                return InsertInto(list, items, args);
            }
            return count;
            task = TaskDBHelper.SelectById(task.id);
            if (null != task && task.status < 2)
            {
                task.status = 4;
                task.err = "没有数据要发布";
                TaskDBHelper.Update(task);
            }
            return null;
        }
        /// <summary>
        /// 获取最大ID值
        /// 创建任务
        /// </summary>
        public int GetMaxId()
        private SysTask CreateTask(XYZArgs args, List<SysMeta> list)
        {
            Object obj = SQLiteHelper.ExecuteScalar("select max(id) from SpatialItems");
            args.name = list[0].name;
            for (int i = 1; i < list.Count; i++)
            {
                string name =args.name+ "," + list[i].name;
                if (name.Length > 150) break;
            return null == obj ? 0 : Convert.ToInt32(obj);
                args.name = name;
            }
            switch (list[0].type)
            {
                case "3dml":
                    return TaskDBHelper.CreateTask(args, "3DML", "三维模型(3DML)");
                case "cpt":
                    return TaskDBHelper.CreateTask(args, "CPT", "点云数据(CPT)");
                default:
                    return TaskDBHelper.CreateTask(args, "MPT", "场景数据(MPT)");
            }
        }
        /// <summary>
        /// 获取查询SQL
        /// </summary>
        private string getSql(List<SysMeta> metas)
        {
            List<string> list = new List<string>();
            foreach (SysMeta meta in metas)
            {
                list.Add("Name like '%_" + meta.name + "'");
            }
            string filters = string.Join(" or ", list);
            return string.Format("select id, Name, RelativePath, LayerName, DataSourceId, Description from SpatialItems where {0} order by id desc", filters);
        }
        /// <summary>
        /// 查询SG数据项
        /// </summary>
        /// <param name="maxId">最大ID值</param>
        /// <returns>SG数据项</returns>
        public List<SpatialItem> SelectItems(int maxId)
        private List<SpatialItem> SelectItemsBySql(string sql)
        {
            string sql = string.Format("select id, Name, RelativePath, LayerName, DataSourceId, Description from SpatialItems where id > {0} order by id desc", maxId);
            DataTable dt = SQLiteHelper.GetDataTable(sql);
            List<SpatialItem> list = ModelHandler.FillModel<SpatialItem>(dt);
@@ -139,7 +166,7 @@
        /// </summary>
        private void RomoveNoneFiles(List<SysMeta> list)
        {
            string uploadFolder = Tool.GetSetting("uploadFolder");
            string uploadFolder = Tools.GetSetting("uploadFolder");
            int i = 0;
            while (i < list.Count)
@@ -170,55 +197,48 @@
        /// <summary>
        /// 插入数据发布表
        /// </summary>
        private void InsertInto(List<SysMeta> list, List<SpatialItem> items, XYZArgs args)
        private List<int> InsertInto(List<SysMeta> list, List<SpatialItem> items, XYZArgs args)
        {
            List<int> ids = new List<int>();
            foreach (SysMeta meta in list)
            {
                IEnumerable<SpatialItem> iterator = from item in items where item.Name.Equals(meta.id + "_" + meta.name) select item;
                if (null == iterator) return;
                //IEnumerable<SpatialItem> iterator = from item in items where item.Name.Equals(meta.id + "_" + meta.name) select item;
                IEnumerable<SpatialItem> iterator = from item in items where item.Name.Contains("_" + meta.name) select item;
                if (null == iterator || 0 == iterator.Count()) return ids;
                meta.verid = iterator.First().id;
                InsertToDB(meta, args);
                int pubid = InsertToDB(meta, args);
                if (pubid > 0) ids.Add(pubid);
            }
            return ids;
        }
        /// <summary>
        /// 插入数据库
        /// </summary>
        private static void InsertToDB(SysMeta meta, XYZArgs args)
        private static int InsertToDB(SysMeta meta, XYZArgs args)
        {
            if (PubDBHelper.IsPublish(meta.id)) return;
            SysPublish sys = NewPublish(meta, args);
            sys.path = meta.id + "\\" + meta.name;
            int pubid = PubDBHelper.InsertPublish(sys);
            //if (PubDBHelper.IsPublish(meta.id)) return 1;
            int pubid = PubDBHelper.GetPushlishId(meta.id);
            if (pubid > 0)
            {
                PubDBHelper.UpdatePublish(pubid, meta.name, args.userId, null, GetReleaseUrl(meta, meta.verid));
                return pubid;
            }
            SysPublish sys = Tools.NewPublish(meta, args, GetReleaseUrl(meta, meta.verid), meta.id + "\\" + meta.name);
            pubid = PubDBHelper.InsertPublish(sys);
            if (pubid > 0)
            {
                sys.id = pubid;
                PubDBHelper.InsertLayer(sys, meta);
                PubDBHelper.InsertMetaPub(meta.id, pubid, args.userId);
            }
        }
        /// <summary>
        /// 创建数据发布类
        /// </summary>
        private static SysPublish NewPublish(SysMeta meta, XYZArgs args)
        {
            SysPublish sp = new SysPublish();
            sp.name = meta.name;
            sp.url = GetReleaseUrl(meta, meta.verid);
            sp.type = meta.type;
            sp.status = 3;
            sp.dirid = meta.dircode;
            sp.depid = args.depcode;
            sp.min = 0;
            sp.max = 0;
            sp.json = null;
            sp.create_user = args.userId;
            sp.geom = null;
            sp.bak = null;
            return sp;
            return pubid;
        }
        /// <summary>
@@ -226,15 +246,20 @@
        /// </summary>
        private static void MoveFiles(List<SysMeta> metas)
        {
            string uploadFolder = Tool.GetSetting("uploadFolder");
            string uploadFolder = Tools.GetSetting("uploadFolder");
            string sgFolder = Path.Combine(uploadFolder, "SG");
            if (!Directory.Exists(sgFolder)) Directory.CreateDirectory(sgFolder);
            List<string> list = new List<string>();
            foreach (SysMeta meta in metas)
            {
                if (meta.path.IndexOf("SG\\") > -1) continue;
                string source = Path.Combine(uploadFolder, meta.path);
                File.Move(source, Path.Combine(sgFolder, meta.id + "_" + meta.name));
                string target = Path.Combine(sgFolder, meta.id + "_" + meta.name);
                if (File.Exists(target)) File.Delete(target);
                File.Move(source, target);
                if ("mpt".Equals(meta.type))
                {
@@ -244,10 +269,67 @@
                    string strmi = Path.Combine(uploadFolder, meta.path.Replace(".mpt", ".strmi"));
                    File.Move(strmi, Path.Combine(sgFolder, meta.id + "_" + meta.name.Replace(".mpt", ".strmi")));
                }
                meta.path = "SG" + "\\" + meta.id + "_" + meta.name;
                PubDBHelper.UpdateMetaPath(meta);
            }
        }
        #region 链接文件
        #region 废弃 *
        /// <summary>
        /// 查询SG数据项
        /// </summary>
        public List<SpatialItem> SelectItems(string names)
        {
            string sql = string.Format("select id, Name, RelativePath, LayerName, DataSourceId, Description from SpatialItems where Name in ({0}) order by id desc", names);
            DataTable dt = SQLiteHelper.GetDataTable(sql);
            List<SpatialItem> list = ModelHandler.FillModel<SpatialItem>(dt);
            return list;
        }
        /// <summary>
        /// 获取名称字符串
        /// </summary>
        private string GetNames(List<SysMeta> metas)
        {
            List<string> list = new List<string>();
            foreach (SysMeta meta in metas)
            {
                list.Add("'" + meta.id + "_" + meta.name + "'");
            }
            return string.Join(",", list);
        }
        #endregion
        #region * 废弃 *
        /// <summary>
        /// 获取最大ID值
        /// </summary>
        public int GetMaxId()
        {
            Object obj = SQLiteHelper.ExecuteScalar("select max(id) from SpatialItems");
            return null == obj ? 0 : Convert.ToInt32(obj);
        }
        /// <summary>
        /// 查询SG数据项
        /// </summary>
        /// <param name="maxId">最大ID值</param>
        /// <returns>SG数据项</returns>
        public List<SpatialItem> SelectItems(int maxId)
        {
            string sql = string.Format("select id, Name, RelativePath, LayerName, DataSourceId, Description from SpatialItems where id > {0} order by id desc", maxId);
            DataTable dt = SQLiteHelper.GetDataTable(sql);
            List<SpatialItem> list = ModelHandler.FillModel<SpatialItem>(dt);
            return list;
        }
        /// <summary>
        /// 链接文件
        /// </summary>
@@ -270,7 +352,7 @@
            if (0 == list.Count) return "没有需要更新发布的文件";
            return Tool.ExecCmd(list);
            return Tools.ExecCmd(list);
        }
        /// <summary>
@@ -278,8 +360,8 @@
        /// </summary>
        private void AddMptLinkFile(List<string> list, SysMeta meta)
        {
            string uploadFolder = Tool.GetSetting("uploadFolder");
            string d3mlFolder = Tool.GetSetting("3dmlFolder");
            string uploadFolder = Tools.GetSetting("uploadFolder");
            string d3mlFolder = Tools.GetSetting("3dmlFolder");
            string targetFolder = Path.Combine(d3mlFolder, meta.id.ToString());
            if (!Directory.Exists(targetFolder)) Directory.CreateDirectory(targetFolder);
@@ -295,8 +377,8 @@
        /// </summary>
        private void AddD3mlLinkFile(List<string> list, SysMeta meta)
        {
            string uploadFolder = Tool.GetSetting("uploadFolder");
            string mptFolder = Tool.GetSetting("mptFolder");
            string uploadFolder = Tools.GetSetting("uploadFolder");
            string mptFolder = Tools.GetSetting("mptFolder");
            string targetFolder = Path.Combine(mptFolder, meta.id.ToString());
            if (!Directory.Exists(targetFolder)) Directory.CreateDirectory(targetFolder);