using BLL;
using BLL.Common;
using Model.APIItem.SYHSE;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Web.UI.WebControls;

namespace FineUIPro.Web.SYHSE
{
    public partial class Data_EnvironmentProtectionDataIn : PageBase
    {
        #region 定义变量
        /// <summary>
        /// 上传预设的虚拟路径
        /// </summary>
        private string initPath = Const.ExcelUrl;

        /// <summary>
        /// 导入模版文件原始的虚拟路径
        /// </summary>
        private string initTemplatePath = Const.EnvironmentProtectionDataInTemplateUrl;

        /// <summary>
        /// 错误集合
        /// </summary>
        public static List<Model.ErrorInfo> errorInfos = new List<Model.ErrorInfo>();
        #endregion

        #region 加载
        /// <summary>
        /// 加载页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                 

                if (errorInfos != null)
                {
                    errorInfos.Clear();
                }
            }
        }
        #endregion
 

        #region 模板下载
        /// <summary>
        /// 模板下载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imgbtnUpload_Click(object sender, EventArgs e)
        {
            string uploadfilepath = Server.MapPath("~/") + initTemplatePath;
            string fileName = Path.GetFileName(initTemplatePath);
            FileInfo info = new FileInfo(uploadfilepath);
            if (info.Exists)
            {
                long fileSize = info.Length;
                Response.Clear();
                Response.ContentType = "application/x-zip-compressed";
                Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                Response.AddHeader("Content-Length", fileSize.ToString());
                Response.TransmitFile(uploadfilepath, 0, fileSize);
                Response.Flush();
                Response.Close();
            }
            else
            {
                ShowNotify("文件不存在!", MessageBoxIcon.Warning);
            }
        }
        #endregion

        #region 审核
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAudit_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.FileExcel.HasFile == false)
                {
                    Alert.ShowInTop("请您选择Excel文件!", MessageBoxIcon.Warning);
                    return;
                }
                string IsXls = Path.GetExtension(FileExcel.FileName).ToString().Trim().ToLower();
                if (IsXls != ".xls")
                {
                    Alert.ShowInTop("只可以选择Excel文件!", MessageBoxIcon.Warning);
                    return;
                }
                if (errorInfos != null)
                {
                    errorInfos.Clear();
                }
                string rootPath = Server.MapPath("~/");
                string initFullPath = rootPath + initPath;
                if (!Directory.Exists(initFullPath))
                {
                    Directory.CreateDirectory(initFullPath);
                }

                this.hdfileName.Text = BLL.Funs.GetNewFileName() + IsXls;
                string filePath = initFullPath + this.hdfileName.Text;
                FileExcel.PostedFile.SaveAs(filePath);
                ImportXlsToData(filePath);

            }
            catch (Exception ex)
            {
                Alert.ShowInTop(ex.Message);
            }
        }

        #region 读Excel提取数据
        /// <summary>
        /// 从Excel提取数据--》Dataset
        /// </summary>
        /// <param name="filename">Excel文件路径名</param>
        private void ImportXlsToData(string fileName)
        {
            try
            {
                //string oleDBConnString = String.Empty;
                //oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
                //oleDBConnString += "Data Source=";
                //oleDBConnString += fileName;
                //oleDBConnString += ";Extended Properties=Excel 8.0;";
                //OleDbConnection oleDBConn = null;
                //OleDbDataAdapter oleAdMaster = null;
                //DataTable m_tableName = new DataTable();
                //DataSet ds = new DataSet();

                //oleDBConn = new OleDbConnection(oleDBConnString);
                //oleDBConn.Open();
                //m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                //if (m_tableName != null && m_tableName.Rows.Count > 0)
                //{

                //    m_tableName.TableName = m_tableName.Rows[0]["TABLE_NAME"].ToString().Trim();

                //}
                //string sqlMaster;
                //sqlMaster = " SELECT *  FROM [" + m_tableName.TableName + "]";
                //oleAdMaster = new OleDbDataAdapter(sqlMaster, oleDBConn);
                //oleAdMaster.SelectCommand.CommandTimeout = 1200;
                //oleAdMaster.Fill(ds, "m_tableName");
                //oleAdMaster.Dispose();
                //oleDBConn.Close();
                //oleDBConn.Dispose();

                var dt = NPOIHelper.ExcelToDataTable1(fileName);

                AddDatasetToSQL(dt, 11);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
        #endregion

        /// <summary>
        /// 将Dataset的数据导入数据库
        /// </summary>
        /// <param name="pds">数据集</param>
        /// <param name="Cols">数据集列数</param>
        /// <returns></returns>
        private bool AddDatasetToSQL(DataTable pds, int Cols)
        {
            string result = string.Empty;
            int ic, ir;
            ic = pds.Columns.Count;
            if (ic < Cols)
            {
                throw new Exception("导入Excel格式错误!Excel只有" + ic.ToString().Trim() + "列");
            }

            ir = pds.Rows.Count;
            if (pds != null && ir > 0)
            {
                
                for (int i = 0; i < ir; i++)
                {
                   
                    if(string.IsNullOrEmpty( pds.Rows[i][0].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "监测点位名称" + "," + "此项为必填项!" + "|";

                    }

                    if (string.IsNullOrEmpty(pds.Rows[i][1].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "监测时间(开始)" + "," + "此项为必填项!" + "|";
                        try
                        {
                            DateTime.Parse(pds.Rows[i][1].ToString());
                        }catch(Exception ex)
                        {
                            result += (i + 2).ToString() + "," + "监测时间(开始)" + "," + "格式不对!" + "|";

                        }

                    }
                    if (string.IsNullOrEmpty(pds.Rows[i][2].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "监测时间(结束)" + "," + "此项为必填项!" + "|";
                        try
                        {
                            DateTime.Parse(pds.Rows[i][1].ToString());
                        }
                        catch (Exception ex)
                        {
                            result += (i + 2).ToString() + "," + "监测时间(结束)" + "," + "格式不对!" + "|";

                        }
                    }
                    if (string.IsNullOrEmpty(pds.Rows[i][3].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "项目名称" + "," + "此项为必填项!" + "|";

                    }
                    if (string.IsNullOrEmpty(pds.Rows[i][4].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "监测值" + "," + "此项为必填项!" + "|";

                    }
                     
                     
                    if (string.IsNullOrEmpty(pds.Rows[i][8].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "是否达标" + "," + "此项为必填项!" + "|";

                    }
                    else if (pds.Rows[i][8].ToString() != "是" && pds.Rows[i][8].ToString() != "否")
                    {
                        result += (i + 2).ToString() + "," + "是否停产" + "," + "请填是或否!" + "|";

                    }
                    if (string.IsNullOrEmpty(pds.Rows[i][9].ToString()))
                    {
                        result += (i + 2).ToString() + "," + "是否停产" + "," + "此项为必填项!" + "|";

                    }else if ( pds.Rows[i][8].ToString()!="是" && pds.Rows[i][9].ToString() != "否")
                    {
                        result += (i + 2).ToString() + "," + "是否停产" + "," + "请填是或否!" + "|";

                    }
                     

                    //a++;
                }

                if (!string.IsNullOrEmpty(result))
                {
                    result = result.Substring(0, result.LastIndexOf("|"));
                }
                errorInfos.Clear();
                if (!string.IsNullOrEmpty(result))
                {
                    string results = result;
                    List<string> errorInfoList = results.Split('|').ToList();
                    foreach (var item in errorInfoList)
                    {
                        string[] errors = item.Split(',');
                        Model.ErrorInfo errorInfo = new Model.ErrorInfo();
                        errorInfo.Row = errors[0];
                        errorInfo.Column = errors[1];
                        errorInfo.Reason = errors[2];
                        errorInfos.Add(errorInfo);
                    }
                    if (errorInfos.Count > 0)
                    {
                        Grid1.DataSource = errorInfos;
                        Grid1.DataBind();
                    }
                }
                else
                {
                    ShowNotify("审核完成,请点击导入!", MessageBoxIcon.Success);
                }
            }
            else
            {
                throw new Exception("导入数据为空!");
            }
            return true;
        }

        #region 导入
        /// <summary>
        /// 导入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (errorInfos.Count <= 0)
            {
                string rootPath = Server.MapPath("~/");
                string initFullPath = rootPath + initPath;
                if (!Directory.Exists(initFullPath))
                {
                    Directory.CreateDirectory(initFullPath);
                }

                string filePath = initFullPath + this.hdfileName.Text;
                ImportXlsToData2(filePath);
            }
            else
            {
                Alert.ShowInTop("请先将错误数据修正,再重新导入保存!", MessageBoxIcon.Warning);
            }
        }

        #region 读Excel提取数据
        /// <summary>
        /// 从Excel提取数据--》Dataset
        /// </summary>
        /// <param name="filename">Excel文件路径名</param>
        private void ImportXlsToData2(string fileName)
        {
            try
            {
                //string oleDBConnString = String.Empty;
                //oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
                //oleDBConnString += "Data Source=";
                //oleDBConnString += fileName;
                //oleDBConnString += ";Extended Properties=Excel 8.0;";
                //OleDbConnection oleDBConn = null;
                //OleDbDataAdapter oleAdMaster = null;
                //DataTable m_tableName = new DataTable();
                //DataSet ds = new DataSet();

                //oleDBConn = new OleDbConnection(oleDBConnString);
                //oleDBConn.Open();
                //m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                //if (m_tableName != null && m_tableName.Rows.Count > 0)
                //{

                //    m_tableName.TableName = m_tableName.Rows[0]["TABLE_NAME"].ToString().Trim();

                //}
                //string sqlMaster;
                //sqlMaster = " SELECT *  FROM [" + m_tableName.TableName + "]";
                //oleAdMaster = new OleDbDataAdapter(sqlMaster, oleDBConn);
                //oleAdMaster.SelectCommand.CommandTimeout = 1200;
                //oleAdMaster.Fill(ds, "m_tableName");
                //oleAdMaster.Dispose();
                //oleDBConn.Close();
                //oleDBConn.Dispose();
                var dt = NPOIHelper.ExcelToDataTable1(fileName);

                AddDatasetToSQL2(dt, 11);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        /// <summary>
        /// 将Dataset的数据导入数据库
        /// </summary>
        /// <param name="pds">数据集</param>
        /// <param name="Cols">数据集列数</param>
        /// <returns></returns>
        private bool AddDatasetToSQL2(DataTable pds, int Cols)
        {
            string result = string.Empty;
            string dReportID = string.Empty;
            string dateStr = string.Empty;
            int ic, ir;
            ic = pds.Columns.Count;
            if (ic < Cols)
            {
                throw new Exception("导入Excel格式错误!Excel只有" + ic.ToString().Trim() + "列");
            }
            List<Model.SYHSEData_EnvironmentProtection> environmentProtections = new List<Model.SYHSEData_EnvironmentProtection>();
            ir = pds.Rows.Count;
            if (pds != null && ir > 0)
            {
                for (int i = 0; i < ir; i++)
                {
                    Model.SYHSEData_EnvironmentProtection protection = new Model.SYHSEData_EnvironmentProtection();
                    protection.Id = Guid.NewGuid().ToString();
                    protection.ProjectId = this.CurrUser.LoginProjectId;
                    protection.DetectionAddress = pds.Rows[i][0].ToString();
                    protection.DetectionTimeA = DateUtil.ToDateTime(pds.Rows[i][1].ToString());
                    protection.DetectionTimeZ = DateUtil.ToDateTime(pds.Rows[i][2].ToString());
                    protection.DetectionProject = pds.Rows[i][3].ToString();
                    protection.DetectionValue = pds.Rows[i][4].ToString();
                    protection.StandValue = pds.Rows[i][5].ToString();
                    protection.AvgFlow = pds.Rows[i][6].ToString() ;
                    protection.SumFlow = pds.Rows[i][7].ToString();
                    protection.IsOk = pds.Rows[i][8].ToString();
                    protection.IsStop = pds.Rows[i][9].ToString();
                    protection.ReMark = pds.Rows[i][10].ToString();
                    protection.ShowIndex = i;
                    environmentProtections.Add(protection);

					DataEnvironmentProtectionItem newItem = new DataEnvironmentProtectionItem();
					newItem.Id = protection.Id;
					newItem.ProjectId = protection.ProjectId;
					newItem.UnitId = protection.UnitId;
					newItem.CreateMan = protection.CreateMan;
					newItem.CreateDate = protection.CreateDate;
					newItem.DetectionTimeA = protection.DetectionTimeA;
					newItem.DetectionTimeZ = protection.DetectionTimeZ;
					newItem.DetectionAddress = protection.DetectionAddress;
					newItem.DetectionProject = protection.DetectionProject;
					newItem.DetectionValue = protection.DetectionValue;
					newItem.StandValue = protection.StandValue;
					newItem.AvgFlow = protection.AvgFlow;
					newItem.SumFlow = protection.SumFlow;
					newItem.IsOk = protection.IsOk;
					newItem.IsStop = protection.IsStop;
					newItem.ReMark = protection.ReMark;
					newItem.Type = protection.Type;
					string contenttype = "application/json;charset=utf-8";
					string url = ConfigurationManager.AppSettings["QHSE_URL"] + "api/SYHSEData/SaveEnvironmentProtection";
					string messages = APIGetHttpService.Http(url, "POST", contenttype, null, JsonConvert.SerializeObject(newItem));


				}

                Funs.DB.SYHSEData_EnvironmentProtection.InsertAllOnSubmit(environmentProtections);
                Funs.DB.SubmitChanges();

                ShowNotify("导入成功!", MessageBoxIcon.Success);

                PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
            }
            else
            {
                throw new Exception("导入数据为空!");
            }
            return true;
        }
        #endregion
    }
}