コード例 #1
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            DataTable ProductPrice = DataMgr.GetTableProPrice();
            DataRow   drproduct;
            bool      fileIsValid = false;

            //如果确认了文件上传,则判断文件类型是否符合要求
            if (this.FileUpload1.HasFile)
            {
                //获取上传文件的后缀名
                String fileExtension = System.IO.Path.GetExtension(this.FileUpload1.FileName).ToLower();//ToLower是将Unicode字符的值转换成它的小写等效项

                //判断文件类型是否符合要求

                if (fileExtension == ".csv")
                {
                    fileIsValid = true;
                }
                else
                {
                    Response.Write("<script type='text/javascript'>window.parent.alert('文件格式不正确!请上传正确格式的文件')</script>");
                    return;
                }
            }
            //如果文件类型符合要求,则用SaveAs方法实现上传,并显示信息
            if (fileIsValid == true)
            {
                try
                {
                    string name = Server.MapPath("~/uploadxls/") + "ProPrice" + DateTime.Now.ToString().Replace("/", "").Replace(" ", "").Replace(":", "").ToString().Replace("-", "") + ".csv";
                    this.FileUpload1.SaveAs(name);
                    if (File.Exists(name))
                    {
                        DataTable dt = ProductBLL.Search.Searcher.OpenCSV(name);
                        if (dt.Rows.Count > 0)
                        {
                            #region    先检测execl 是否存在数据重复,然后在和表对比
                            // 检测CAD(编码)编码列+年份 是否有重复 如果有重复就终止操作并提示重复记录
                            var CADPrice = from row in dt.Rows.Cast <DataRow>()

                                           group row by new { CP_CAD = row["CAD"].ToString(), CP_Yeat = row["year"].ToString(), } into result
                                select new { Peo = result.Key, Count = result.Count() };

                            foreach (var group in CADPrice)
                            {
                                if (Convert.ToInt32(group.Count) > 1)
                                {
                                    sqlCad.Append(group.Peo.CP_CAD + "年份:" + group.Peo.CP_Yeat + ",");
                                }
                            }



                            if (sqlCad.Length == 0)                                                  //导入的Exec编码没有重复项
                            {
                                string Year       = dt.Rows[0]["year"].ToString();                   //导入的年份
                                string username   = userCode();
                                int    number     = Convert.ToInt32(dt.Rows[0]["batch"].ToString()); //次数
                                double NewInprice = 0;                                               //当前进货价
                                double OldInprice = 0;                                               //上一次进货价
                                double profit     = 0;                                               //盈亏额

                                //string str = "PRSP_CAD,PRSP_Year,PRSP_Inprice,PRSP_WHSPrice ";
                                //string table = " (SELECT * FROM   ProductPrice WHERE  ID in (SELECT MAX(id) AS id FROM dbo.ProductPrice where PRSP_Year='" + Year + "' GROUP BY PRSP_CAD  ,PRSP_Year))ProductPrice"; //最后一次导入的价格表

                                DataTable dbProductPrice = hb.getProdatable(
                                    "SELECT dbo.ProductPrice.PRSP_CAD,dbo.ProductPrice.PRSP_Year,PRSP_Inprice,PRSP_WHSPrice,PRSP_number FROM  dbo.ProductPrice  INNER JOIN (SELECT PRSP_CAD ,PRSP_Year, MAX(PRSP_number) AS number FROM  dbo.ProductPrice WHERE  PRSP_Year='" + Year + "' GROUP BY  PRSP_CAD,PRSP_Year) h ON dbo.ProductPrice.PRSP_CAD = h.PRSP_CAD WHERE h.PRSP_Year=dbo.ProductPrice.PRSP_Year AND number=dbo.ProductPrice.PRSP_number");//当前年份最后一次导入数据


                                //string table = "ProductPrice where PRSP_Year='" + Year + "'and  PRSP_number='" + number + " ";
                                // DataTable dbProductPrice = hb.getdate(str, table);//价格表数据库表


                                string    tableinfo  = "baseinfo where type=1";
                                DataTable dbbaseinfo = hb.getdate("ID,basename", tableinfo);                                                                               //返回编码
                                hb.ProExecinset("DELETE dbo.stockprofit_detailed WHERE spdyear='" + Year + "';DELETE dbo.Stock_totalprofit WHERE stpYear='" + Year + "'"); //先删除当前年份库存盈亏明细和汇总表
                                #region 生成盈亏明细



                                for (int i = 0; i < dt.Rows.Count; i++)
                                {
                                    DataRow[] RowID = dbbaseinfo.Select("basename='" + dt.Rows[i]["CAD"].ToString() + "'");

                                    if (RowID.Count() == 0)//编码不存在
                                    {
                                        sqlCad.Append(dt.Rows[i]["CAD"].ToString() + ",");
                                        n = 1;
                                        break;
                                    }
                                    else
                                    {
                                        #region 判断是否需要导入  //批发价和进货价 一样 就不计算库存盈亏

                                        if (number != 1)
                                        {
                                            string    sss    = "PRSP_CAD='" + dt.Rows[i]["CAD"].ToString() + "' and PRSP_WHSPrice='" + dt.Rows[i]["WHSprice"].ToString() + "' and PRSP_Inprice='" + dt.Rows[i]["Inprice"].ToString() + "'";
                                            DataRow[] sssRow = dbProductPrice.Select(sss);
                                            if (sssRow.Count() == 0) //价格不同
                                            {
                                                string    ss   = "PRSP_CAD='" + dt.Rows[i]["CAD"].ToString() + "' and PRSP_Year='" + dt.Rows[i]["year"].ToString() + "'";
                                                DataRow[] sRow = dbProductPrice.Select(ss);

                                                if (sRow.Count() != 0)//和ProductPrice 数据对比 如果价格表已经存在该数据
                                                {
                                                    //sqlCad.Append(dt.Rows[i]["CAD"].ToString() + "年份:" + dt.Rows[i]["year"].ToString() + ",");

                                                    for (int k = 0; k < sRow.Count(); k++)
                                                    {
                                                        NewInprice = Convert.ToDouble(dt.Rows[i]["Inprice"]);
                                                        OldInprice = Convert.ToDouble(sRow[k]["PRSP_Inprice"]);
                                                        profit     = NewInprice - OldInprice;//进货价差额
                                                    }
                                                    hb.ProExecinset("exec pro_stockprofit '" + dt.Rows[i]["CAD"].ToString() + "'," + OldInprice + "," + NewInprice + "," + profit + ",'" + Year + "','" + username + "'");
                                                }

                                                drproduct    = ProductPrice.NewRow();
                                                drproduct[0] = dt.Rows[i]["CAD"].ToString();
                                                drproduct[1] = dt.Rows[i]["WHSprice"].ToString();
                                                drproduct[2] = Convert.ToDecimal(dt.Rows[i]["Inprice"].ToString());
                                                drproduct[3] = dt.Rows[i]["year"].ToString();
                                                drproduct[4] = RowID[0]["ID"].ToString();      //编码ID
                                                drproduct[5] = dt.Rows[i]["batch"].ToString(); //导入次数
                                                ProductPrice.Rows.Add(drproduct);
                                            }
                                        }
                                        else
                                        {
                                            drproduct    = ProductPrice.NewRow();
                                            drproduct[0] = dt.Rows[i]["CAD"].ToString();
                                            drproduct[1] = dt.Rows[i]["WHSprice"].ToString();
                                            drproduct[2] = Convert.ToDecimal(dt.Rows[i]["Inprice"].ToString());
                                            drproduct[3] = dt.Rows[i]["year"].ToString();
                                            drproduct[4] = RowID[0]["ID"].ToString();      //编码ID
                                            drproduct[5] = dt.Rows[i]["batch"].ToString(); //导入次数
                                            ProductPrice.Rows.Add(drproduct);
                                        }
                                        #endregion
                                    }
                                }
                                #endregion

                                #region  执行插入

                                if (sqlCad.Length == 0)//如果没有重复项
                                {
                                    if (DataMgr.BulkToDBProPrice(ProductPrice) && hb.insetpro("INSERT INTO dbo.Stock_totalprofit( stockID, totalprofit,stpYear ) SELECT *,'" + Year + "' FROM (SELECT storckId,SUM(ISNULL(profitprice,0))AS profitprice FROM  dbo.stockprofit_detailed WHERE  spdyear='" + Year + "' GROUP BY storckId)a"))
                                    {
                                        Response.Write("<script type='text/javascript'>window.parent.alert('上传成功');window.location.href='../products/productPrice.aspx';</script>");
                                    }
                                    else
                                    {
                                        Response.Write("<script type='text/javascript'>window.parent.alert('上传失败');</script>");
                                    }
                                }
                                else
                                {
                                    if (n == 0)
                                    {
                                        Response.Write("<script type='text/javascript'>window.parent.alert('上传失败!上传数据和数据库存在重复:" + sqlCad.ToString() + "');</script>");
                                    }
                                    else
                                    {
                                        Response.Write("<script type='text/javascript'>window.parent.alert('上传失败!请在编码列表处维护编码,新编码:" + sqlCad.ToString() + "');</script>");
                                    }


                                    sqlCad.Clear();
                                    ProductPrice.Clear();
                                    return;
                                }

                                #endregion
                            }
                            else
                            {
                                Response.Write("<script type='text/javascript'>window.parent.alert('上传失败!产品价格存在重复:" + sqlCad.ToString() + "');</script>");

                                sqlCad.Clear();
                                ProductPrice.Clear();
                                return;
                            }



                            #endregion
                        }
                        else
                        {
                            Response.Write("<script type='text/javascript'>window.parent.alert('文件无内容');</script>");
                            return;
                        }
                    }
                }
                catch (Exception ex)
                {
                    ex.Message.ToString();
                    Response.Write("<script type='text/javascript'>window.parent.alert('文件内容格式不正确,请核实')</script>");
                    return;
                }
                finally
                {
                    ProductPrice.Dispose();
                }
            }
        }