using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Threading;
namespace FineUIPro.Web.CQMS.Comprehensive
{
    public partial class DesignDrawingsDataInNew :PageBase
    {
        /// 
        /// 错误集合
        /// 
        public static string errorInfos = string.Empty;
        #region 加载页面
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (percent == null)
                {
                    percent = new Dictionary();
                }
                this.id.Text = this.CurrUser.UserId;
                this.ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
                // 绑定表格
                this.BindGrid();
            }
            else if (GetRequestEventArgument() == "reloadGrid")
            {
                BindGrid();
            }
        }
        #endregion
        #region 绑定数据
        /// 
        /// 绑定数据
        /// 
        private void BindGrid()
        {
            string strSql = @"SELECT TempId,ProjectId,UserId,Time,RowNo,ToopValue,Value1,Value2,Value3,Value4,Value5,Value6,Value7,Value8,Value9,Value10"
                + @" ,Value11,Value12,Value13,Value14,Value15,Value16,Value17,Value18,Value19,Value20"
                + @",ToopValue,Type"
                + @" FROM Sys_CQMS_DataInTemp  "
                + @" WHERE ProjectId=@ProjectId AND UserId=@UserId AND Type=@Type";
            List listStr = new List();
            listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
            listStr.Add(new SqlParameter("@UserId", this.CurrUser.UserId));
            listStr.Add(new SqlParameter("@Type", "DesignDrawings"));
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
            var dataInTempAll = from x in Funs.DB.Sys_CQMS_DataInTemp
                                where x.ProjectId == this.CurrUser.LoginProjectId && x.UserId == this.CurrUser.UserId && x.Type == "DesignDrawings"
                                select x;
            for (int i = 0; i < Grid1.Rows.Count; i++)
            {
                var dataInTemp = dataInTempAll.FirstOrDefault(x => x.TempId == Grid1.Rows[i].DataKeys[0].ToString());
                if (dataInTemp != null)
                {
                    if (!string.IsNullOrEmpty(dataInTemp.ToopValue))
                    {
                        Grid1.Rows[i].RowCssClass = "red";
                    }
                }
            }
            var errData = from x in dataInTempAll where x.ToopValue != null select x;
            this.lbDataCout.Text = errData.Count().ToString();
        }
        #endregion
        #region 双击事件
        /// 
        /// Grid行双击事件
        /// 
        /// 
        /// 
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("DesignDrawingsDataInNewEdit.aspx?TempId={0}", Grid1.SelectedRowID, "维护 - ")));
        }
        #endregion
        #region 导入信息 维护
        /// 
        /// 导入信息编辑
        /// 
        /// 
        /// 
        protected void btnMenuEdit_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("DesignDrawingsDataInNewEdit.aspx?TempId={0}", Grid1.SelectedRowID, "维护 - ")));
        }
        /// 
        /// 删除按钮
        /// 
        /// 
        /// 
        protected void btnMenuDelete_Click(object sender, EventArgs e)
        {
            if (Grid1.SelectedRowIndexArray.Length == 0)
            {
                Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning);
                return;
            }
            foreach (int rowIndex in Grid1.SelectedRowIndexArray)
            {
                string rowID = Grid1.DataKeys[rowIndex][0].ToString();
                BLL.Sys_CQMS_DataInTempService.DeleteDataInTempByDataInTempID(rowID);
            }
            ShowNotify("删除成功!", MessageBoxIcon.Success);
            this.BindGrid();
        }
        #endregion
        #region 分页 排序
        /// 
        /// 分页
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            BindGrid();
        }
        /// 
        /// 分页显示条数下拉框
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 文件上传
        /// 
        /// 文件上传
        /// 
        /// 
        /// 
        protected void imgbtnImport_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.FileExcel.HasFile == false)
                {
                    ShowNotify("请选择Excel文件!", MessageBoxIcon.Warning);
                    return;
                }
                string IsXls = Path.GetExtension(this.FileExcel.FileName).ToString().Trim().ToLower();
                if (IsXls != ".xls" && IsXls != ".xlsx")
                {
                    ShowNotify("只能选择Excel文件!", MessageBoxIcon.Warning);
                    return;
                }
                string rootPath = Server.MapPath("~/");
                string initFullPath = rootPath + Const.ExcelUrl;
                if (!Directory.Exists(initFullPath))
                {
                    Directory.CreateDirectory(initFullPath);
                }
                //指定上传文件名称
                this.hdfileName.Text = BLL.Funs.GetNewFileName() + IsXls;
                //上传文件路径
                string filePath = initFullPath + this.hdfileName.Text;
                //文件上传服务器
                this.FileExcel.PostedFile.SaveAs(filePath);
                //文件上传服务器后的名称
                string fileName = rootPath + Const.ExcelUrl + this.hdfileName.Text;
                //读取Excel
                DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out errorInfos, true);
                //验证Excel读取是否有误
                if (!string.IsNullOrEmpty(errorInfos))
                {
                    ShowNotify(errorInfos, MessageBoxIcon.Warning);
                    return;
                }
                if (ds.Tables.Count > 0)
                {
                    for (int i = 1; i < ds.Tables[0].Rows.Count; i++)
                    {
                        Sys_CQMS_DataInTemp newDataInTemp = new Sys_CQMS_DataInTemp();
                        newDataInTemp.TempId = SQLHelper.GetNewID(typeof(Model.Sys_CQMS_DataInTemp));
                        newDataInTemp.ProjectId = this.CurrUser.LoginProjectId;
                        newDataInTemp.UserId = this.CurrUser.UserId;
                        newDataInTemp.Time = System.DateTime.Now;
                        newDataInTemp.Type = "DesignDrawings";
                        newDataInTemp.RowNo = i + 2;
                        newDataInTemp.Value1 = ds.Tables[0].Rows[i][0].ToString();
                        newDataInTemp.Value2 = ds.Tables[0].Rows[i][1].ToString();
                        newDataInTemp.Value3 = ds.Tables[0].Rows[i][2].ToString();
                        newDataInTemp.Value4 = ds.Tables[0].Rows[i][3].ToString();
                        newDataInTemp.Value5 = ds.Tables[0].Rows[i][4].ToString();
                        newDataInTemp.Value6 = ds.Tables[0].Rows[i][5].ToString();
                        newDataInTemp.Value7 = ds.Tables[0].Rows[i][6].ToString();
                        newDataInTemp.Value8 = ds.Tables[0].Rows[i][7].ToString();
                        newDataInTemp.Value9 = ds.Tables[0].Rows[i][8].ToString();
                        newDataInTemp.Value10 = ds.Tables[0].Rows[i][9].ToString();
                        newDataInTemp.Value11 = ds.Tables[0].Rows[i][10].ToString();
                        newDataInTemp.Value12 = ds.Tables[0].Rows[i][11].ToString();
                        BLL.Sys_CQMS_DataInTempService.AddDataInTemp(newDataInTemp);
                    }
                    this.BindGrid();
                    ShowNotify("数据已导入临时表!", MessageBoxIcon.Success);
                }
                else
                {
                    Alert.ShowInTop("导入数据为空!", MessageBoxIcon.Success);
                    return;
                }
            }
            catch (Exception ex)
            {
                Alert.ShowInTop("'" + ex.Message + "'", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 导出按钮
        /// 导出按钮
        /// 
        /// 
        /// 
        protected void btnOut_Click(object sender, EventArgs e)
        {
            Response.ClearContent();
            string filename = Funs.GetNewFileName();
            Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("图纸收发记录" + filename, System.Text.Encoding.UTF8) + ".xls");
            Response.ContentType = "application/excel";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.Write(GetGridTableHtml(Grid1));
            Response.End();
        }
        #endregion        
        #region 保存审核事件
        /// 
        /// 保存审核事件
        /// 
        /// 
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(() => { btnSaveMethod(this.CurrUser.LoginProjectId, this.CurrUser.UserId, "DesignDrawings"); }));
            t.Start();
            if (percent.ContainsKey(this.CurrUser.UserId))
            {
                percent[CurrUser.UserId] = 0;
            }
            else
            {
                percent.Add(CurrUser.UserId, 0);
            }
            PageContext.RegisterStartupScript("printX()");
        }
        protected void btnRefresh_Click(object sender, EventArgs e)
        {
            this.BindGrid();
        }
        protected void btnSaveMethod(string LoginProjectId, string UserId, string IsPDMS)
        {
            var oldViewInfos = from x in Funs.DB.Comprehensive_DesignDrawings
                               where x.ProjectId == this.CurrUser.LoginProjectId
                               select x;
            var units = from x in Funs.DB.Base_Unit
                        join y in Funs.DB.Project_ProjectUnit on x.UnitId equals y.UnitId
                        where y.ProjectId == this.CurrUser.LoginProjectId
                        select x;
            var cns = from x in Funs.DB.Base_CNProfessional select x;
            var unitWorks = from x in Funs.DB.WBS_UnitWork
                            where x.ProjectId == this.CurrUser.LoginProjectId
                            && (x.SuperUnitWork == null || x.SuperUnitWork == "0")
                            select x;
            var dataInTemp = from x in Funs.DB.Sys_CQMS_DataInTemp
                             where x.ProjectId == LoginProjectId && x.UserId == UserId && x.Type == "DesignDrawings"
                             select x;
            int okCount = 0;
            int i = 0;
            int ir = dataInTemp.Count();
            string erreMessage = "";
            foreach (var tempData in dataInTemp)
            {
                if (tempData != null)
                {
                    i++;
                    percent[UserId] = (int)(100 * i / ir);
                    string errInfo = string.Empty;
                    Model.Comprehensive_DesignDrawings Ins = new Model.Comprehensive_DesignDrawings();
                    if (!string.IsNullOrEmpty(tempData.Value1.Trim()))
                    {
                        var cn = cns.Where(x => x.ProfessionalName == tempData.Value1.Trim()).FirstOrDefault();
                        if (cn == null)
                        {
                            errInfo += "专业名称[" + tempData.Value1.Trim() + "]不存在;";
                        }
                        else
                        {
                            Ins.CNProfessionalId = cn.CNProfessionalId;
                        }
                    }
                    else
                    {
                        errInfo += "专业名称为必填项;";
                    }
                    if (!string.IsNullOrEmpty(tempData.Value2.Trim()))
                    {
                        Ins.DesignDrawingsCode = tempData.Value2.Trim();
                    }
                    else
                    {
                        errInfo += "设计图纸编号为必填项;";
                    }
                    if (!string.IsNullOrEmpty(tempData.Value3.Trim()))
                    {
                        string unitIds = string.Empty;
                        string[] reunit = tempData.Value3.Trim().Split(',');
                        foreach (string unitWork in reunit)
                        {
                            var u = unitWorks.Where(x => x.UnitWorkName == unitWork.Trim()).FirstOrDefault();
                            if (u == null)
                            {
                                errInfo += "单位工程名称[" + unitWork.Trim() + "]不存在;";
                            }
                            else
                            {
                                var q = BLL.UnitWorkService.GetUnitWorkByUnitWorkName(this.CurrUser.LoginProjectId, unitWork.Trim()).UnitWorkId;
                                unitIds += q + ",";
                            }
                        }
                        if (!string.IsNullOrEmpty(unitIds))
                        {
                            unitIds = unitIds.Substring(0, unitIds.LastIndexOf(","));
                        }
                        Ins.UnitWorkId = unitIds;
                    }
                    if (!string.IsNullOrEmpty(tempData.Value4.Trim()))
                    {
                        Ins.DesignDrawingsContent = tempData.Value4.Trim();
                    }
                    if (!string.IsNullOrEmpty(tempData.Value5.Trim()))
                    {
                        Ins.Edition = tempData.Value5.Trim();
                    }
                    if (!string.IsNullOrEmpty(tempData.Value6.Trim()))
                    {
                        try
                        {
                            Ins.PageNumber = Funs.GetNewInt(tempData.Value6.Trim());
                            if (Ins.PageNumber == null)
                            {
                                errInfo += "页数[" + tempData.Value6.Trim() + "]格式错误;";
                            }
                        }
                        catch (Exception)
                        {
                            errInfo += "页数[" + tempData.Value6.Trim() + "]格式错误;";
                        }
                    }
                    if (!string.IsNullOrEmpty(tempData.Value7.Trim()))
                    {
                        try
                        {
                            Ins.ReceiveDate = Funs.GetNewDateTime(tempData.Value7.Trim());
                            if (Ins.ReceiveDate == null)
                            {
                                errInfo += "接收日期[" + tempData.Value7.Trim() + "]格式错误;";
                            }
                        }
                        catch (Exception)
                        {
                            errInfo += "接收日期[" + tempData.Value7.Trim() + "]格式错误;";
                        }
                    }
                    if (!string.IsNullOrEmpty(tempData.Value8.Trim()))
                    {
                        try
                        {
                            Ins.SendDate = Funs.GetNewDateTime(tempData.Value8.Trim());
                            if (Ins.SendDate == null)
                            {
                                errInfo += "发送日期[" + tempData.Value8.Trim() + "]格式错误;";
                            }
                        }
                        catch (Exception)
                        {
                            errInfo += "发送日期[" + tempData.Value8.Trim() + "]格式错误;";
                        }
                    }
                    if (!string.IsNullOrEmpty(tempData.Value9.Trim()))
                    {
                        string unitIds = string.Empty;
                        string[] reunit = tempData.Value9.Trim().Split(',');
                        foreach (string unitName in reunit)
                        {
                            var u = units.Where(x => x.UnitName == unitName.Trim()).FirstOrDefault();
                            if (u == null)
                            {
                                errInfo += "接收单位[" + unitName.Trim() + "]不存在;";
                            }
                            else
                            {
                                var q = BLL.UnitService.getUnitByUnitName(unitName.Trim()).UnitId;
                                unitIds += q + ",";
                            }
                        }
                        if (!string.IsNullOrEmpty(unitIds))
                        {
                            unitIds = unitIds.Substring(0, unitIds.LastIndexOf(","));
                        }
                        Ins.ReceiveUnits = unitIds;
                    }
                    if (!string.IsNullOrEmpty(tempData.Value10.Trim()))
                    {
                        Ins.ReceiveMan = tempData.Value10.Trim();
                    }
                    if (!string.IsNullOrEmpty(tempData.Value11.Trim()))
                    {
                        Ins.Remark = tempData.Value11.Trim();
                    }
                    if (!string.IsNullOrEmpty(tempData.Value12.Trim()))
                    {
                        try
                        {
                            Ins.RemarkCode = Convert.ToInt32(tempData.Value12.Trim());
                            if (Ins.RemarkCode == null)
                            {
                                errInfo += "标志编号[" + tempData.Value12.Trim() + "]格式错误;";
                            }
                        }
                        catch (Exception)
                        {
                            errInfo += "标志编号[" + tempData.Value12.Trim() + "]格式错误;";
                        }
                    }
                    else
                    {
                        errInfo += "标志编号为必填项;";
                    }
                    Ins.CompileMan = this.CurrUser.UserId;
                    if (string.IsNullOrEmpty(errInfo)) ////所有信息正确的话 插入数据
                    {
                        Ins.ProjectId = LoginProjectId;
                        var isExitISOValue = oldViewInfos.FirstOrDefault(x => x.RemarkCode == Funs.GetNewIntOrZero(tempData.Value12));
                        if (isExitISOValue != null) ///已存在
                        {
                            Ins.DesignDrawingsId = isExitISOValue.DesignDrawingsId;
                            BLL.DesignDrawingsService.UpdateDesignDrawings(Ins);
                        }
                        else
                        {
                            Ins.Status = BLL.Const.Comprehensive_Compile;
                            Ins.DesignDrawingsId = SQLHelper.GetNewID(typeof(Model.Comprehensive_DesignDrawings));
                            BLL.DesignDrawingsService.AddDesignDrawings(Ins);
                        }
                        BLL.Sys_CQMS_DataInTempService.DeleteDataInTempByDataInTempID(tempData.TempId);
                        okCount++;
                    }
                    if (!string.IsNullOrEmpty(errInfo))
                    {
                        tempData.ToopValue = errInfo;
                        BLL.Sys_CQMS_DataInTempService.UpdateDataInTemp(tempData);
                        erreMessage += errInfo + ";";
                    }
                }
            }
        }
        #endregion
        #region 删除所有数据事件
        /// 
        /// 删除所有数据事件
        /// 
        /// 
        /// 
        protected void btnAllDelete_Click(object sender, EventArgs e)
        {
            //先删除临时表中 该人员以前导入的数据
            BLL.Sys_CQMS_DataInTempService.DeleteDataInTempByProjectIdUserId(this.CurrUser.LoginProjectId, this.CurrUser.UserId, "DesignDrawings");
            this.BindGrid();
            ShowNotify("删除成功!", MessageBoxIcon.Success);
            this.lbDataCout.Text = string.Empty;
        }
        #endregion
        #region 模版导入说明 下载
        /// 
        /// 下载模版
        /// 
        /// 
        /// 
        protected void imgbtnUpload_Click(object sender, EventArgs e)
        {
            string rootPath = Server.MapPath("~/");
            string uploadfilepath = rootPath + Const.DesignDrawingsDataInUrl;
            string filePath = Const.DesignDrawingsDataInUrl;
            string fileName = Path.GetFileName(filePath);
            FileInfo info = new FileInfo(uploadfilepath);
            long fileSize = info.Length;
            Response.ClearContent();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            Response.ContentType = "excel/plain";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AddHeader("Content-Length", fileSize.ToString().Trim());
            Response.TransmitFile(uploadfilepath, 0, fileSize);
            Response.End();
        }
        #endregion
        public static Dictionary percent { get; set; }
        public static Dictionary url { get; set; }
        [System.Web.Services.WebMethod]
        public static int getPercent(string id)
        {
            return percent[id];
        }
    }
}