private void SendEmailToCustomerForSOInfo(SOInfo soInfo, string emailTemplateID)
        {
            try
            {
                ECCentral.BizEntity.Customer.CustomerBasicInfo customerInfo = GetCustomerBaseInfo(soInfo.BaseInfo.CustomerSysNo.Value);
                string customerEmail = customerInfo.Email == null ? null : customerInfo.Email.Trim();

                if (customerEmail == null)
                {
                    return;
                }
                KeyValueVariables keyValueVariables = new KeyValueVariables();
                KeyTableVariables keyTableVariables = new KeyTableVariables();

                #region 填充基本属性
                keyValueVariables.Add("SOSysNo", soInfo.BaseInfo.SysNo.Value.ToString());
                keyValueVariables.Add("SOID", soInfo.BaseInfo.SOID);
                keyValueVariables.Add("CustomerName", customerInfo.CustomerName);
                keyValueVariables.Add("CustomerID", customerInfo.CustomerID);
                keyValueVariables.Add("OrderTime", soInfo.BaseInfo.CreateTime.Value.ToString(SOConst.DateTimeFormat));
                keyValueVariables.Add("InvoiceHeader", soInfo.InvoiceInfo.Header);
                keyValueVariables.Add("ReceiveName", soInfo.ReceiverInfo.Name);
                ECCentral.BizEntity.Common.AreaInfo areaInfo = ExternalDomainBroker.GetAreaInfoByDistrictSysNo(soInfo.ReceiverInfo.AreaSysNo.Value);
                keyValueVariables.Add("ProvinceName", areaInfo.ProvinceName);
                keyValueVariables.Add("CityName", areaInfo.CityName);
                keyValueVariables.Add("DistrictName", areaInfo.DistrictName);
                keyValueVariables.Add("ReceiveAddress", soInfo.ReceiverInfo.Address);
                keyValueVariables.Add("ReceiveZip", soInfo.ReceiverInfo.Zip);
                keyValueVariables.Add("ReceivePhone", String.IsNullOrEmpty(soInfo.ReceiverInfo.Phone) ? soInfo.ReceiverInfo.MobilePhone : soInfo.ReceiverInfo.Phone);
                ECCentral.BizEntity.Common.PayType payType = ExternalDomainBroker.GetPayTypeBySysNo(soInfo.BaseInfo.PayTypeSysNo.Value);
                keyValueVariables.Add("PayType", payType.PayTypeName);
                ECCentral.BizEntity.Common.ShippingType shippingType = ExternalDomainBroker.GetShippingTypeBySysNo(soInfo.ShippingInfo.ShipTypeSysNo.Value);
                keyValueVariables.Add("ShipType", shippingType.ShippingTypeName);
                keyValueVariables.Add("ShipPeriod", shippingType.Period);
                keyValueVariables.Add("CashPay", soInfo.BaseInfo.CashPay.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("ShipPrice", soInfo.BaseInfo.ShipPrice.Value.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("PremiumAmount", soInfo.BaseInfo.PremiumAmount.Value.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("ReceivableAmount", soInfo.BaseInfo.ReceivableAmount.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("GainPoint", soInfo.BaseInfo.GainPoint.Value);
                keyValueVariables.Add("Weight", soInfo.ShippingInfo.Weight);

                string changeAmount = (soInfo.BaseInfo.OriginalReceivableAmount - soInfo.BaseInfo.ReceivableAmount).ToString(SOConst.DecimalFormat);
                keyValueVariables.Add("ChangeAmount", changeAmount);
                keyValueVariables.Add("ChangeAmountDisplay", changeAmount != (0M).ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("GiftCardPay", soInfo.BaseInfo.GiftCardPay.Value.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("GiftCardDisplay", soInfo.BaseInfo.GiftCardPay != 0);
                keyValueVariables.Add("PointPay", soInfo.BaseInfo.PointPayAmount);
                keyValueVariables.Add("PointPayDisplay", soInfo.BaseInfo.PointPay != 0);
                keyValueVariables.Add("PrePay", soInfo.BaseInfo.PrepayAmount.Value.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("PrePayDisplay", soInfo.BaseInfo.PrepayAmount != 0);
                keyValueVariables.Add("PayPrice", soInfo.BaseInfo.PayPrice.Value.ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("PayPriceDisplay", soInfo.BaseInfo.PayPrice != 0);
                keyValueVariables.Add("PromotionAmount", Math.Abs(soInfo.BaseInfo.PromotionAmount.Value).ToString(SOConst.DecimalFormat));
                keyValueVariables.Add("PromotionDisplay", soInfo.BaseInfo.PromotionAmount != 0);
                keyValueVariables.Add("NowYear", DateTime.Now.Year);
                keyValueVariables.Add("TariffAmt", soInfo.BaseInfo.TariffAmount.HasValue?soInfo.BaseInfo.TariffAmount.Value.ToString(SOConst.DecimalFormat) : 0M.ToString(SOConst.DecimalFormat));
                #endregion

                //int weight = 0;

                #region 替换邮件模板内连接追踪代码
                ReplaceCM_MMC(emailTemplateID, keyValueVariables);
                #endregion

                #region 填充商品
                string imgSrc   = string.Empty;
                string pagePath = string.Empty;
                soInfo.Items.ForEach(item =>
                {
                    //weight += item.Weight.Value * item.Quantity.Value;
                    string tbKey        = String.Format("Items_{0}", item.ProductType.ToString());
                    pagePath            = "http://www.kjt.com/product/detail/" + item.ProductSysNo;
                    imgSrc              = "http://image.kjt.com/neg/P60/" + item.ProductID + ".jpg";
                    DataTable tableList = null;
                    if (!keyTableVariables.ContainsKey(tbKey))
                    {
                        tableList = new DataTable();
                        tableList.Columns.AddRange(new DataColumn[]
                        {
                            new DataColumn("ProductID"),
                            new DataColumn("ProductName"),
                            new DataColumn("Price"),
                            new DataColumn("Quantity"),
                            new DataColumn("Amount"),
                            new DataColumn("PagePath"),
                            new DataColumn("ImgSrc")
                        });
                        keyTableVariables.Add(tbKey, tableList);
                    }
                    else
                    {
                        tableList = keyTableVariables[tbKey];
                    }
                    //连接增加追踪代码
                    ReplaceProductCM_MMC(emailTemplateID, ref pagePath, item.ProductID);
                    tableList.Rows.Add(new string[]
                    {
                        item.ProductType == SOProductType.Coupon ? null : item.ProductID,
                        item.ProductName,
                        item.OriginalPrice.Value.ToString(SOConst.DecimalFormat),
                        item.Quantity.Value.ToString(),
                        (item.Quantity.Value * item.OriginalPrice.Value).ToString(SOConst.DecimalFormat),
                        pagePath,
                        imgSrc
                    });
                });
                #endregion

                #region 组合销售
                List <SOPromotionInfo> comboPromotionList = soInfo.SOPromotions.FindAll(p => { return(p.PromotionType == SOPromotionType.Combo); });
                keyValueVariables.Add("PromotionInfoDisplay", soInfo.BaseInfo.PromotionAmount != 0);
                if (comboPromotionList != null)
                {
                    DataTable comboTable = new DataTable();
                    comboTable.Columns.AddRange(new DataColumn[]
                    {
                        new DataColumn("ComboName"),
                        new DataColumn("ComboDiscount"),
                        new DataColumn("ComboTime"),
                        new DataColumn("ComboTotalDiscount")
                    });
                    keyTableVariables.Add("ComboList", comboTable);
                    List <ECCentral.BizEntity.MKT.ComboInfo> comboInfoList = ExternalDomainBroker.GetComboList(comboPromotionList.Select <SOPromotionInfo, int>(p => p.PromotionSysNo.Value).ToList <int>());
                    if (comboInfoList != null)
                    {
                        comboPromotionList.ForEach(promotion =>
                        {
                            ECCentral.BizEntity.MKT.ComboInfo comboInfo = comboInfoList.FirstOrDefault(cb => cb.SysNo == promotion.PromotionSysNo);
                            comboTable.Rows.Add(new string[]
                            {
                                comboInfo == null ? null : comboInfo.Name.Content,
                                (promotion.DiscountAmount.Value / promotion.Time.Value).ToString(SOConst.DecimalFormat),
                                promotion.Time.Value.ToString(),
                                promotion.DiscountAmount.Value.ToString(SOConst.DecimalFormat)
                            });
                        });
                    }
                }
                #endregion

                #region 填充推荐商品信息
                string result = string.Empty;
                //测试订单号:388280
                List <CommendatoryProductsInfo> list = ObjectFactory <ISODA> .Instance.GetCommendatoryProducts(int.Parse(soInfo.BaseInfo.SOID));

                if (list != null && list.Count > 0)
                {
                    result = "<br /><table width=\"650px\" style=\"border-collapse: collapse; border: 1px solid #ddd;\" cellspacing=\"0\" cellpadding=\"0\">\n" +
                             "<tr style=\"background:#fff;\">\n" +
                             "<td style=\"width:30px; padding:10px 0 0 10px;\"><img src=\"http://c1.neweggimages.com.cn/NeweggPic2/Marketing/201108/chuhuo/images/icon_4.jpg\" /></td>\n" +
                             "<td style=\"text-align:left; padding:10px 0 0 5px;\"><span style=\"font-family:\"微软雅黑\";font-size:16px; display:inline-block; padding:0; padding-left:5px;\"><strong>我们猜您可能还对下面的商品感兴趣</strong></span></td>\n" +
                             "</tr>\n" +
                             "</table>\n" +
                             "<div style=\"padding-top:10px;border-collapse: collapse; border: 1px solid #ddd;width:648px\">" +
                             "<table cellspacing=\"0\" cellpadding=\"0\" style=\"padding-bottom:10px;border-collapse: collapse; border:0;\">\n" +
                             "<tr style=\" background:#fff;\">\n" +
                             "[RevommendProductList1]\n" +
                             "</tr>\n" +
                             "<tr style=\"background:#fff;\">\n" +
                             "[RevommendProductList2]\n" +
                             "</tr>\n" +
                             "</table>\n" +
                             "</div>";
                    string item1 = string.Empty,
                           item2 = string.Empty;

                    IEnumerator <CommendatoryProductsInfo> rator = list.Take(3).GetEnumerator();
                    while (rator.MoveNext())
                    {
                        CommendatoryProductsInfo entity = rator.Current;
                        item1 += ReplaceCommendatoryProduct(entity, emailTemplateID);
                    }
                    rator = list.Skip(3).Take(3).GetEnumerator();
                    while (rator.MoveNext())
                    {
                        CommendatoryProductsInfo entity = rator.Current;
                        item2 += ReplaceCommendatoryProduct(entity, emailTemplateID);
                    }

                    result = result.Replace("[RevommendProductList1]", item1)
                             .Replace("[RevommendProductList2]", item2);

                    keyValueVariables.Add("CommendatoryProducts", result);
                }
                #endregion

                #region 填充备注信息
                string memo = string.Empty;
                if (!string.IsNullOrEmpty(soInfo.BaseInfo.MemoForCustomer))
                {
                    memo = @"<table border='0' cellpadding='5' cellspacing='0' style='width: 650px; border-collapse: collapse;font-size: 9pt;'>
                                <tr>
                                    <td style='border: 1px solid #ddd; color: #FF4E00; font-size: 10.5pt; font-weight: bold; background: #F2F2F2;'>
                                        备注信息
                                    </td>
                                </tr>
                                <tr>
                                    <td id='Memo' style='border: 1px solid #ddd;'>
                                        " + soInfo.BaseInfo.MemoForCustomer + @"
                                    </td>
                                </tr>
                            </table>";
                    keyValueVariables.Add("Memo", memo);
                }
                #endregion

                ExternalDomainBroker.SendExternalEmail(customerEmail, emailTemplateID, keyValueVariables, keyTableVariables, customerInfo.FavoriteLanguageCode);
            }
            catch (Exception ex)
            {
                ExceptionHelper.HandleException(ex);
            }
        }
Beispiel #2
0
        public void BuildData(System.Collections.Specialized.NameValueCollection requestPostData, out KeyValueVariables variables, out KeyTableVariables tableVariables)
        {
            variables      = new KeyValueVariables();
            tableVariables = new KeyTableVariables();
            string soSysNos = requestPostData["SOSysNoList"];

            if (soSysNos != null && soSysNos.Trim() != String.Empty)
            {
                string[] noList = System.Web.HttpUtility.UrlDecode(soSysNos).Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);

                List <int> soSysNoList = new List <int>();
                noList.ForEach(no =>
                {
                    int tno = 0;
                    if (int.TryParse(no, out tno))
                    {
                        soSysNoList.Add(tno);
                    }
                });

                if (soSysNoList.Count > 0)
                {
                    List <SOInfo> soInfoList = ObjectFactory <SOProcessor> .Instance.GetSOBySOSysNoList(soSysNoList);

                    System.Data.DataTable dtSO = new System.Data.DataTable();
                    dtSO.Columns.AddRange(new System.Data.DataColumn[]
                    {
                        new DataColumn("BarCodeImage"),
                        new DataColumn("SelfCompanyName"),
                        new DataColumn("SelfCompanyAddress"),
                        new DataColumn("SelfCompanyPhone"),
                        new DataColumn("SelfCompanyWebAddress"),
                        new DataColumn("OriginalReceivableAmount"),
                        new DataColumn("SOSysNo"),
                        new DataColumn("Pager"),
                        new DataColumn("SheetNumberDisplay", typeof(bool)),
                        new DataColumn("SheetNumber"),
                        new DataColumn("InvoiceHeader"),
                        new DataColumn("ReceiveAddress"),
                        new DataColumn("ReceiveName"),
                        new DataColumn("ReceivePhone"),
                        new DataColumn("VATDisplay"),
                        new DataColumn("VATNo"),
                        new DataColumn("CompanyName"),
                        new DataColumn("CompanyAddress"),
                        new DataColumn("CompanyPhone"),
                        new DataColumn("OpenAccountBank"),
                        new DataColumn("SOStatus"),
                        new DataColumn("PayType"),
                        new DataColumn("ShipType"),
                        new DataColumn("CreateUser"),
                        new DataColumn("CreateDate"),
                        new DataColumn("OutTime"),
                        new DataColumn("AuditUser"),
                        new DataColumn("AuditDate"),
                        new DataColumn("Memo"),
                        new DataColumn("Note"),
                        new DataColumn("InvoiceNote"),
                        new DataColumn("ReceivableAmount"),
                        new DataColumn("ProductList", typeof(DataTable)),
                        new DataColumn("ComboList", typeof(DataTable)),
                        new DataColumn("ShipPriceDisplay", typeof(bool)),
                        new DataColumn("ShipPrice"),
                        new DataColumn("PremiumAmountDisplay", typeof(bool)),
                        new DataColumn("PremiumAmount"),
                        new DataColumn("PayPriceDisplay", typeof(bool)),
                        new DataColumn("PayPrice"),
                        new DataColumn("PointPayDisplay", typeof(bool)),
                        new DataColumn("PointPay"),
                        new DataColumn("ChangeAmountDisplay", typeof(bool)),
                        new DataColumn("ChangeAmount"),
                    });

                    tableVariables.Add("OrderList", dtSO);

                    Dictionary <int, ECCentral.BizEntity.Inventory.WarehouseInfo> dicStock = new Dictionary <int, BizEntity.Inventory.WarehouseInfo>();
                    soInfoList.ForEach(soInfo =>
                    {
                        #region 订单基本属性
                        DataRow dr = dtSO.NewRow();
                        ECCentral.BizEntity.Common.PayType payType           = ExternalDomainBroker.GetPayTypeBySysNo(soInfo.BaseInfo.PayTypeSysNo.Value);
                        ECCentral.BizEntity.Common.ShippingType shippingType = ExternalDomainBroker.GetShippingTypeBySysNo(soInfo.ShippingInfo.ShipTypeSysNo.Value);
                        dr["BarCodeImage"]             = GetBarCodeUrl(soInfo.SysNo.ToString());
                        dr["SelfCompanyName"]          = ResouceManager.GetMessageString(CommonConst.MessagePath_Common, "Res_Company_Name");
                        dr["SelfCompanyAddress"]       = ResouceManager.GetMessageString(CommonConst.MessagePath_Common, "Res_Company_Address");
                        dr["SelfCompanyPhone"]         = ResouceManager.GetMessageString(CommonConst.MessagePath_Common, "Res_Company_Phone");
                        dr["SelfCompanyWebAddress"]    = ResouceManager.GetMessageString(CommonConst.MessagePath_Common, "Res_Company_Url");
                        dr["OriginalReceivableAmount"] = soInfo.BaseInfo.PayWhenReceived.Value ? ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.OriginalReceivableAmount) : 0M;
                        dr["SOSysNo"]                   = soInfo.SysNo;
                        dr["Pager"]                     = "";
                        dr["SheetNumberDisplay"]        = soInfo.InvoiceInfo.IsVAT.Value;
                        dr["InvoiceHeader"]             = soInfo.InvoiceInfo.Header;
                        AreaInfo receiveAreaInfo        = ExternalDomainBroker.GetAreaInfoByDistrictSysNo(soInfo.ReceiverInfo.AreaSysNo.Value);
                        dr["ReceiveAddress"]            = receiveAreaInfo == null ? soInfo.ReceiverInfo.Address : String.Format("{0},{1},{2},{3}{4}", receiveAreaInfo.ProvinceName, receiveAreaInfo.CityName, receiveAreaInfo.DistrictName, soInfo.ReceiverInfo.Address, soInfo.ReceiverInfo.Zip);
                        dr["ReceiveName"]               = soInfo.ReceiverInfo.Name;
                        soInfo.ReceiverInfo.MobilePhone = soInfo.ReceiverInfo.MobilePhone == null ? string.Empty : soInfo.ReceiverInfo.MobilePhone.Trim();
                        soInfo.ReceiverInfo.Phone       = soInfo.ReceiverInfo.Phone == null ? string.Empty : soInfo.ReceiverInfo.Phone.Trim();
                        string phone                    = soInfo.ReceiverInfo.MobilePhone == soInfo.ReceiverInfo.Phone ? soInfo.ReceiverInfo.MobilePhone : String.Format("{0},{1}", soInfo.ReceiverInfo.MobilePhone, soInfo.ReceiverInfo.Phone);
                        dr["ReceivePhone"]              = phone.Trim(',');
                        dr["VATDisplay"]                = soInfo.InvoiceInfo.IsVAT.Value;
                        dr["SOStatus"]                  = soInfo.BaseInfo.Status.ToDisplayText();
                        dr["PayType"]                   = payType.PayTypeName;
                        dr["ShipType"]                  = shippingType.ShippingTypeName.StartsWith("(*) ") ? shippingType.ShippingTypeName.Substring(4) : shippingType.ShippingTypeName;
                        dr["CreateDate"]                = soInfo.BaseInfo.CreateTime.Value.ToString(SOConst.DateFormat);
                        //dr["OutTime"] = soInfo.ShippingInfo.OutTime.Value.ToString(SOConst.DateFormat);
                        dr["OutTime"]          = soInfo.ShippingInfo.OutTime.HasValue ? soInfo.ShippingInfo.OutTime.Value.ToString(SOConst.DateFormat) : "";
                        dr["Memo"]             = soInfo.BaseInfo.Memo;
                        dr["Note"]             = soInfo.BaseInfo.Note;
                        dr["InvoiceNote"]      = soInfo.InvoiceInfo.InvoiceNote;
                        dr["ReceivableAmount"] = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.ReceivableAmount);
                        UserInfo userInfo      = soInfo.BaseInfo.SalesManSysNo.HasValue ? ExternalDomainBroker.GetUserInfoBySysNo(soInfo.BaseInfo.SalesManSysNo.Value) : null;
                        string defaultUserName = ResouceManager.GetMessageString(CommonConst.MessagePath_Common, "Res_Creater_Name");
                        dr["CreateUser"]       = userInfo == null ? defaultUserName : userInfo.UserDisplayName;
                        if (soInfo.StatusChangeInfoList != null && soInfo.StatusChangeInfoList.Count > 0)
                        {
                            SOStatusChangeInfo statusChangeInfo = soInfo.StatusChangeInfoList.FirstOrDefault <SOStatusChangeInfo>(info => info.OldStatus == SOStatus.Origin);
                            if (statusChangeInfo != null)
                            {
                                dr["AuditDate"] = statusChangeInfo.ChangeTime.Value.ToString(SOConst.DateFormat);
                                userInfo        = soInfo.BaseInfo.SalesManSysNo.HasValue ? ExternalDomainBroker.GetUserInfoBySysNo(statusChangeInfo.OperatorSysNo.Value) : null;
                                dr["AuditUser"] = userInfo == null ? defaultUserName : userInfo.UserDisplayName;
                            }
                        }

                        #endregion

                        #region 填充增值税发票相关信息
                        if (soInfo.InvoiceInfo.IsVAT.Value)
                        {
                            dr["VATNo"]           = soInfo.InvoiceInfo.VATInvoiceInfo.TaxNumber;
                            dr["CompanyName"]     = soInfo.InvoiceInfo.VATInvoiceInfo.CompanyName;
                            dr["CompanyAddress"]  = soInfo.InvoiceInfo.VATInvoiceInfo.CompanyAddress;
                            dr["CompanyPhone"]    = soInfo.InvoiceInfo.VATInvoiceInfo.CompanyPhone;
                            dr["OpenAccountBank"] = soInfo.InvoiceInfo.VATInvoiceInfo.BankAccount;
                            string number         = ExternalDomainBroker.GetSystemConfigurationValue("SOVatNumber", soInfo.CompanyCode);
                            string flownumber     = "";
                            string updateNumber   = string.Empty;

                            if (number == string.Empty)
                            {
                                number     = "0";
                                flownumber = "1";
                            }
                            else
                            {
                                flownumber = Convert.ToString(int.Parse(number) + 1);
                            }
                            //老系统中的第三个参数User.SysNo由后台添加
                            //commonBizInteract.UpdateSystemConfigurationValue("SOVatNumber", flownumber, soInfo.CompanyCode);

                            //加入SO单以前的流水号
                            string oldInvoiceNumber = soInfo.InvoiceInfo.InvoiceNo;
                            if (oldInvoiceNumber != null)
                            {
                                if (oldInvoiceNumber.Trim().Length > 0)
                                {
                                    updateNumber = oldInvoiceNumber.ToString().Trim() + "," + number;
                                }
                                else
                                {
                                    updateNumber = number;
                                }
                            }
                            //CommonService.UpdateSoMaster(soMastInfo.SystemNumber, updateNumber);

                            dr["SheetNumber"] = number;
                        }
                        #endregion

                        #region  填充商品
                        DataTable dtProduct = new DataTable();
                        dtProduct.Columns.AddRange(new System.Data.DataColumn[]
                        {
                            new DataColumn("ProductID"),
                            new DataColumn("ProductName"),
                            new DataColumn("Price"),
                            new DataColumn("Quantity"),
                            new DataColumn("Amount"),
                            new DataColumn("Tax"),
                            new DataColumn("Stock")
                        });
                        soInfo.Items.ForEach(p =>
                        {
                            if (!dicStock.ContainsKey(p.StockSysNo.Value))
                            {
                                dicStock.Add(p.StockSysNo.Value, ExternalDomainBroker.GetWarehouseInfo(p.StockSysNo.Value));
                            }
                            DataRow drProduct        = dtProduct.NewRow();
                            drProduct["ProductID"]   = p.ProductType == SOProductType.Coupon || p.ProductType == SOProductType.ExtendWarranty ? p.ProductSysNo.ToString() : p.ProductID;
                            drProduct["ProductName"] = p.ProductName;
                            drProduct["Price"]       = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(p.OriginalPrice.Value);
                            drProduct["Quantity"]    = p.Quantity;
                            drProduct["Amount"]      = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(p.Quantity.Value * p.OriginalPrice.Value);
                            drProduct["Tax"]         = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(p.TariffAmount.Value);
                            drProduct["Stock"]       = dicStock[p.StockSysNo.Value] == null ? String.Empty : dicStock[p.StockSysNo.Value].WarehouseName;
                            dtProduct.Rows.Add(drProduct);
                        });
                        dr["ProductList"] = dtProduct;
                        #endregion

                        #region 促销优惠:组合销售
                        List <SOPromotionInfo> comboList = (from promotion in soInfo.SOPromotions
                                                            where promotion.PromotionType == SOPromotionType.Combo
                                                            select promotion).ToList();
                        if (comboList.Count > 0)
                        {
                            List <ECCentral.BizEntity.MKT.ComboInfo> comboInfoList = ExternalDomainBroker.GetComboList(comboList.Select <SOPromotionInfo, int>(p => p.PromotionSysNo.Value).ToList <int>());
                            DataTable dtCombo = new DataTable();
                            dtCombo.Columns.AddRange(new System.Data.DataColumn[]
                            {
                                new DataColumn("ProductName"),
                                new DataColumn("Quantity"),
                                new DataColumn("Amount"),
                            });
                            comboList.ForEach(combo =>
                            {
                                ECCentral.BizEntity.MKT.ComboInfo comboInfo = comboInfoList.FirstOrDefault(cb => cb.SysNo == combo.PromotionSysNo);
                                DataRow drCombo        = dtCombo.NewRow();
                                drCombo["ProductName"] = comboInfo.Name.Content;
                                drCombo["Quantity"]    = combo.Time;
                                drCombo["Amount"]      = combo.DiscountAmount.Value.ToString(SOConst.DecimalFormat);
                                dtCombo.Rows.Add(drCombo);
                            });
                            dr["ComboList"] = dtCombo;
                        }
                        #endregion

                        #region 运费
                        dr["ShipPriceDisplay"] = soInfo.BaseInfo.ShipPrice.HasValue && soInfo.BaseInfo.ShipPrice > 0M;
                        if (soInfo.BaseInfo.ShipPrice > 0)
                        {
                            dr["ShipPrice"] = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.ShipPrice.Value);
                        }
                        #endregion

                        #region 保价费
                        dr["PremiumAmountDisplay"] = soInfo.BaseInfo.PremiumAmount.HasValue && soInfo.BaseInfo.PremiumAmount > 0M;
                        if (soInfo.BaseInfo.PremiumAmount > 0)
                        {
                            dr["PremiumAmount"] = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.PremiumAmount.Value);
                        }
                        #endregion

                        #region 手续费
                        dr["PayPriceDisplay"] = soInfo.BaseInfo.PayPrice.HasValue && soInfo.BaseInfo.PayPrice > 0M;
                        if (soInfo.BaseInfo.PayPrice > 0)
                        {
                            dr["PayPrice"] = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.PayPrice.Value);
                        }
                        #endregion

                        #region 积分抵扣
                        dr["PointPayDisplay"] = soInfo.BaseInfo.PointPay.HasValue && soInfo.BaseInfo.PointPay > 0;
                        if (soInfo.BaseInfo.PointPay > 0)
                        {
                            dr["PointPay"] = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.PointPayAmount.Value);
                        }
                        #endregion

                        #region 去零头
                        decimal fen = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(soInfo.BaseInfo.OriginalReceivableAmount) - soInfo.BaseInfo.ReceivableAmount;
                        dr["ChangeAmountDisplay"] = fen > 0M;
                        if (fen > 0)
                        {
                            dr["ChangeAmount"] = ECCentral.Service.SO.BizProcessor.UtilityHelper.ToMoney(fen);
                        }
                        #endregion

                        dtSO.Rows.Add(dr);
                    });
                }
            }
        }