using System.Data;
using Commonlib;
using Microsoft.Extensions.Logging;
using NLog;
using Quartz;

namespace BLW_Log.services
{
    public class ExcelScan : IJob
    {
        private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
        public static string sourceDir = @"Excel\上传目录";  // 上传的目录路径
        public static string DealWithDir = @"Excel\处理";  // 处理的目录路径
        public static string targetDir = @"Excel\target_jindie";  // 马丽要使用的目录路径
        public static string JinDieBakDir = @"Excel\target_jindie_bak";  // 马丽要使用的目录路径
        public static string KongBaiDir = @"Excel\空白";  // 马丽要使用的目录路径
        public static string 上传成功 = "[上传成功]";
        public static string 上传失败 = "[上传失败]";
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                string 现在时间 = DateTime.Now.ToString("yyyyMMddHHmmss");
                string 现在时间_天 = DateTime.Now.ToString("yyyyMMdd");

                // 获取源目录所有文件
                string[] files = Directory.GetFiles(sourceDir);


                _logger.Info("移动文件到各自的目录");
                foreach (string file in files)
                {
                    string fileNameGGG = Path.GetFileName(file);
                    string ssk = Path.GetExtension(fileNameGGG);
                    if (ssk.Equals(".xls") || ssk.Equals(".xlsx"))
                    {
                        if (!fileNameGGG.StartsWith(上传成功) && fileNameGGG.StartsWith(上传失败) == false)
                        {

                            string fileName = Path.GetFileName(file);
                            DataTable DT = null;
                            try
                            {
                                DT = ExcelHelper.ReadExcelToDataTable(file);
                            }
                            catch (Exception ex)
                            {
                                string Fault_Src_File = Path.Combine(sourceDir, 上传失败 + "_错误03_" + fileName);
                                File.Copy(file, Fault_Src_File, true);
                                File.Delete(file);
                                return Task.CompletedTask;
                            }

                            //01   文件缺少必要列
                            //02   文件格式错误
                            //03   文件损坏
                            //8 さ8
                            //文件内容格式错误←
                            //未知错误，请联系管理员←
                            bool hasColumn0 = DT.Columns.Contains("项目名称");
                            bool hasColumn1 = DT.Columns.Contains("产品料号");
                            bool hasColumn2 = DT.Columns.Contains("产品名称");
                            bool hasColumn3 = DT.Columns.Contains("发货数量");
                            bool hasColumn4 = DT.Columns.Contains("单价");
                            bool hasColumn5 = DT.Columns.Contains("销售");
                            //bool hasColumn6 = DT.Columns.Contains("单位");

                            bool bf = hasColumn0 && hasColumn1 && hasColumn2 && hasColumn3 && hasColumn4 && hasColumn5;
                                //&&hasColumn6;



                            if (bf == false)
                            {
                                string Fault_Src_File = Path.Combine(sourceDir, 上传失败 + "_错误01_" + fileName);
                                File.Copy(file, Fault_Src_File, true);
                                File.Delete(file);
                            }
                            else
                            {
                                string Success_Src_File = Path.Combine(sourceDir, 上传成功 + "_" + fileName);
                                File.Copy(file, Success_Src_File, true);
                                //File.Copy(ExcelScan.KongBaiDir + "\\空白文件.xlsx", Success_Src_File, true);
                                string bak_Dir = @"Excel\bak\" + 现在时间;  // 备份的目录路径
                                if (!Directory.Exists(bak_Dir))
                                {
                                    Directory.CreateDirectory(bak_Dir);
                                }
                                string bakFile = Path.Combine(bak_Dir, fileName);
                                // 移动文件（覆盖已存在文件）
                                File.Copy(file, bakFile, true);

                                string destFile = Path.Combine(DealWithDir, fileName);
                                File.Move(file, destFile, true);

                                //File.Move(file, destFile, true);
                                _logger.Info("复制文件" + fileName + "到" + bakFile);
                                _logger.Info("移动文件" + fileName + "到" + destFile);
                            }
                        }
                    }

                }

                _logger.Info("移动文件完成");

            }
            catch (Exception ex)
            {
                _logger.Error("Excel 预检失败: " + ex.Message);
            }
            return Task.CompletedTask;
        }
    }
}
