管道基础大数据平台系统开发-【CS】-ExportMap
13693261870
2024-09-07 8d7a67ab1d635cb954337d8a767878ae526dd3dc
ExportMap/cs/ConvertUtils.cs
@@ -29,78 +29,96 @@
        /// </summary>
        public static string GetReleaseUrl(SysMeta meta)
        {
            return "http://{host}/LFData/3d/3dtiles/" + meta.type + "/" + meta.id + "/tileset.json";
            return "{host}/LFData/3d/3dtiles/" + meta.type + "/" + meta.id + "/tileset.json";
        }
        /// <summary>
        /// 模型转换
        /// </summary>
        public static int Convert(List<int> ids)
        public static List<int> Convert(XYZArgs args)
        {
            int count = 0;
            string uploadFolder = Tool.GetSetting("uploadFolder");
            string tilesFolder = Path.Combine(Tool.GetSetting("lfData"), "3d\\3dtiles");
            string uploadFolder = Tools.GetSetting("uploadFolder");
            string tilesFolder = Path.Combine(Tools.GetSetting("lfData"), "3d\\3dtiles");
            List<SysMeta> list = XYZUtils.selectMetas(ids, "and type in ('ifc', 'fbx', 'rvt')");
            if (null == list || list.Count == 0) return 0;
            List<SysMeta> list = XYZUtils.SelectMetas(args.ids, "and type in ('ifc', 'fbx', 'rvt')");
            if (null == list || list.Count == 0) return null;
            Tools.SetIsModel(args, list);
            List<int> ids = new List<int>();
            foreach (SysMeta meta in list)
            {
                string modelFile = Path.Combine(uploadFolder, meta.path);
                if (!File.Exists(modelFile)) continue;
                string configFile = Path.Combine(Tool.TempDir, ExportUtil.DateStr + ".json");
                string configFile = Path.Combine(Tools.TempDir, ExportUtil.DateStr + ".json");
                string outPath = Path.Combine(tilesFolder, meta.type, meta.id.ToString());
                string jsonFile = Path.Combine(outPath, "tileset.json");
                if (args.isNew && Directory.Exists(outPath)) Tools.DelPath(outPath);
                if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath);
                if (File.Exists(jsonFile)) File.Delete(jsonFile);
                WriteText(configFile, string.Format(JobConfig, outPath.Replace("\\", "\\\\")));
                ExecNavisworks(modelFile, configFile);
                SysTask task = TaskDBHelper.CreateTask(args, meta, "BIM", "三维模型(BIM)");
                ExecNavisworks(task, modelFile, configFile);
                File.Delete(configFile);
                count += File.Exists(jsonFile) ? 1 : 0;
                if (File.Exists(jsonFile))
                {
                    string path = jsonFile.Replace(Tools.GetSetting("lfData") + "\\", "");
                    int pubid = InsertToDB(meta, args, path);
                string path = jsonFile.Replace(Tool.GetSetting("lfData") + "\\", "");
                InsertToDB(meta, path);
                    if (pubid > 0) ids.Add(pubid);
                }
            }
            return count;
            return ids;
        }
        /// <summary>
        /// 运行Navisworks
        /// </summary>
        public static void ExecNavisworks(string modelFile, string configFile)
        public static void ExecNavisworks(SysTask task, string modelFile, string configFile)
        {
            Process p = null;
            try
            {
                //string log = Path.Combine(ExportUtil.SourcesPath, "ns_log.txt");
                //string args = string.Format("-licensing AdLM -OpenFile \"{0}\" -ExecuteAddInPlugin \"EngineBatch_Sample.SmartEarth\" \"{1}\" -log \"{2}\" -NoGui -Exit", modelFile, configFile, log);
                //string args = string.Format("-licensing AdLM -OpenFile \"{0}\" -ExecuteAddInPlugin \"EngineBatch_Sample.SmartEarth\" \"{1}\" -log \"{2}\" -NoGui -Exit", modelFile, configFile, Path.Combine(ExportUtil.SourcesPath, "ns_log.txt"));
                string args = string.Format("-licensing AdLM -OpenFile \"{0}\" -ExecuteAddInPlugin \"EngineBatch_Sample.SmartEarth\" \"{1}\" -NoGui -Exit", modelFile, configFile);
                LogOut.Info("Args:" + args);
                // 启动进程
                p = Process.Start(RoamerExe, args);
                task.pid = p.Id;
                task.id = TaskDBHelper.Insert(task);
                // 让组件等候相关的进程进入闲置状态
                p.WaitForInputIdle();
                p.WaitForInputIdle(); // 让组件等候相关的进程进入闲置状态
                p.WaitForExit(); // 让组件无限期地等待关联进程退出
                // 让组件无限期地等待关联进程退出
                p.WaitForExit();
                task = TaskDBHelper.SelectById(task.id);
                if (null != task && task.status < 2)
                {
                    task.status = 2;
                    TaskDBHelper.Update(task);
                }
            }
            catch (Exception ex)
            {
                LogOut.Error(ex.StackTrace);
                LogOut.Error(ex.Message + "\r\n" + ex.StackTrace);
                task = TaskDBHelper.SelectById(task.id);
                if (null != task && task.status < 2)
                {
                    task.err = ex.Message;
                    task.status = 4;
                    TaskDBHelper.Update(task);
                }
            }
            finally
            {
                if (p != null)
                {
                    p.Close();
                    p.Dispose();
                    p = null;
                }
            }
@@ -118,40 +136,27 @@
        /// <summary>
        /// 插入数据库
        /// </summary>
        private static void InsertToDB(SysMeta meta, string path)
        private static int InsertToDB(SysMeta meta, XYZArgs args, string path)
        {
            if (PubDBHelper.IsPublish(meta.id)) return;
            SysPublish sys = NewPublish(meta);
            sys.path = path;
            int pubid = PubDBHelper.InsertPublish(sys);
            //if (PubDBHelper.IsPublish(meta.id)) return 1;
            int pubid = PubDBHelper.GetPushlishId(meta.id);
            if (pubid > 0)
            {
                PubDBHelper.InsertMetaPub(meta.id, pubid);
                PubDBHelper.UpdatePublish(pubid, meta.name, args.userId, null);
                return pubid;
            }
        }
        /// <summary>
        /// 创建数据发布类
        /// </summary>
        private static SysPublish NewPublish(SysMeta meta)
        {
            SysPublish sp = new SysPublish();
            sp.name = meta.name;
            sp.url = GetReleaseUrl(meta);
            sp.type = meta.type;
            sp.status = 3;
            sp.dirid = meta.dircode;
            sp.depid = meta.depcode;
            sp.min = 0;
            sp.max = 0;
            sp.json = null;
            sp.create_user = meta.create_user;
            sp.geom = null;
            sp.bak = null;
            SysPublish sys = Tools.NewPublish(meta, args, GetReleaseUrl(meta), path);
            return sp;
            pubid = PubDBHelper.InsertPublish(sys);
            if (pubid > 0)
            {
                sys.id = pubid;
                PubDBHelper.InsertLayer(sys, meta);
                PubDBHelper.InsertMetaPub(meta.id, pubid, args.userId);
            }
            return pubid;
        }
    }
}