Exemple #1
0
            public ImportFileLoadedItem(MainWindowViewModel main, ImportFileInfo info) : base(main, null)
            {
                this.info    = info;
                reset        = new ManualResetEventSlim(true);
                tempFileName = Path.ChangeExtension(info.File.FullName, ".temp");
                File.Delete(tempFileName);
                //
                var bl = new GameObjectBuilder(main.context.GetEntityManager());

                compositeGameObject = bl.Build(info.File, info.Parser);

                base.GameObj = compositeGameObject;
                //
                watcher = new FileSystemWatcher(info.File.DirectoryName, "*" + Path.GetExtension(info.File.Name));
                watcher.EnableRaisingEvents = true;
                watcher.Changed            += OnFileChanged;
            }
        static public string ImportExcel(string fileName, AppDbContext db, ILogger logger, string userId, bool moveToArhive = true)
        {
            string error     = "";
            int    rowNumber = 0; // номер строки в которой произошла ошибка при импорте

            FileInfo file = new FileInfo(fileName);

            try
            {
                using (ExcelPackage package = new ExcelPackage(file))
                {
                    var fileInfo = new ImportFileInfo
                    {
                        FileName   = fileName,
                        ImportDate = DateTime.Now,
                        DateFile   = File.GetLastWriteTime(fileName),
                        UserId     = userId
                    };

                    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                    int            rowCount  = worksheet.Dimension.Rows;

                    for (int row = 2; row <= rowCount; row++)
                    {
                        rowNumber = row;

                        if (worksheet.Cells[row, 1].Value == null)
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 3].Value == null)
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 4].Value == null)
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 1].Value.ToString().Equals(""))
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 2].Value == null)
                        {
                            throw new Exception("Model/PartNumber is null");
                        }

                        var serial = new SerialInfo
                        {
                            SerialNumber   = worksheet.Cells[row, 1].Value.ToString(),
                            Model          = worksheet.Cells[row, 2].Value.ToString(),
                            Reference1     = worksheet.Cells[row, 3].Value.ToString(),
                            Reference2     = worksheet.Cells[row, 4].Value.ToString(),
                            Date           = Convert.ToDateTime(worksheet.Cells[row, 5].Value),
                            ImportFileInfo = fileInfo
                        };

                        db.SerialInfo.Add(serial);
                    }

                    db.SaveChanges();

                    // кладем файл в папку с архивом
                    if (moveToArhive)
                    {
                        string sourcePath = @"C:\Temp";
                        string targetPath = @"C:\Temp\archive";
                        if (!Directory.Exists(targetPath))
                        {
                            Directory.CreateDirectory(targetPath);
                        }

                        if (Directory.Exists(sourcePath))
                        {
                            string[] files = Directory.GetFiles(sourcePath);


                            foreach (string s in files)
                            {
                                fileName = Path.GetFileName(s);
                                string destFile = Path.Combine(targetPath, fileName);
                                File.Copy(s, destFile, true);
                            }
                        }
                        else
                        {
                            error = "Source path does not exist!";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message);
                error = $"Import error. Row: {rowNumber}. Error text: {ex.Message}";
            }

            return(error);
        }
