| | |
| | | using ExportMap.db; |
| | | using ExportMap.Models; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Configuration; |
| | | using System.Data; |
| | |
| | | { |
| | | 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> |
| | |
| | | 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; |
| | | } |
| | |
| | | /// </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; |
| | | //err = LinkFiles(list); |
| | | 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); |
| | | |
| | |
| | | /// </summary> |
| | | private void RomoveNoneFiles(List<SysMeta> list) |
| | | { |
| | | string uploadFolder = Tool.GetSetting("uploadFolder"); |
| | | string uploadFolder = Tools.GetSetting("uploadFolder"); |
| | | |
| | | int i = 0; |
| | | while (i < list.Count) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 插入数据发布表 |
| | | /// </summary> |
| | | 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; |
| | | 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; |
| | | int pubid = InsertToDB(meta, args); |
| | | |
| | | if (pubid > 0) ids.Add(pubid); |
| | | } |
| | | |
| | | return ids; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 插入数据库 |
| | | /// </summary> |
| | | private static int InsertToDB(SysMeta meta, XYZArgs args) |
| | | { |
| | | //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); |
| | | } |
| | | |
| | | return pubid; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 移动文件 |
| | | /// </summary> |
| | | private static void MoveFiles(List<SysMeta> metas) |
| | | { |
| | | 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); |
| | | 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)) |
| | | { |
| | | string midx = Path.Combine(uploadFolder, meta.path.Replace(".mpt", ".midx")); |
| | | File.Move(midx, Path.Combine(sgFolder, meta.id + "_" + meta.name.Replace(".mpt", ".midx"))); |
| | | |
| | | 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 废弃 * |
| | | /// <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> |
| | | private string LinkFiles(List<SysMeta> metas) |
| | |
| | | |
| | | if (0 == list.Count) return "没有需要更新发布的文件"; |
| | | |
| | | return Tool.ExecCmd(list); |
| | | return Tools.ExecCmd(list); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </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); |
| | |
| | | /// </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); |
| | |
| | | if (!File.Exists(targetMidx)) list.Add(string.Format("mklink \"{0}\" \"{1}\"", targetMidx, midx)); |
| | | if (!File.Exists(targetStrmi)) list.Add(string.Format("mklink \"{0}\" \"{1}\"", targetStrmi, strmi)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 插入数据发布表 |
| | | /// </summary> |
| | | private void InsertInto(List<SysMeta> list, List<SpatialItem> items, XYZArgs args) |
| | | { |
| | | foreach (SysMeta meta in list) |
| | | { |
| | | SpatialItem si = (from item in items where meta.name.Equals(item.Name) select item).First(); |
| | | if (null == si) continue; |
| | | |
| | | meta.verid = si.id; |
| | | InsertToDB(meta, args); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 插入数据库 |
| | | /// </summary> |
| | | private static void 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 (pubid > 0) |
| | | { |
| | | PubDBHelper.InsertMetaPub(meta.id, pubid); |
| | | } |
| | | } |
| | | |
| | | /// <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; |
| | | } |
| | | #endregion |
| | | } |
| | | } |