Ejemplo n.º 1
0
        /// <summary>
        /// 扫描ProjectPathClass.UserCustomPath 目录 ,将未在数据库中的文件夹,放入数据库
        /// </summary>
        public static void DealWithDirs()
        {
            try {
                var isSyncWhenStart = ConfigurationManager.AppSettings.Get("isSyncWhenStart");
                if (isSyncWhenStart != "1")
                {
                    return;
                }
                var userCustomPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UserCustom");
                var dirs           = Directory.GetDirectories(userCustomPath, "*", SearchOption.AllDirectories);

                var tempDirs = new List <string> ();
                //文件夹 与数据库同步
                if (dirs != null)
                {
                    foreach (var d in dirs)
                    {
                        var relativePath = d.Replace(userCustomPath, "");
                        tempDirs.Add(relativePath);
                        var subDirs = relativePath.Split(new char[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries);
                        if (subDirs == null || subDirs.Length == 0)
                        {
                            continue;
                        }
                        List <string> subs = new List <string> (subDirs);
                        for (var i = 0; i < subDirs.Length; i++)
                        {
                            var p = Path.Combine(subs.ToArray());
                            if (!p.StartsWith(Path.DirectorySeparatorChar.ToString()))
                            {
                                p = Path.Combine(Path.DirectorySeparatorChar.ToString(), p);
                            }


                            //var time = DateTime.Now.ToString ("yyyyMMddHHmmss");
                            RptDb.InsertDir(new RptDirectory()
                            {
                                DirName = subs [subs.Count - 1],
                                DirPath = p,
                                //CreateTime = time,
                                //LastModifyTime = time,
                                LastModifyUser = "******"                                 //
                            });



                            subs.RemoveAt(subs.Count - 1);
                        }
                    }

                    var dbDirs = RptDb.GetAllRptDirectory();
                    if (dbDirs != null)
                    {
                        foreach (var dbDir in dbDirs)
                        {
                            if (dbDir.DirName == "$")
                            {
                                continue;
                            }
                            var dir = tempDirs.FirstOrDefault((d) => d == dbDir.DirPath);
                            if (dir == null)
                            {
                                RptDb.DeleteRptDirectory(dbDir);
                            }
                        }
                    }
                }
                // 根目录
                var rootList = RptDb.GetRptDirectoryByName("$");
                if (rootList == null || rootList.Count == 0)
                {
                    RptDb.SaveDir(new RptDirectory()
                    {
                        DirName = "$",
                        DirPath = Path.DirectorySeparatorChar.ToString(),
                        //CreateTime = time,
                        //LastModifyTime = time,
                        LastModifyUser = "******"                         //
                    });
                }

                var files   = Directory.GetFiles(userCustomPath, "*.rpt", SearchOption.AllDirectories);
                var dbfiles = RptDb.GetAllRptDesign();
                if (files != null)
                {
                    foreach (var file in files)
                    {
                        var fileName = Path.GetFileNameWithoutExtension(file);
                        if (string.IsNullOrEmpty(fileName))
                        {
                            continue;
                        }
                        var design = RptDb.GetRptDesignByName(fileName);
                        if (design == null)
                        {
                            var fileDir = Path.GetDirectoryName(file);
                            var dir     = fileDir.Replace(userCustomPath, "").Replace(Path.DirectorySeparatorChar, '$');
                            if (string.IsNullOrEmpty(dir))
                            {
                                dir = "$";
                            }
                            var rptDirs = RptDb.GetRptDirectoryByName(dir);

                            var rptDir    = rptDirs == null ? null : rptDirs.FirstOrDefault();
                            var rtpDesign = new RptDesign()
                            {
                                DirId        = rptDir == null ? string.Empty : rptDir.Id,
                                RptName      = fileName,
                                UploadPerson = "system",                                 //文件是复制过来的
                                UploadTime   = DateTime.Now.ToString("yyyyMMddHHmmss")
                            };
                            var flag = RptDb.SaveRptDesign(rtpDesign);
                            if (flag)
                            {
                                RptDb.SaveRptRuntime(new RptRuntime()
                                {
                                    RptId = rtpDesign.Id
                                });
                            }
                        }
                        else
                        {
                        }
                    }

                    var fileIds = new List <string> ();
                    if (dbfiles != null)
                    {
                        foreach (var dbfile in dbfiles)
                        {
                            var file = files.FirstOrDefault(f => Path.GetFileNameWithoutExtension(f) == dbfile.RptName);
                            if (file == null)
                            {
                                fileIds.Add(dbfile.Id);
                            }
                        }
                        if (fileIds.Count > 0)
                        {
                            RptDb.DeleteRptDesign(fileIds);
                        }
                    }
                }
                log.Info("DealWithDirs Ok..");
            } catch (IOException ex) {
                log.Error(string.Format("message:{0},StackTrace:{1}", ex.Message, ex.StackTrace));
                //return false;
            }
        }