protected string GetUpWaitTime(string templateid)
    {
        IList <SVM_UploadTemplate> uplist = SVM_UploadTemplateBLL.GetModelList("State=1 AND AccountMonth=" + ddl_AccountMonth.SelectedValue + " AND ID<=" + templateid);

        if (uplist.Count > 0)
        {
            return(DateTime.Now.AddSeconds(30 * uplist.Count).ToString());
        }
        return("");
    }
    protected void bt_ViewRemark_Click(object sender, EventArgs e)
    {
        Button bt = (Button)sender;
        GridViewRow drv = (GridViewRow)bt.NamingContainer;
        int rowIndex = drv.RowIndex;
        int templateid = int.Parse(gv_uptemplate.DataKeys[rowIndex]["SVM_UploadTemplate_ID"].ToString());
        SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL(templateid);

        lb_ErrorInfo.Text = _bll.Model.Remark;
        if (_bll.Model.State > 1 && _bll.Model.Remark != "") BindGrid();
    }
    protected void bt_ViewRemark_Click(object sender, EventArgs e)
    {
        Button                bt         = (Button)sender;
        GridViewRow           drv        = (GridViewRow)bt.NamingContainer;
        int                   rowIndex   = drv.RowIndex;
        int                   templateid = int.Parse(gv_uptemplate.DataKeys[rowIndex]["SVM_UploadTemplate_ID"].ToString());
        SVM_UploadTemplateBLL _bll       = new SVM_UploadTemplateBLL(templateid);

        lb_ErrorInfo.Text = _bll.Model.Remark;
        if (_bll.Model.State > 1 && _bll.Model.Remark != "")
        {
            BindGrid();
        }
    }
    protected void bt_UploadExcel_Click(object sender, EventArgs e)
    {
        #region 保存文件
        if (!FileUpload1.HasFile)
        {
            MessageBox.Show(this.Page, "请选择要上传的文件!");
            return;
        }
        int FileSize = (FileUpload1.PostedFile.ContentLength / 1024);

        if (FileSize > ConfigHelper.GetConfigInt("MaxAttachmentSize"))
        {
            MessageBox.Show(this.Page, "上传的文件不能大于" + ConfigHelper.GetConfigInt("MaxAttachmentSize") +
                "KB!当前上传文件大小为:" + FileSize.ToString() + "KB");
            return;
        }

        //判断文件格式
        string FileName = FileUpload1.PostedFile.FileName;
        FileName = FileName.Substring(FileName.LastIndexOf('\\') + 1);
        FileName = FileName.Substring(0, FileName.LastIndexOf('.'));

        string FileExtName = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(".") + 1).ToLowerInvariant();

        if (FileExtName != "xls" && FileExtName != "csv")
        {
            MessageBox.Show(this, "对不起,必须上传扩展名为xls的Excel文件!");
            return;
        }

        string path = ConfigHelper.GetConfigString("AttachmentPath");
        if (path.StartsWith("~")) path = Server.MapPath(path);
        if (!path.EndsWith("\\")) path = path + "\\";
        path += "ImportExcelSVM\\Upload\\" + ddl_AccountMonth.SelectedValue + "\\";
        if (!Directory.Exists(path)) Directory.CreateDirectory(path);

        path += FileName + "." + FileExtName;

        FileUpload1.SaveAs(path);
        #endregion

        SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL();
        _bll.Model.Name = FileName + "." + FileExtName; ;
        _bll.Model.AccountMonth = int.Parse(ddl_AccountMonth.SelectedValue);
        _bll.Model.State = 1;
        _bll.Model.IsOpponent =MCSTabControl1.SelectedIndex==1? 2:3;
        _bll.Model.InsertStaff = (int)Session["UserID"];
        _bll.Model.UploadTime = DateTime.Now;
        _bll.Model["UserName"] = Session["UserName"].ToString();
        _bll.Add();
        Response.Redirect("ImportHistory.aspx?IsOpponent=" + (MCSTabControl1.SelectedIndex == 1 ? "2" : "3") + "&State=2");
    }
    protected void bt_UploadExcel_Click(object sender, EventArgs e)
    {
        #region 保存文件
        if (!FileUpload1.HasFile)
        {
            MessageBox.Show(this.Page, "请选择要上传的文件!");
            return;
        }
        int FileSize = (FileUpload1.PostedFile.ContentLength / 1024);

        if (FileSize > ConfigHelper.GetConfigInt("MaxAttachmentSize"))
        {
            MessageBox.Show(this.Page, "上传的文件不能大于" + ConfigHelper.GetConfigInt("MaxAttachmentSize") +
                            "KB!当前上传文件大小为:" + FileSize.ToString() + "KB");
            return;
        }

        //判断文件格式
        string FileName = FileUpload1.PostedFile.FileName;
        FileName = FileName.Substring(FileName.LastIndexOf('\\') + 1);
        FileName = FileName.Substring(0, FileName.LastIndexOf('.'));

        string FileExtName = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(".") + 1).ToLowerInvariant();

        if (FileExtName != "xls" && FileExtName != "csv")
        {
            MessageBox.Show(this, "对不起,必须上传扩展名为xls的Excel文件!");
            return;
        }

        string path = ConfigHelper.GetConfigString("AttachmentPath");
        if (path.StartsWith("~"))
        {
            path = Server.MapPath(path);
        }
        if (!path.EndsWith("\\"))
        {
            path = path + "\\";
        }
        path += "ImportExcelSVM\\Upload\\" + Session["UserName"].ToString() + "\\";
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        path += FileName + "." + FileExtName;

        FileUpload1.SaveAs(path);
        #endregion

        SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL();
        _bll.Model.Name          = FileName + "." + FileExtName;;
        _bll.Model.AccountMonth  = ((AC_AccountMonth)ViewState["month"]).ID;
        _bll.Model.State         = 1;
        _bll.Model.IsOpponent    = (int)ViewState["IsOpponent"];
        _bll.Model.InsertStaff   = (int)Session["UserID"];
        _bll.Model.UploadTime    = DateTime.Now;
        _bll.Model["UserName"]   = Session["UserName"].ToString();
        _bll.Model["ClientType"] = ViewState["ClientType"].ToString();
        _bll.Add();
        div_gift.Visible = false;

        //StringBuilder builder = new StringBuilder();
        //builder.Append("alert('请到该页面查询导入状态!');");
        //builder.Append("window.open('ImportHistory.aspx?IsOpponent=" + ViewState["IsOpponent"].ToString() + "&State=2&ClientType=" + ViewState["ClientType"].ToString() + "','_blank')");

        //MessageBox.ResponseScript(this, builder.ToString());
        Response.Redirect("ImportHistory.aspx?IsOpponent=" + ViewState["IsOpponent"].ToString() + "&State=2&ClientType=" + ViewState["ClientType"].ToString());
    }
    protected string GetUpWait(string templateid)
    {
        IList <SVM_UploadTemplate> uplist = SVM_UploadTemplateBLL.GetModelList("State=1 AND AccountMonth=" + ddl_AccountMonth.SelectedValue + " AND ID<=" + templateid);

        return(uplist.Count > 0 ? (uplist.Count).ToString() : "");
    }
        private void ImportGiftProduct(int templateid, string path)
        {
            SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL(templateid);
            if (_bll.Model.State != 1) return;//模版作废
            string message = "";
            string improtmessage = "";
            #region 读取Excel文件
            string ErrorInfo = "";

            int _State = 0;
            object missing = System.Reflection.Missing.Value;
            ApplicationClass ExcelApp = null;
            try
            {
                ExcelApp = new ApplicationClass();
                ExcelApp.Visible = false;
                ExcelApp.DisplayAlerts = false;

                Workbook workbook1 = null;
                Worksheet worksheet1 = null, worksheet2 = null, worksheet3 = null;

                try
                {
                    workbook1 = ExcelApp.Workbooks.Open(path, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

                    #region 验证工作表数据格式
                    if (workbook1.Worksheets.Count != 3)
                    {
                        message += "Excel表格中必须且只能有3张工作表!";
                        goto End;
                    }

                    worksheet1 = (Worksheet)workbook1.Worksheets[1];
                    worksheet2 = (Worksheet)workbook1.Worksheets[2];
                    worksheet3 = (Worksheet)workbook1.Worksheets[3];

                    if (worksheet1.Name != "成品赠品")
                    {
                        ErrorInfo += "Excel表格中第1个工作表名称必须为【成品赠品】!";
                        goto End;
                    }
                    if (worksheet2.Name != "试用装")
                    {
                        ErrorInfo += "Excel表格中第2个工作表名称必须为【试用装】!";
                        goto End;
                    }

                    if (worksheet3.Name != "高值促销品")
                    {
                        ErrorInfo += "Excel表格中第3个工作表名称必须为【高值促销品】!";
                        goto End;
                    }
                    if (_bll.Model["ClientType"] == "2")
                    {
                        if (!VerifyDIWorkSheet(worksheet1))
                        {
                            ErrorInfo += "【成品赠品】工作表表头(1~5列)错误!";
                            goto End;
                        }
                        if (!VerifyDIWorkSheet(worksheet2))
                        {
                            ErrorInfo += "【试用装】工作表表头(1~5列)错误!";
                            goto End;
                        }

                        if (!VerifyDIWorkSheet(worksheet3))
                        {
                            ErrorInfo += "【高值促销品】工作表表头(1~5列)错误!";
                            goto End;
                        }
                    }
                    else
                    {
                        if (!VerifyWorkSheet(worksheet1, 5))
                        {
                            ErrorInfo += "【成品赠品】工作表表头(1~5列)错误!";
                            goto End;
                        }

                        if (!VerifyWorkSheet(worksheet2, 5))
                        {
                            ErrorInfo += "【试用装】工作表表头(1~5列)错误!";
                            goto End;
                        }

                        if (!VerifyWorkSheet(worksheet3, 5))
                        {
                            ErrorInfo += "【高值促销品】工作表表头(1~5列)错误!";
                            goto End;
                        }
                    }
                    #endregion

                    #region 读取Excel表格
                    IList<PDT_Product> productlists = PDT_ProductBLL.GetModelList("Brand IN (SELECT ID FROM dbo.PDT_Brand WHERE IsOpponent='9') AND State=1 AND ApproveFlag=1 ORDER BY ISNULL(SubUnit,999999),Code");
                    AC_AccountMonth month = new AC_AccountMonthBLL(_bll.Model.AccountMonth).Model;
                    improtmessage += ImportGifts(worksheet1, "Excel批量导入本品赠品", month, _bll.Model.InsertStaff, productlists, out _State);
                    if (_State != 0) _bll.Model.State = _State;
                    improtmessage += ImportGifts(worksheet2, "Excel批量导入试用装赠品", month, _bll.Model.InsertStaff, productlists, out _State);
                    if (_State != 0) _bll.Model.State = _State;
                    improtmessage += ImportGifts(worksheet3, "Excel批量导入高值促销品", month, _bll.Model.InsertStaff, productlists, out _State);
                    if (_State != 0) _bll.Model.State = _State;
                    #endregion
                End:
                    ;
                }
                catch (ThreadAbortException exception3)
                {
                    return;
                }
                catch (System.Exception err)
                {
                    string error = "Message:" + err.Message + "<br/>" + "Source:" + err.Source + "<br/>" +
                        "StackTrace:" + err.StackTrace + "<br/>";

                    message += "系统错误-4!" + err.Message;
                }
                finally
                {
                    if (workbook1 != null) workbook1.Close(false, missing, missing);

                    if (worksheet1 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet1);
                    if (worksheet2 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet2);
                    if (worksheet3 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet3);
                    if (workbook1 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook1);

                    worksheet1 = null;
                    worksheet2 = null;
                    worksheet3 = null;
                    workbook1 = null;
                }
            }
            catch (ThreadAbortException exception3)
            {

                return;
            }
            catch (System.Exception err)
            {
                string error = "Message:" + err.Message + "<br/>" + "Source:" + err.Source + "<br/>" +
                    "StackTrace:" + err.StackTrace + "<br/>";
                message += "系统错误-5!" + err.Message;
            }
            finally
            {
                if (ExcelApp != null)
                {
                    try
                    {
                        ExcelApp.Workbooks.Close();
                        ExcelApp.Quit();
                    }
                    catch (System.Exception err)
                    {
                        string error = "Message:" + err.Message + "<br/>" + "Source:" + err.Source + "<br/>" +
                            "StackTrace:" + err.StackTrace + "<br/>";
                        message += "系统错误-6,Excel宏报错,请确认文件打开不报错再上传!" + err.Message;
                        KillProcess();
                    }

                    System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
                    ExcelApp = null;
                }
                GC.Collect();

                if (ErrorInfo != "")
                {
                    message += "对不起,Excel文件打开错误,请确认格式是否正确。错误提示:" + ErrorInfo;
                }

            }
            if (_bll.Model.State == 1)
                _bll.Model.State = message != "" ? 3 : 2;
            _bll.Model.ImprotTime = DateTime.Now;
            _bll.Model.Remark = message != "" ? message : improtmessage;
            _bll.Update();
            string filename = path.Substring(path.LastIndexOf('\\') + 1);
            SendMessage("导入赠品进货", message != "" ? filename + "-" + message : filename + "导入操作成功!");
            #endregion
        }
        public void UploadExcel()
        {
            while (bIsRunning)
            {
                try
                {

                    #region 获取最迟的销量月份
                    int JXCDelayDays = ConfigHelper.GetConfigInt("JXCDelayDays");
                    AC_AccountMonth month = new AC_AccountMonthBLL(AC_AccountMonthBLL.GetMonthByDate(DateTime.Now.AddDays(-JXCDelayDays))).Model;
                    #endregion
                    IList<SVM_UploadTemplate> uplists = SVM_UploadTemplateBLL.GetModelList("AccountMonth=" + month.ID + " AND State=1");
                    if (uplists.Count == 0)
                    {
                        System.Threading.Thread.Sleep(2000);
                        continue;
                    }

                    foreach (SVM_UploadTemplate m in uplists)
                    {
                        dtHeartTime = DateTime.Now;
                        ImportTemplateID = m.ID;

                        try
                        {
                            #region 组织文件路径及文件名
                            string path = ConfigHelper.GetConfigString("AttachmentPath");
                            if (!path.EndsWith("\\")) path = path + "\\";
                            if (m.IsOpponent != 2 && m.IsOpponent != 3)
                            {
                                path += "ImportExcelSVM\\Upload\\" + m["UserName"] + "\\";
                            }
                            else
                            {
                                path += "ImportExcelSVM\\Upload\\" + m.AccountMonth.ToString() + "\\";
                            }

                            string filename = m.Name;
                            path += filename;
                            #endregion
                            SendMessage("当前处理记录", m.Name);
                            switch (m.IsOpponent)
                            {
                                case 1:
                                    this.ImportProduct(m.ID, path);
                                    break;
                                case 2:
                                case 3:
                                    this.ImportKeyProduct(m.ID, path);
                                    break;
                                case 9:
                                    this.ImportGiftProduct(m.ID, path);
                                    break;
                            }
                            this.ImportTemplateID = 0;

                        }
                        catch (System.Exception err)
                        {
                            SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL(m.ID);
                            _bll.Model.State = 3;
                            _bll.Model.Remark = "导入出错,异常:" + err.Message;
                            _bll.Model.ImprotTime = DateTime.Now;
                            _bll.Update();
                            this.ImportTemplateID = 0;
                        }
                    }
                }
                catch (ThreadAbortException e)
                {
                    this.SendMessage("ThreadAbortException", this.ImportTemplateID.ToString() + e.ToString());
                    break;
                }

            }
        }
        private void ThreadCheckHeartTime()
        {
            while (bIsRunning)
            {
                int TimeLimit = ConfigHelper.GetConfigInt("TimeLimit");
                if (dtHeartTime < DateTime.Now.AddSeconds(-TimeLimit) && ImportTemplateID > 0)
                {
                    SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL(ImportTemplateID);
                    _bll.Model.State = 3;
                    _bll.Model.Remark = "导入出错,导入超时,请确认文件没有损坏或病毒再上传!";
                    _bll.Model.ImprotTime = DateTime.Now;
                    _bll.Update();

                    if (th_ImportService != null && th_ImportService.ThreadState == System.Threading.ThreadState.Running)
                    {
                        this.ImportTemplateID = 0;
                        th_ImportService.Abort();
                        th_ImportService.Join(5000);
                        KillProcess();

                        th_ImportService = new Thread(new ThreadStart(UploadExcel));
                        th_ImportService.Start();
                    }
                }
                Thread.Sleep(50000);
            }
        }
        private void ImportProduct(int templateid, string path)
        {
            SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL(templateid);
            if (_bll.Model.State != 1) return;//模版作废
            string message = "";
            string improtmessage = "";
            AC_AccountMonth month = new AC_AccountMonthBLL(_bll.Model.AccountMonth).Model;
            DateTime minday = month.BeginDate;
            DateTime maxday = DateTime.Today < month.EndDate ? DateTime.Today : month.EndDate;
            int _State = 0;
            #region 读取Excel文件
            string ErrorInfo = "";
            object missing = System.Reflection.Missing.Value;
            ApplicationClass ExcelApp = null;
            try
            {
                ExcelApp = new ApplicationClass();
                ExcelApp.Visible = false;
                ExcelApp.DisplayAlerts = false;

                Workbook workbook1 = null;
                Worksheet worksheet1 = null, worksheet2 = null;

                try
                {
                    workbook1 = ExcelApp.Workbooks.Open(path, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                    #region 验证工作表数据格式
                    switch (_bll.Model["ClientType"])
                    {
                        case "2":
                            if (workbook1.Worksheets.Count != 1)
                            {
                                ErrorInfo += "Excel表格中必须且只能有1张工作表,请并检查宏是否有问题!";
                                goto End;
                            }
                            break;
                        case "3":
                            if (workbook1.Worksheets.Count != 2)
                            {
                                ErrorInfo += "Excel表格中必须且只能有2张工作表,请并检查宏是否有问题!";
                                goto End;
                            }
                            break;
                    }
                    worksheet1 = (Worksheet)workbook1.Worksheets[1];
                    if (_bll.Model["ClientType"] == "2")
                    {
                        if (worksheet1.Name != "分销商进货")
                        {
                            ErrorInfo += "Excel表格中第1个工作表名称必须为【分销商进货】!";
                            goto End;
                        }
                        if (!VerifyDIWorkSheet(worksheet1))
                        {

                            ErrorInfo += "Excel表格中第1个工作表名称必须为【零售商进货】!";
                            goto End;
                        }

                    }
                    else
                    {
                        worksheet2 = (Worksheet)workbook1.Worksheets[2];
                        if (worksheet1.Name != "零售商进货")
                        {
                            ErrorInfo += "Excel表格中第1个工作表名称必须为【零售商进货】!";
                            goto End;
                        }
                        if (worksheet2.Name != "零售商销货")
                        {
                            ErrorInfo += "Excel表格中第2个工作表名称必须为【零售商销货】!";
                            goto End;
                        }

                        if (!VerifyWorkSheet(worksheet1, 5))
                        {
                            ErrorInfo += "零售商进货工作表表头(1~5列)错误!";
                            goto End;
                        }

                        if (!VerifyWorkSheet(worksheet2, 7))
                        {
                            ErrorInfo += "零售商销货工作表表头(1~7列)错误!";
                            goto End;
                        }

                    }

                    string ParamValue = Addr_OrganizeCityParamBLL.GetValueByType(1, 26);
                    ParamValue = string.IsNullOrEmpty(ParamValue) ? "0" : ParamValue;
                    ParamValue = ParamValue.EndsWith(",") ? ParamValue.Remove(ParamValue.Length - 1) : ParamValue;

                    IList<PDT_Product> productlists = PDT_ProductBLL.GetModelList("MCS_SYS.dbo.UF_Spilt(ExtPropertys,'|',28)!='1' AND Brand IN (SELECT ID FROM dbo.PDT_Brand WHERE IsOpponent='1')  AND State=1 AND ApproveFlag=1   ORDER BY ISNULL(SubUnit,999999),Code");

                    if (_bll.Model["ClientType"] == "3")
                    {
                        productlists = PDT_ProductBLL.GetModelList("MCS_SYS.dbo.UF_Spilt(ExtPropertys,'|',28)!='1' AND Brand NOT IN(" + ParamValue + ") AND Brand IN (SELECT ID FROM dbo.PDT_Brand WHERE IsOpponent='1')" + " AND MCS_SYS.dbo.UF_Spilt2('MCS_PUB.dbo.PDT_Product',ExtPropertys,'IntegralPoints')=0" +
                            " AND State=1 AND ApproveFlag=1   ORDER BY ISNULL(SubUnit,999999),Code");
                    }
                    for (int i = 0; i < productlists.Count; i++)
                    {
                        if (((Range)worksheet1.Cells[1, 6 + i]).Text.ToString() != productlists[i].ShortName)
                        {
                            ErrorInfo += (_bll.Model["ClientType"] == "3" ? "零售商" : "分销商") + "进货工作表表头,(" + (6 + i).ToString() + "列)产品名称错误!必须为:" + productlists[i].ShortName;
                            goto End;
                        }
                        if (_bll.Model["ClientType"] == "3" && ((Range)worksheet2.Cells[1, 8 + i]).Text.ToString() != productlists[i].ShortName)
                        {
                            ErrorInfo += "零售商进货工作表表头,(" + (8 + i).ToString() + "列)产品名称错误!必须为:" + productlists[i].ShortName + ";错误表头为" + ((Range)worksheet2.Cells[1, 8 + i]).Text.ToString();
                            goto End;
                        }
                    }
                    #endregion

                    improtmessage += DoImportProduct(worksheet1, _bll.Model.AccountMonth, _bll.Model.InsertStaff, 6, productlists, out _State);
                    if (_State != 0) _bll.Model.State = _State;
                    if (_bll.Model["ClientType"] != "2")
                    {
                        improtmessage += DoImportProduct(worksheet2, _bll.Model.AccountMonth, _bll.Model.InsertStaff, 8, productlists, out _State);
                        if (_State != 0) _bll.Model.State = _State;
                    }

                End:
                    ;
                }
                catch (ThreadAbortException exception3)
                {
                    return;
                }
                catch (System.Exception err)
                {
                    string error = "Message:" + err.Message + "<br/>" + "Source:" + err.Source + "<br/>" +
                        "StackTrace:" + err.StackTrace + "<br/>";

                    message += "系统错误-4!" + err.Message;
                }
                finally
                {
                    if (workbook1 != null) workbook1.Close(false, missing, missing);

                    if (worksheet1 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet1);

                    if (_bll.Model["ClientType"] != "2" && worksheet2 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet2);

                    if (workbook1 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook1);

                    worksheet1 = null;
                    if (_bll.Model["ClientType"] != "2")
                    {
                        worksheet2 = null;
                    }
                    workbook1 = null;
                }
            }
            catch (ThreadAbortException exception3)
            {

                return;
            }
            catch (System.Exception err)
            {
                message += "系统错误-5!" + err.Message;
            }
            finally
            {
                if (ExcelApp != null)
                {
                    try
                    {
                        ExcelApp.Workbooks.Close();
                        ExcelApp.Quit();

                        System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
                        ExcelApp = null;
                    }
                    catch (System.Exception err)
                    {
                        string error = "Message:" + err.Message + "<br/>" + "Source:" + err.Source + "<br/>" +
                            "StackTrace:" + err.StackTrace + "<br/>";
                        message += "系统错误-6,Excel宏报错,请确认文件打开不报错再上传!" + err.Message;
                        KillProcess();
                    }

                }
                GC.Collect();
                //GC.WaitForPendingFinalizers();

                if (ErrorInfo != "")
                {
                    message += "对不起,Excel文件打开错误,请确认格式是否正确。错误提示:" + ErrorInfo;
                }

            }
            #endregion

            if (_bll.Model.State == 1)
            {
                _bll.Model.State = message != "" ? 3 : 2;
            }
            _bll.Model.Remark = message != "" ? message : improtmessage;
            _bll.Model.ImprotTime = DateTime.Now;
            _bll.Update();
            string filename = path.Substring(path.LastIndexOf('\\') + 1);
            SendMessage("导入成品进销", message != "" ? filename + "-" + message : filename + "导入操作成功!");
        }
        private void ImportKeyProduct(int templateid, string path)
        {
            ThreadAbortException e;
            Exception err;
            string error;
            SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL(templateid);
            if (_bll.Model.State != 1)
            {
                return;
            }
            string message = "";
            string improtmessage = "";
            AC_AccountMonth month = new AC_AccountMonthBLL(_bll.Model.AccountMonth).Model;
            string ErrorInfo = "";
            object missing = Missing.Value;
            ApplicationClass ExcelApp = null;
            try
            {
                ExcelApp = new ApplicationClass
                {
                    Visible = false,
                    DisplayAlerts = false
                };
                Workbook workbook1 = null;
                Worksheet worksheet1 = null;
                try
                {
                    PDT_Product product;
                    workbook1 = ExcelApp.Workbooks.Open(path, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                    worksheet1 = (Worksheet)workbook1.Worksheets[1];
                    if (workbook1.Worksheets.Count != 1)
                    {
                        improtmessage = improtmessage + "Excel表格中必须且只能有1张工作表,请并检查宏是否有问题!";
                        goto End;
                    }

                    switch (_bll.Model.IsOpponent)
                    {
                        case 2:
                            if (worksheet1.Name != "重点品项")
                            {
                                improtmessage = improtmessage + "Excel表格中第1个工作表名称必须为【重点品项】!";
                                goto End;
                            }
                            if (!this.VerifyKeyProductSheet(worksheet1))
                            {
                                improtmessage = improtmessage + "工作表表头(1~7列)错误!";
                                goto End;
                            }
                            break;
                        case 3:
                            if (worksheet1.Name != "月度费率")
                            {
                                improtmessage = improtmessage + "Excel表格中第1个工作表名称必须为【月度费率】!";
                                goto End;
                            }
                            if (!this.VerifyFeeRateSheet(worksheet1))
                            {
                                improtmessage = improtmessage + "工作表表头(1~6列)错误!";
                                goto End;
                            }
                            break;
                    }

                    int cloumn = 5;
                    int sellinrow = 1;
                    DateTime maxday = DateTime.Today < month.EndDate ? DateTime.Today : month.EndDate;

                    improtmessage += "<br/>";
                    improtmessage += "<span style='color: Red'>-------------------------------------------------------------------------</span><br/>";
                    improtmessage += "<span style='color: Red'>---------------------------" + (_bll.Model.IsOpponent == 2 ? "办事处重点品项导入" : "办事处费率导入") + "----------------------------</span><br/>";

                    #region 读取Excel表格
                    while (true)
                    {

                        cloumn = 5;
                        sellinrow++;

                        if (((Range)worksheet1.Cells[sellinrow, 2]).Value2 == null)
                        {
                            break;
                        }

                        int cityid = 0;
                        if (!int.TryParse(((Range)worksheet1.Cells[sellinrow, 2]).Value2.ToString(), out cityid))
                        {
                            continue;
                        }
                        #region 验证数据
                        Addr_OrganizeCity _city = new Addr_OrganizeCityBLL(cityid).Model;
                        if (_city == null || _city.Name != ((Range)worksheet1.Cells[sellinrow, 3]).Text.ToString())
                        {

                            improtmessage += "<span style='color: Red'>办事处ID号:" + ((Range)worksheet1.Cells[sellinrow, 2]).Text.ToString() + "与办事处名称不匹配!</span><br/>";

                            _bll.Model.State = 4;
                            continue;
                        }
                        if (((Range)worksheet1.Cells[sellinrow, 4]).Text.ToString() != month.Name)
                        {
                            improtmessage += "<span style='color: Red'>办事处ID号:" + ((Range)worksheet1.Cells[sellinrow, 2]).Text.ToString() + ",归属月份必须为【" + month.Name + "】</span><br/>";

                            _bll.Model.State = 4;
                            continue;
                        }
                        #endregion
                        #region 办事处目标额
                        SVM_OrganizeTargetBLL bll = null;
                        IList<SVM_OrganizeTarget> _targetlist = SVM_OrganizeTargetBLL.GetModelList("OrganizeCity=" + cityid.ToString() + "AND AccountMonth=" + month.ID.ToString());
                        if (_targetlist.Count > 0)
                        {
                            if (_targetlist.FirstOrDefault<SVM_OrganizeTarget>(p => (p.ApproveFlag == 1)) != null)
                            {
                                improtmessage = improtmessage + "<span style='color: Red'>ID号:" + ((Range)worksheet1.Cells[sellinrow, 2]).Text.ToString() + "当月的重点品项已审核,不可再次导入!</span><br/>";
                                continue;
                            }
                            if (_targetlist.Count == 1)
                            {
                                bll = new SVM_OrganizeTargetBLL(_targetlist[0].ID);
                                if (_bll.Model.IsOpponent == 2)
                                {
                                    bll.Items.Clear();
                                }
                            }
                        }
                        if (bll == null)
                        {
                            bll = new SVM_OrganizeTargetBLL
                            {
                                Model = { OrganizeCity = cityid, AccountMonth = month.ID, ApproveFlag = 2 }
                            };
                        }

                        decimal amount = 0M;
                        if (_bll.Model.IsOpponent == 2)
                        {
                            decimal.TryParse(((Range)worksheet1.Cells[sellinrow, cloumn]).Value2.ToString(), out amount);
                            if (amount != 0M)
                            {
                                bll.Model.SalesTarget = amount;
                            }
                            else if ((this.trim(((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString()) != "") && (((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString() != "0"))
                            {
                                improtmessage += "<span style='color: Red'>ID号:" + cityid.ToString() + "," + _city.Name + "的重点品项未能导入,办事处业绩目标额:" + ((Range)worksheet1.Cells[1, cloumn]).Text + "金额填写错误";
                                _bll.Model.State = 4;
                                continue;
                            }
                            ++cloumn;
                            amount = 0M;
                        }
                        else
                        {
                            decimal.TryParse(((Range)worksheet1.Cells[sellinrow, cloumn]).Value2.ToString(), out amount);
                            if (amount != 0M)
                            {
                                bll.Model.FeeRateTarget = amount;
                            }
                            else if ((this.trim(((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString()) != "") && (((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString() != "0"))
                            {
                                improtmessage += "<span style='color: Red'>ID号:" + cityid.ToString() + "," + _city.Name + "的重点品项未能导入,办事处月度费率目标:" + ((Range)worksheet1.Cells[1, cloumn]).Text + "金额填写错误";
                                _bll.Model.State = 4;
                                continue;
                            }

                            amount = 0M;
                            decimal.TryParse(((Range)worksheet1.Cells[sellinrow, ++cloumn]).Value2.ToString(), out amount);
                            if (amount != 0M)
                            {
                                bll.Model.FeeYieldRate = amount;
                            }
                            else if ((this.trim(((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString()) != "") && (((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString() != "0"))
                            {
                                improtmessage += "<span style='color: Red'>ID号:" + cityid.ToString() + "," + _city.Name + "的重点品项未能导入,办事处月度费率达成:" + ((Range)worksheet1.Cells[1, cloumn]).Text + "金额填写错误";
                                _bll.Model.State = 4;
                                continue;
                            }
                        }
                        #endregion
                        IList<SVM_KeyProductTarget_Detail> details = new List<SVM_KeyProductTarget_Detail>();

                        bool wrongflag = false;//判断导入数量是否正常(除空导致的异常)
                        while (true)
                        {

                            amount = 0M;

                            if (((Range)worksheet1.Cells[1, cloumn]).Text.ToString() == string.Empty)
                            {
                                break;
                            }

                            IList<PDT_Product> products = PDT_ProductBLL.GetModelList("ShortName='" + ((Range)worksheet1.Cells[1, cloumn]).Text + "' AND State=1");
                            if (products.Count > 0)
                            {
                                product = products[0];
                            }
                            else
                            {
                                improtmessage += "<span style='color: Red'>产品名称:" + ((Range)worksheet1.Cells[1, cloumn]).Text + "在产品列表中不存在!</span><br/>";
                                _bll.Model.State = 4;
                                cloumn++;
                                continue;
                            }
                            if ((product != null) && (((Range)worksheet1.Cells[sellinrow, cloumn]).Value2 != null))
                            {
                                decimal.TryParse(((Range)worksheet1.Cells[sellinrow, cloumn]).Value2.ToString(), out amount);
                                if (amount != 0M)
                                {
                                    SVM_KeyProductTarget_Detail detail = new SVM_KeyProductTarget_Detail
                                    {
                                        Product = product.ID,
                                        Amount = amount
                                    };
                                    details.Add(detail);
                                }
                                else if ((this.trim(((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString()) != "") && (((Range)worksheet1.Cells[sellinrow, cloumn]).Text.ToString() != "0"))
                                {
                                    wrongflag = true;
                                    break;
                                }
                            }

                        }
                        if (wrongflag && _bll.Model.IsOpponent == 2)
                        {
                            improtmessage += "<span style='color: Red'>ID号:" + cityid.ToString() + "," + _city.Name + "的重点品项未能导入,品项名称:" + ((Range)worksheet1.Cells[1, cloumn]).Text + "金额填写错误";
                            _bll.Model.State = 4;
                            continue;
                        }
                        #region 更新销量至数据库
                        if (bll.Model.ID > 0)
                        {
                            switch (_bll.Model.IsOpponent)
                            {
                                case 2:
                                    if (details.Count > 0)
                                    {
                                        bll.DeleteDetail();     //先清除原先导入的数据
                                        bll.Model.UpdateStaff = _bll.Model.InsertStaff;
                                        bll.Items = details;
                                        bll.AddDetail();

                                        bll.Update();
                                        improtmessage += "<span style='color: Blue'>ID号:" + cityid.ToString() + "," + _city.Name + " 的重点品项被成功更新!</span><br/>";

                                    }
                                    break;
                                case 3:
                                    bll.Update();
                                    improtmessage += "<span style='color: Blue'>ID号:" + cityid.ToString() + "," + _city.Name + " 的办事处费率被成功更新!</span><br/>";
                                    break;

                            }

                        }
                        else
                        {
                            switch (_bll.Model.IsOpponent)
                            {
                                case 2:
                                    if (details.Count > 0)
                                    {
                                        bll.Items = details;
                                        if (bll.Add() > 0)
                                        {
                                            foreach (SVM_OrganizeTarget m in _targetlist)
                                            {
                                                bll = new SVM_OrganizeTargetBLL(m.ID);
                                                bll.DeleteDetail();
                                                bll.Delete();
                                            }
                                        }
                                        improtmessage += "<span style='color: Black'>ID号:" + cityid.ToString() + "," + _city.Name + " 的重点品项已成功导入!</span><br/>";
                                    }
                                    break;
                                case 3:
                                    bll.Add();
                                    improtmessage += "<span style='color: Black'>ID号:" + cityid.ToString() + "," + _city.Name + " 的办事处费率已成功导入!</span><br/>";
                                    break;
                            }

                        }

                        #endregion
                    }
                    #endregion
                End:
                    ;
                }
                catch (ThreadAbortException exception1)
                {
                    e = exception1;
                    return;
                }
                catch (Exception exception2)
                {
                    err = exception2;
                    error = "Message:" + err.Message + "<br/>Source:" + err.Source + "<br/>StackTrace:" + err.StackTrace + "<br/>";
                    message = message + "系统错误-4!" + err.Message;
                }
                finally
                {
                    if (workbook1 != null)
                    {
                        workbook1.Close(false, missing, missing);
                    }
                    if (worksheet1 != null)
                    {
                        Marshal.ReleaseComObject(worksheet1);
                    }
                    if (workbook1 != null)
                    {
                        Marshal.ReleaseComObject(workbook1);
                    }
                    worksheet1 = null;
                    workbook1 = null;
                }
            }
            catch (ThreadAbortException exception3)
            {
                e = exception3;
                return;
            }
            catch (Exception exception4)
            {
                err = exception4;
                message = message + "系统错误-5!" + err.Message;
            }
            finally
            {
                if (ExcelApp != null)
                {
                    try
                    {
                        ExcelApp.Workbooks.Close();
                        ExcelApp.Quit();
                        Marshal.ReleaseComObject(ExcelApp);
                        ExcelApp = null;
                    }
                    catch (Exception exception5)
                    {
                        err = exception5;
                        error = "Message:" + err.Message + "<br/>Source:" + err.Source + "<br/>StackTrace:" + err.StackTrace + "<br/>";
                        message = message + "系统错误-6,Excel宏报错,请确认文件打开不报错再上传!" + err.Message;
                    }
                }
                GC.Collect();
                if (ErrorInfo != "")
                {
                    message = message + "对不起,Excel文件打开错误,请确认格式是否正确。错误提示:" + ErrorInfo;
                }
            }

            if (_bll.Model.State == 1)
            {
                _bll.Model.State = (message != "") ? 3 : 2;
            }
            _bll.Model.Remark = (message != "") ? message : improtmessage;
            _bll.Model.ImprotTime = DateTime.Now;
            _bll.Update();
            string filename = path.Substring(path.LastIndexOf('\\') + 1);
            this.SendMessage("导入办事处重点品项", (message != "") ? (filename + "-" + message) : (filename + "导入操作成功!"));
        }
    protected void bt_UploadExcel_Click(object sender, EventArgs e)
    {
        #region 保存文件
        if (!FileUpload1.HasFile)
        {
            MessageBox.Show(this.Page, "请选择要上传的文件!");
            return;
        }
        int FileSize = (FileUpload1.PostedFile.ContentLength / 1024);

        if (FileSize > ConfigHelper.GetConfigInt("MaxAttachmentSize"))
        {
            MessageBox.Show(this.Page, "上传的文件不能大于" + ConfigHelper.GetConfigInt("MaxAttachmentSize") +
                "KB!当前上传文件大小为:" + FileSize.ToString() + "KB");
            return;
        }

        //判断文件格式
        string FileName = FileUpload1.PostedFile.FileName;
        FileName = FileName.Substring(FileName.LastIndexOf('\\') + 1);
        FileName = FileName.Substring(0, FileName.LastIndexOf('.'));

        string FileExtName = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(".") + 1).ToLowerInvariant();

        if (FileExtName != "xls" &&FileExtName != "csv")
        {
            MessageBox.Show(this, "对不起,必须上传扩展名为xls的Excel文件!");
            return;
        }

        string path = ConfigHelper.GetConfigString("AttachmentPath");
        if (path.StartsWith("~")) path = Server.MapPath(path);
        if (!path.EndsWith("\\")) path = path + "\\";
        path += "ImportExcelSVM\\Upload\\" + Session["UserName"].ToString() + "\\";
        if (!Directory.Exists(path)) Directory.CreateDirectory(path);

        path += FileName + "." + FileExtName;

        FileUpload1.SaveAs(path);
        #endregion

        SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL();
        _bll.Model.Name = FileName + "." + FileExtName; ;
        _bll.Model.AccountMonth = ((AC_AccountMonth)ViewState["month"]).ID;
        _bll.Model.State = 1;
        _bll.Model.IsOpponent = (int)ViewState["IsOpponent"];
        _bll.Model.InsertStaff = (int)Session["UserID"];
        _bll.Model.UploadTime = DateTime.Now;
        _bll.Model["UserName"] = Session["UserName"].ToString();
        _bll.Model["ClientType"] = ViewState["ClientType"].ToString();
        _bll.Add();
        div_gift.Visible = false;

        //StringBuilder builder = new StringBuilder();
        //builder.Append("alert('请到该页面查询导入状态!');");
        //builder.Append("window.open('ImportHistory.aspx?IsOpponent=" + ViewState["IsOpponent"].ToString() + "&State=2&ClientType=" + ViewState["ClientType"].ToString() + "','_blank')");

        //MessageBox.ResponseScript(this, builder.ToString());
        Response.Redirect("ImportHistory.aspx?IsOpponent=" + ViewState["IsOpponent"].ToString() + "&State=2&ClientType=" + ViewState["ClientType"].ToString());
    }
    protected void bt_UploadExcel_Click(object sender, EventArgs e)
    {
        #region 保存文件
        if (!FileUpload1.HasFile)
        {
            MessageBox.Show(this.Page, "请选择要上传的文件!");
            return;
        }
        int FileSize = (FileUpload1.PostedFile.ContentLength / 1024);

        if (FileSize > ConfigHelper.GetConfigInt("MaxAttachmentSize"))
        {
            MessageBox.Show(this.Page, "上传的文件不能大于" + ConfigHelper.GetConfigInt("MaxAttachmentSize") +
                            "KB!当前上传文件大小为:" + FileSize.ToString() + "KB");
            return;
        }

        //判断文件格式
        string FileName = FileUpload1.PostedFile.FileName;
        FileName = FileName.Substring(FileName.LastIndexOf('\\') + 1);
        FileName = FileName.Substring(0, FileName.LastIndexOf('.'));

        string FileExtName = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(".") + 1).ToLowerInvariant();

        if (FileExtName != "xls" && FileExtName != "csv")
        {
            MessageBox.Show(this, "对不起,必须上传扩展名为xls的Excel文件!");
            return;
        }

        string path = ConfigHelper.GetConfigString("AttachmentPath");
        if (path.StartsWith("~"))
        {
            path = Server.MapPath(path);
        }
        if (!path.EndsWith("\\"))
        {
            path = path + "\\";
        }
        path += "ImportExcelSVM\\Upload\\" + ddl_AccountMonth.SelectedValue + "\\";
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        path += FileName + "." + FileExtName;

        FileUpload1.SaveAs(path);
        #endregion

        SVM_UploadTemplateBLL _bll = new SVM_UploadTemplateBLL();
        _bll.Model.Name         = FileName + "." + FileExtName;;
        _bll.Model.AccountMonth = int.Parse(ddl_AccountMonth.SelectedValue);
        _bll.Model.State        = 1;
        _bll.Model.IsOpponent   = MCSTabControl1.SelectedIndex == 1? 2:3;
        _bll.Model.InsertStaff  = (int)Session["UserID"];
        _bll.Model.UploadTime   = DateTime.Now;
        _bll.Model["UserName"]  = Session["UserName"].ToString();
        _bll.Add();
        Response.Redirect("ImportHistory.aspx?IsOpponent=" + (MCSTabControl1.SelectedIndex == 1 ? "2" : "3") + "&State=2");
    }