管道基础大数据平台系统开发-【CS】-ExportMap
OK
13693261870
2024-09-27 566e0d21293a5fe6423fd7a16541bce00eeb2e38
DataLoader/CS/Importor.cs
@@ -6,17 +6,21 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
namespace DataLoader.CS
{
    public class Importor
    {
        #region 加载
        public static void Loading(ObservableCollection<ViewData> viewDatas)
        {
            Importor.GetFiles(viewDatas, CommonProp.SourcePath);
        }
        /// <summary>
        /// 获取文件
        /// </summary>
        public static void GetFiles(ObservableCollection<ViewData> viewDatas, string path)
        private static void GetFiles(ObservableCollection<ViewData> viewDatas, string path)
        {
            GetSubFiles(viewDatas, path);
@@ -92,13 +96,15 @@
        /// </summary>
        private static void SetSysMeta(ViewData vd)
        {
            long sizes = GetFileSizes(vd);
            SysMeta meta = new SysMeta();
            meta.eventid = Guid.NewGuid().ToString();
            meta.metaid = 0;
            meta.verid = 0;
            meta.guid = null;
            meta.path = vd.FilePath; // *
            meta.sizes = GetFileSizes(vd);
            meta.sizes = Tools.SizeToMb(sizes);
            meta.tab = null;
            meta.rows = 0;
            meta.create_user = CommonProp.UserId;
@@ -110,35 +116,45 @@
            meta.dircode = CommonProp.Dircode;
            meta.ismeta = 0;
            meta.sensortype = CommonProp.SensorType;
            meta.mata_type = CommonProp.MetaType;
            meta.acq_time = CommonProp.AcqTime;
            vd.Meta = meta;
            vd.Sizes = meta.sizes;
            vd.Sizes = Tools.FormatBytes(sizes);
        }
        /// <summary>
        /// 获取文件大小
        /// </summary>
        private static double GetFileSizes(ViewData vd)
        private static long GetFileSizes(ViewData vd)
        {
            if (File.Exists(vd.FilePath))
            {
                if (vd.Ext == StaticData.SHP)
                switch (vd.Ext)
                {
                    List<string> files = GetShpFiles(vd.FilePath);
                    return GetFileSizes(files.ToArray());
                }
                else
                {
                    FileInfo fi = new FileInfo(vd.FilePath);
                    return Tools.SizeToMb(fi.Length);
                    case StaticData.MPT:
                        return GetFileSizes(GetExtFiles(vd, StaticData.MPT_EXT));
                    case StaticData.JPG:
                        return GetFileSizes(GetExtFiles(vd, StaticData.JPG_EXT));
                    case StaticData.JP2:
                        return GetFileSizes(GetExtFiles(vd, StaticData.JP2_EXT));
                    case StaticData.IMG:
                        return GetFileSizes(GetExtFiles(vd, StaticData.IMG_EXT));
                    case StaticData.TIF:
                        return GetFileSizes(GetExtFiles(vd, StaticData.TIF_EXT));
                    case StaticData.TIFF:
                        return GetFileSizes(GetExtFiles(vd, StaticData.TIFF_EXT));
                    case StaticData.SHP:
                        return GetFileSizes(GetExtFiles(vd, StaticData.SHP_EXT));
                    default:
                        FileInfo fi = new FileInfo(vd.FilePath);
                        return fi.Length;
                }
            }
            if (Directory.Exists(vd.FilePath))
            {
                string[] files = Directory.GetFiles(vd.FilePath, "*", SearchOption.AllDirectories);
                return GetFileSizes(files);
            }
@@ -148,15 +164,15 @@
        /// <summary>
        /// 获取文件大小
        /// </summary>
        private static double GetFileSizes(string[] files)
        private static long GetFileSizes(string[] files)
        {
            if (null == files || files.Length == 0) return 0;
            double sizes = 0;
            long sizes = 0;
            foreach (string file in files)
            {
                FileInfo fi = new FileInfo(file);
                sizes += Tools.SizeToMb(fi.Length);
                sizes += fi.Length;
            }
            return sizes;
@@ -165,21 +181,21 @@
        /// <summary>
        /// 获取SHP文件集合
        /// </summary>
        private static List<string> GetShpFiles(string shpPath)
        private static string[] GetExtFiles(ViewData vd, List<string> exts)
        {
            List<string> files = new List<string>();
            files.Add(shpPath);
            files.Add(vd.FilePath);
            foreach (string ext in StaticData.SHP_EXT)
            foreach (string ext in exts)
            {
                string file = shpPath.Replace(".shp", ext);
                string file = vd.FilePath.Replace(vd.Ext, ext);
                if (File.Exists(file))
                {
                    files.Add(file);
                }
            }
            return files;
            return files.ToArray();
        }
        /// <summary>
@@ -229,41 +245,6 @@
            return isExclude;
        }
        /// <summary>
        /// 获取文件的MD5码
        /// </summary>
        private static string GetFileMD5(string file)
        {
            if ("1" != Tools.GetSetting("GetMD5") || !File.Exists(file)) return null;
            return MD5Helper.GetMD5Hash(file);
        }
        /// <summary>
        /// 获取多个文件的MD5码
        /// </summary>
        private static string GetFilesMD5(string path)
        {
            if ("1" != Tools.GetSetting("GetMD5") || !Directory.Exists(path)) return null;
            string[] files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
            if (null == files || files.Length == 0) return null;
            List<string> list = new List<string>();
            foreach (string file in files)
            {
                string md5 = MD5Helper.GetMD5Hash(file);
                if (string.IsNullOrEmpty(md5)) list.Add(md5);
            }
            if (list.Count == 0) return null;
            string str = string.Join(",", list.ToArray());
            byte[] bytes = Encoding.Unicode.GetBytes(str);
            return MD5Helper.GetMD5Hash(bytes);
        }
        #endregion
        #region 导入
@@ -273,15 +254,27 @@
        public static void ImportFiles(ObservableCollection<ViewData> viewDatas)
        {
            Parallel.ForEach(viewDatas, (vd, ParallelLoopState) =>
            //foreach (ViewData vd in viewDatas)
            {
                try
                {
                    //
                    vd.Status = "生成MD5码...";
                    vd.Meta.guid = GetFilesMD5(vd);
                    SysMeta meta = new SysMeta();
                    //
                    if (!string.IsNullOrEmpty(vd.Meta.guid) && DBHelper.IsFileExists(vd.Meta.guid))
                    {
                        vd.Status = "已存在!";
                        return; // continue;
                    }
                    int id = DBHelper.InsertMeta(meta);
                    vd.Status = "读取栅格信息...";
                    ReadRasterInfo(vd);
                    vd.Status = "复制文件...";
                    CopyFiles(vd);
                    vd.Status = "元数据入库...";
                    int id = DBHelper.InsertMeta(vd.Meta);
                    vd.Status = id > 0 ? "成功。" : "失败!";
                }
                catch (Exception ex)
@@ -293,78 +286,203 @@
        }
        /// <summary>
        /// 获取文件的MD5
        /// </summary>
        private static string GetFilesMD5(ViewData vd)
        {
            if ("1" != Tools.GetSetting("GetMD5")) return null;
            if (File.Exists(vd.FilePath))
            {
                if (vd.Ext == StaticData.SHP)
                {
                    return GetFilesMD5(GetExtFiles(vd, StaticData.SHP_EXT));
                }
                else
                {
                    return MD5Helper.GetMD5Hash(vd.FilePath);
                }
            }
            if (Directory.Exists(vd.FilePath))
            {
                string[] files = Directory.GetFiles(vd.FilePath, "*", SearchOption.AllDirectories);
                return GetFilesMD5(files);
            }
            return null;
        }
        /// <summary>
        /// 获取多个文件的MD5码
        /// </summary>
        private static string GetFilesMD5(string[] files)
        {
            if (null == files || files.Length == 0) return null;
            List<string> list = new List<string>();
            foreach (string file in files)
            {
                string md5 = MD5Helper.GetMD5Hash(file);
                if (!string.IsNullOrEmpty(md5)) list.Add(md5);
            }
            if (list.Count == 0) return null;
            string str = string.Join(",", list.ToArray());
            byte[] bytes = Encoding.Unicode.GetBytes(str);
            return MD5Helper.GetMD5Hash(bytes);
        }
        /// <summary>
        /// 读取栅格信息
        /// </summary>
        private static void ReadRasterInfo(ViewData vd)
        {
            if (!StaticData.RASTER_EXT.Contains(vd.Ext) || !File.Exists(vd.FilePath)) return;
            GdalHelper.Instance.ReadRasterInfo(vd);
        }
        /// <summary>
        /// 复制文件
        /// </summary>
        private static void CopyFile(string source, string target)
        private static void CopyFiles(ViewData vd)
        {
            if (File.Exists(source))
            if (string.IsNullOrEmpty(vd.Meta.guid)) vd.Meta.guid = vd.Meta.eventid;
            switch (vd.Ext)
            {
                File.Copy(source, target, true);
                case StaticData.MPT:
                    copyMultiFile(vd, StaticData.MPT_EXT);
                    break;
                case StaticData.JPG:
                    copyMultiFile(vd, StaticData.JPG_EXT);
                    break;
                case StaticData.JP2:
                    copyMultiFile(vd, StaticData.JP2_EXT);
                    break;
                case StaticData.IMG:
                    copyMultiFile(vd, StaticData.IMG_EXT);
                    break;
                case StaticData.TIF:
                    copyMultiFile(vd, StaticData.TIF_EXT);
                    break;
                case StaticData.TIFF:
                    copyMultiFile(vd, StaticData.TIFF_EXT);
                    break;
                case StaticData.SHP:
                    copyMultiFile(vd, StaticData.SHP_EXT);
                    break;
                case StaticData.OSGB:
                    copyFolderFile(vd);
                    break;
                case StaticData.GDB:
                    copyFolderFile(vd);
                    break;
                default:
                    copySingleFile(vd);
                    break;
            }
        }
        public static void ImportFiles(ObservableCollection<ViewData> viewDatas, string target, int start)
        /// <summary>
        /// 复制文件夹
        /// </summary>
        private static int copyFolderFile(ViewData vd)
        {
            /*Parallel.ForEach(viewDatas, (vd, ParallelLoopState) =>
            if (!Directory.Exists(vd.FilePath)) return -1;
            int count = 0;
            vd.Meta.path = Path.Combine("" + GetSubPath(), vd.Meta.guid);
            string targetFolder = Path.Combine(CommonProp.TargetPath, vd.Meta.path);
            if (Directory.Exists(targetFolder)) return 0;
            string[] files = Directory.GetFiles(vd.FilePath, "*", SearchOption.AllDirectories);
            foreach (string source in files)
            {
                try
                {
                    vd.Status = "生成MD5码...";
                    string guid = MD5Helper.GetMD5Hash(vd.FilePath);
                    if (!Exclusions.Contains(vd.Ext) && IsFileExists(guid))
                    {
                        vd.Status = "已存在!";
                        return;
                    }
                    string target = source.Replace(vd.FilePath, targetFolder);
                    string path = new FileInfo(target).Directory.FullName;
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
                    vd.Status = "获取数据目录...";
                    int subPath = GetSubPath(target, start);
                    SysMeta mf = GetMetaFile(vd, subPath, guid);
                    vd.Status = "复制文件...";
                    CopyFile(vd.FilePath, Path.Combine(target, mf.path));
                    vd.Status = "准备入库";
                    vd.Meta = mf;
            });*/
        }
        public static void ImportFiles2(ObservableCollection<ViewData> viewDatas, string target)
        {
            int start = 1;
            foreach (ViewData vd in viewDatas)
            {
                try
                {
                    vd.Status = "插入数据库...";
                    start = GetSubPath(target, start);
                    SysMeta mf = GetMetaFile(vd, start, "");
                    int metaId = 0; // InsertMeta(mf);
                    if (metaId == 0)
                    {
                        vd.Status = "元数据出错!";
                        continue;
                    }
                    vd.Status = "复制文件...";
                    CopyFile(vd.FilePath, Path.Combine(target, mf.path));
                    vd.Status = "完成。";
                    File.Copy(source, target, true);
                    count++;
                }
                catch (Exception ex)
                {
                    LogOut.Error(ex.Message + "\r\n" + ex.StackTrace);
                    vd.Status = "失败!";
                    LogOut.Error(ex.StackTrace);
                }
            }
            return count;
        }
        /// <summary>
        /// 复制多个文件
        /// </summary>
        private static int copyMultiFile(ViewData vd, List<string> exts)
        {
            int count = copySingleFile(vd);
            if (count < 0) return -1;
            string target = Path.Combine(CommonProp.TargetPath, vd.Meta.path);
            foreach (string ext in exts)
            {
                try
                {
                    string source = vd.FilePath.Replace(vd.Ext, ext);
                    if (!File.Exists(source)) continue;
                    File.Copy(vd.FilePath.Replace(vd.Ext, ext), target.Replace(vd.Ext, ext), true);
                    count++;
                }
                catch (Exception ex)
                {
                    LogOut.Error(ex.StackTrace);
                }
            }
            return count;
        }
        /// <summary>
        /// 复制单文件
        /// </summary>
        private static int copySingleFile(ViewData vd)
        {
            if (!File.Exists(vd.FilePath)) return -1;
            vd.Meta.path = Path.Combine("" + GetSubPath(), vd.Meta.guid + vd.Ext);
            string target = Path.Combine(CommonProp.TargetPath, vd.Meta.path);
            if (File.Exists(target)) return 0;
            try
            {
                File.Copy(vd.FilePath, target, true);
                return 1;
            }
            catch (Exception ex)
            {
                LogOut.Error(ex.StackTrace);
                return -1;
            }
        }
        private static int GetSubPath(string target, int start = 1)
        /// <summary>
        /// 获取子目录
        /// </summary>
        private static int GetSubPath()
        {
            int start = 0;
            int.TryParse(Tools.GetSetting("StartPath"), out start);
            while (true)
            {
                string path = Path.Combine(target, start.ToString());
                string path = Path.Combine(CommonProp.TargetPath, start.ToString());
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
@@ -372,33 +490,13 @@
                }
                string[] files = Directory.GetFiles(path);
                if (files.Length < 2001)
                if (files.Length <= StaticData.MAX_FILES)
                {
                    return start;
                }
                start++;
            }
        }
        private static SysMeta GetMetaFile(ViewData vd, int subPath, string guid)
        {
            SysMeta mf = new SysMeta();
            mf.eventid = Guid.NewGuid().ToString();
            mf.metaid = 0;
            //mf.dirid = vd.Meta.dirid;
            //mf.depid = vd.Meta.depid;
            mf.verid = vd.Meta.verid;
            mf.name = vd.Meta.name;
            mf.type = vd.Meta.type;
            mf.guid = guid;
            mf.path = subPath + "\\" + mf.name;
            mf.sizes = vd.Meta.sizes;
            mf.tab = null;
            mf.rows = 0;
            mf.create_user = vd.Meta.create_user;
            return mf;
        }
        #endregion
    }