Exemple #3
0
 public void Load(ImportFileInfo info)
 {
     items.Add(new ImportFileLoadedItem(this, info));
 }
        static public string ImportExcel(string fileName, string realFileName, AppDbContext db, ILogger logger, string archivePath, string userId, string guid)
        {
            string error     = "";
            int    rowNumber = 0; // номер строки в которой произошла ошибка при импорте

            FileInfo file = new FileInfo(fileName);

            if (File.Exists(fileName))
            {
                try
                {
                    ExcelPackage package = new ExcelPackage(file);

                    var fileInfo = new ImportFileInfo
                    {
                        FileName         = realFileName,
                        ImportDate       = DateTime.Now,
                        DateFile         = File.GetLastWriteTime(fileName),
                        UserId           = userId,
                        ImportedRowCount = 0
                    };

                    db.ImportFileInfo.Add(fileInfo);

                    bool hasSecondSheet = (package.Workbook.Worksheets.Count > 1);

                    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                    int            rowCount  = worksheet.Dimension.Rows;

                    ExcelWorksheet worksheet2 = null;
                    if (hasSecondSheet)
                    {
                        worksheet2 = package.Workbook.Worksheets[2];
                    }

                    int x = 0;

                    decimal oldPercent = -1;

                    bool      sendToWebSocket = guid != null;
                    WebSocket websocket       = null;

                    if (sendToWebSocket)
                    {
                        websocket = Startup.webSocketsList[guid];
                    }

                    for (int row = 2; row <= rowCount; row++)
                    {
                        if (sendToWebSocket)
                        {
                            var percent = Math.Truncate((100m * row) / rowCount);

                            var bin = new ArraySegment <byte>(Encoding.Default.GetBytes(percent.ToString()));

                            if (oldPercent != percent)
                            {
                                websocket.SendAsync(bin, System.Net.WebSockets.WebSocketMessageType.Text, true, CancellationToken.None);
                                oldPercent = percent;
                            }
                        }

                        rowNumber = row;

                        if (worksheet.Cells[row, 1].Value == null)
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 3].Value == null)
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 4].Value == null)
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 1].Value.ToString().Equals(""))
                        {
                            continue;
                        }

                        if (worksheet.Cells[row, 2].Value == null)
                        {
                            throw new Exception("Model/PartNumber is null");
                        }

                        var sn = worksheet.Cells[row, 1].Value.ToString();

                        string extendedWarrantyPeriod = "";
                        string dateExtensionStarted   = "";
                        string actualModel            = "";

                        if (hasSecondSheet)
                        {
                            //rowCount = worksheet2.Dimension.Rows;
                            var extendedData = worksheet2.Cells.FirstOrDefault(s => s.Text == sn);

                            if (extendedData != null)
                            {
                                int rowIndex = Convert.ToInt32(extendedData.Address.Substring(1));

                                if (worksheet2.Cells[rowIndex, 6].Value != null)
                                {
                                    extendedWarrantyPeriod = worksheet2.Cells[rowIndex, 6].Value.ToString();
                                }

                                if (worksheet2.Cells[rowIndex, 5].Value != null)
                                {
                                    dateExtensionStarted = worksheet2.Cells[rowIndex, 5].Value.ToString();
                                }

                                if (worksheet2.Cells[rowIndex, 2].Value != null)
                                {
                                    actualModel = worksheet2.Cells[rowIndex, 2].Value.ToString();
                                }
                            }
                        }

                        var serial = new SerialInfo
                        {
                            SerialNumber           = sn,
                            Model                  = worksheet.Cells[row, 2].Value.ToString(),
                            Reference1             = worksheet.Cells[row, 3].Value.ToString(),
                            Reference2             = worksheet.Cells[row, 4].Value.ToString(),
                            Date                   = Convert.ToDateTime(worksheet.Cells[row, 5].Value),
                            ImportFileInfo         = fileInfo,
                            ActualModel            = actualModel,
                            DateExtensionStarted   = dateExtensionStarted,
                            ExtendedWarrantyPeriod = extendedWarrantyPeriod
                        };


                        db.SerialInfo.Add(serial);
                        db.SaveChanges();
                        x++;
                    }

                    string archiveFileName = Guid.NewGuid().ToString().ToLower().Replace("-", "");
                    // кладем файл в папку с архивом
                    if (!archivePath.Equals(""))
                    {
                        if (!Directory.Exists(archivePath))
                        {
                            Directory.CreateDirectory(archivePath);
                        }

                        archiveFileName = Path.Combine(archivePath, archiveFileName + (new FileInfo(realFileName)).Extension);

                        if (File.Exists(archiveFileName))
                        {
                            File.Delete(archiveFileName);
                        }

                        File.Move(fileName, archiveFileName);
                    }

                    fileInfo.ImportedRowCount = x;
                    fileInfo.ArchiveFileName  = archiveFileName;

                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    logger.LogError(ex.Message);
                    error = $"Import error. Row: {rowNumber}. Error text: {ex.Message}";
                }
            }
            else
            {
                error = $"File not exists {fileName}";
            }

            return(error);
        }
        static public string ImportXml(string fileName, string realFileName, AppDbContext db, ILogger logger, string archivePath, string userId, string guid)
        {
            string error = "";


            XmlDocument doc = new XmlDocument();

            doc.Load(fileName);

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);

            nsmgr.AddNamespace("o", "urn:schemas-microsoft-com:office:office");
            nsmgr.AddNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
            nsmgr.AddNamespace("x", "urn:schemas-microsoft-com:office:excel");
            nsmgr.AddNamespace("html", @"http://www.w3.org/TR/REC-html40");
            nsmgr.AddNamespace("a", "urn:schemas-microsoft-com:office:spreadsheet");

            XmlElement root = doc.DocumentElement;

            XmlNodeList rows = doc.SelectNodes("//a:Workbook/a:Worksheet/a:Table/a:Row", nsmgr);

            List <string> refList = new List <string>();

            foreach (XmlElement row in rows)
            {
                var cellA = row.FirstChild.FirstChild.InnerText;
                var cellB = row.ChildNodes[1].FirstChild.InnerText;

                if (cellA.Equals("") || cellB.Equals(""))
                {
                    break;
                }
                else
                {
                    refList.Add(cellB);
                }
            }


            List <SerialNumberRow> serials = new List <SerialNumberRow>();

            foreach (var reference in refList)
            {
                string r = reference;

                if (r.StartsWith("N"))
                {
                    r = r.Replace("N", "SS");
                }

                bool startCollectSerials = false;

                foreach (XmlElement row in rows)
                {
                    if (!startCollectSerials)
                    {
                        var cellA = (row.FirstChild.FirstChild == null)?"": row.FirstChild.FirstChild.InnerText;
                        if (cellA.Equals("Serial number"))
                        {
                            startCollectSerials = true;
                            continue;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    if (!row.ChildNodes[0].FirstChild.InnerText.Equals(""))
                    {
                        serials.Add(new SerialNumberRow
                        {
                            SerialNumber = row.ChildNodes[0].FirstChild.InnerText,
                            PartNumber   = row.ChildNodes[1].FirstChild.InnerText,
                            Reference    = row.ChildNodes[2].FirstChild.InnerText,
                            Reference2   = row.ChildNodes[3].FirstChild.InnerText,
                            Date         = row.ChildNodes[4].FirstChild.InnerText,
                        });
                    }
                }
            }

            var fileInfo = new ImportFileInfo
            {
                FileName         = realFileName,
                ImportDate       = DateTime.Now,
                DateFile         = File.GetLastWriteTime(fileName),
                UserId           = userId,
                ImportedRowCount = serials.Count
            };

            db.ImportFileInfo.Add(fileInfo);

            foreach (var sn in serials)
            {
                db.SerialInfo.Add(new SerialInfo
                {
                    Date                   = Convert.ToDateTime(sn.Date, ruFormatProvider),
                    ImportFileInfo         = fileInfo,
                    Model                  = sn.PartNumber,
                    Reference1             = sn.Reference,
                    Reference2             = sn.Reference2,
                    SerialNumber           = sn.SerialNumber,
                    ActualModel            = "",
                    DateExtensionStarted   = "",
                    ExtendedWarrantyPeriod = ""
                });
            }

            string archiveFileName = Guid.NewGuid().ToString().ToLower().Replace("-", "");

            // кладем файл в папку с архивом
            if (!archivePath.Equals(""))
            {
                if (!Directory.Exists(archivePath))
                {
                    Directory.CreateDirectory(archivePath);
                }

                archiveFileName = Path.Combine(archivePath, archiveFileName + (new FileInfo(realFileName)).Extension);

                if (File.Exists(archiveFileName))
                {
                    File.Delete(archiveFileName);
                }

                File.Move(fileName, archiveFileName);
            }

            fileInfo.ArchiveFileName = archiveFileName;
            db.SaveChanges();

            return(error);
        }