protected void btnUpload_Click(object sender, EventArgs e)
    {
        try
        {
            HSSFWorkbook excel = new HSSFWorkbook(fileUpload.PostedFile.InputStream);
            Sheet        sheet = excel.GetSheetAt(0);
            IEnumerator  rows  = sheet.GetRowEnumerator();
            ImportHelper.JumpRows(rows, 10);
            //发货路线	窗口时间 外部订单号 参考订单号 物料号	订单数

            #region 列定义
            int colFlow       = 1; //发货路线
            int colExtOrderNo = 2; //外部订单号
            int colItem       = 3; // 物料号
            int colQty        = 4; //订单数
            #endregion
            int rowCount = 10;
            //IList<Exception> exceptionList = new List<Exception>();
            //Exception exceptio = new Exception();
            string            errorMessage  = string.Empty;
            IList <OrderHead> orderHeadList = new List <OrderHead>();
            while (rows.MoveNext())
            {
                rowCount++;
                HSSFRow row = (HSSFRow)rows.Current;
                if (!TheImportMgr.CheckValidDataRow(row, 1, 4))
                {
                    break;//边界
                }
                string    flowCode    = string.Empty;
                string    extOrderNo  = string.Empty;
                string    itemCode    = string.Empty;
                decimal   qty         = 0;
                OrderHead orderHead   = new OrderHead();
                Flow      currentFlow = new Flow();

                #region 读取数据
                #region 发货路线
                flowCode = row.GetCell(colFlow) != null?row.GetCell(colFlow).StringCellValue : string.Empty;

                if (string.IsNullOrEmpty(flowCode))
                {
                    errorMessage += string.Format("第{0}行:发货路线不能为空。<br/>", rowCount);
                    continue;
                }
                else
                {
                    currentFlow = TheFlowMgr.LoadFlow(flowCode, this.CurrentUser.Code, true);
                }
                #endregion

                #region 读取窗口时间
                //try
                //{
                //    string readwindowTime = row.GetCell(colWindowTime).StringCellValue;
                //    if (DateTime.TryParse(readwindowTime, out windowTime))
                //    {
                //        orderHead.WindowTime = windowTime;
                //    }
                //    else
                //    {
                //        errorMessage += string.Format("第{0}行:窗口时间填写有误。<br/>", rowCount);
                //        continue;
                //    }
                //}
                //catch
                //{
                //    errorMessage += string.Format("第{0}行:窗口时间填写有误。<br/>", rowCount);
                //    continue;
                //}
                #endregion

                extOrderNo = row.GetCell(colExtOrderNo) != null?row.GetCell(colExtOrderNo).StringCellValue : string.Empty;

                //refOrderNo = row.GetCell(colRefOrderNo) != null ? row.GetCell(colRefOrderNo).StringCellValue : string.Empty;

                #region 读取物料代码
                itemCode = row.GetCell(colItem) != null?row.GetCell(colItem).StringCellValue : string.Empty;

                if (itemCode == null || itemCode.Trim() == string.Empty)
                {
                    errorMessage += string.Format("第{0}行:物料代码不能为空。<br/>", rowCount);
                    //ShowErrorMessage(string.Format("第{0}行:物料代码不能为空。", rowCount));
                    continue;
                }
                else
                {
                    currentFlow.FlowDetails = currentFlow.FlowDetails.Where(f => f.Item.Code == itemCode).ToList();
                    if (currentFlow.FlowDetails.Count == 0)
                    {
                        errorMessage += string.Format("第{0}行:物料代码{1}在路线{2}中不存在。<br/>", rowCount, itemCode, flowCode);
                        continue;
                    }
                }

                #endregion

                #region 读取数量
                try
                {
                    qty = Convert.ToDecimal(row.GetCell(colQty).NumericCellValue);
                }
                catch
                {
                    //ShowErrorMessage(string.Format("第{0}行:订单数量填写有误。<br/>", rowCount));
                    errorMessage += string.Format("第{0}行:订单数量填写有误。<br/>", rowCount);
                    continue;
                }
                #endregion
                #endregion

                #region 填充数据
                orderHead                 = TheOrderMgr.TransferFlow2Order(currentFlow);
                orderHead.SubType         = this.ModuleSubType;
                orderHead.WindowTime      = System.DateTime.Now;
                orderHead.Priority        = "Normal";
                orderHead.Type            = this.ModuleType;
                orderHead.StartTime       = System.DateTime.Now;
                orderHead.ExternalOrderNo = extOrderNo;
                //orderHead.ReferenceOrderNo = refOrderNo;
                orderHead.IsAutoRelease   = true;
                orderHead.IsAutoStart     = true;
                orderHead.IsAutoShip      = true;
                orderHead.IsAutoReceive   = true;
                orderHead.StartLatency    = 0;
                orderHead.CompleteLatency = 0;
                foreach (OrderDetail det in orderHead.OrderDetails)
                {
                    det.RequiredQty = qty;
                    det.OrderedQty  = qty;
                }
                orderHeadList.Add(orderHead);
                #endregion
            }
            if (!string.IsNullOrEmpty(errorMessage))
            {
                throw new Exception(errorMessage);
            }
            if (orderHeadList.Count == 0)
            {
                throw new Exception("导入的有效数据为0.");
            }
            string successMessage = TheOrderMgr.QuickImportDistributionOrder(orderHeadList, this.CurrentUser.Code, this.ModuleSubType);
            ShowSuccessMessage(successMessage);
            //var groups = (from tak in orderHeadList
            //              group tak by new
            //              {
            //                  tak.Flow,
            //                  tak.ExternalOrderNo,
            //              }
            //                  into result
            //                  select new
            //                  {
            //                      Flow = result.Key.Flow,
            //                      ExternalOrderNo = result.Key.ExternalOrderNo,
            //                      list = result.ToList()
            //                  }
            //               ).ToList();
            //string orderNos = "导入成功,生成送货单号:";
            //foreach (var order in groups)
            //{
            //    OrderHead newOrderHead = order.list.First();
            //    IList<OrderDetail> detList = new List<OrderDetail>();
            //    //OrderHead newOrderHead = new OrderHead();
            //    foreach (var d in order.list)
            //    {
            //        OrderDetail det = d.OrderDetails.First();
            //        det.OrderHead = newOrderHead;
            //        detList.Add(det);
            //    }
            //    newOrderHead.OrderDetails = detList;

            //    orderNos += CreateOrder(newOrderHead);
            //}
            //ShowSuccessMessage(orderNos);
        }
        catch (BusinessErrorException ex)
        {
            ShowErrorMessage(ex);
        }
        catch (Exception ex)
        {
            ShowErrorMessage(ex.Message);
            return;
        }
    }