/// <summary> /// 拆单邮件 /// </summary> /// <param name="masterSOInfo"></param> /// <param name="subSOList"></param> public void SendSplitSOEmail(SOInfo masterSOInfo, List <SOInfo> subSOList) { try { ECCentral.BizEntity.Customer.CustomerBasicInfo customerInfo = GetCustomerBaseInfo(masterSOInfo.BaseInfo.CustomerSysNo.Value); string customerEmail = customerInfo.Email == null ? null : customerInfo.Email.Trim(); if (customerEmail == null) { return; } #region 填充基本信息 KeyValueVariables keyValueVariables = new KeyValueVariables(); KeyTableVariables keyTableVariables = new KeyTableVariables(); keyValueVariables.Add("CustomerID", customerInfo.CustomerID); keyValueVariables.Add("CustomerName", customerInfo.CustomerName); keyValueVariables.Add("ReceiveName", masterSOInfo.InvoiceInfo.Header); keyValueVariables.Add("ReceiveContact", masterSOInfo.ReceiverInfo.Name); ECCentral.BizEntity.Common.AreaInfo areaInfo = ExternalDomainBroker.GetAreaInfoByDistrictSysNo(masterSOInfo.ReceiverInfo.AreaSysNo.Value); keyValueVariables.Add("ProvinceName", areaInfo.ProvinceName); keyValueVariables.Add("CityName", areaInfo.CityName); keyValueVariables.Add("DistrictName", areaInfo.DistrictName); keyValueVariables.Add("ReceiveAddress", masterSOInfo.ReceiverInfo.Address); keyValueVariables.Add("ReceiveZip", masterSOInfo.ReceiverInfo.Zip); keyValueVariables.Add("ReceivePhone", String.IsNullOrEmpty(masterSOInfo.ReceiverInfo.Phone) ? masterSOInfo.ReceiverInfo.MobilePhone : masterSOInfo.ReceiverInfo.Phone); keyValueVariables.Add("SOSysNo", masterSOInfo.SysNo.Value); keyValueVariables.Add("SubSOSysNoList", String.Join(",", subSOList.Select <SOInfo, int>(subSOInfo => subSOInfo.SysNo.Value).ToArray())); keyValueVariables.Add("Memo", masterSOInfo.BaseInfo.Memo); keyValueVariables.Add("NowYear", DateTime.Now.Year); #endregion 填充基本信息 #region 替换邮件模板内连接追踪代码 ReplaceCM_MMC("SO_Splited", keyValueVariables); #endregion #region 填充拆单信息 string pagePath = string.Empty; string imgSrc = string.Empty; int i = 1; ECCentral.BizEntity.Common.PayType payType = ExternalDomainBroker.GetPayTypeBySysNo(masterSOInfo.BaseInfo.PayTypeSysNo.Value); ECCentral.BizEntity.Common.ShippingType shippingType = ExternalDomainBroker.GetShippingTypeBySysNo(masterSOInfo.ShippingInfo.ShipTypeSysNo.Value); DataTable subSO = new DataTable(); subSO.Columns.AddRange(new DataColumn[] { new DataColumn("GainPoint"), new DataColumn("SubSOIndex"), new DataColumn("PayType"), new DataColumn("SOSysNo"), new DataColumn("OrderTime"), new DataColumn("ShipType"), new DataColumn("ShipPeriod"), new DataColumn("CashPay"), new DataColumn("ShipPrice"), new DataColumn("PremiumAmount"), new DataColumn("ReceivableAmount"), new DataColumn("ChangeAmount"), new DataColumn("ChangeAmountDisplay"), new DataColumn("GiftCardPay"), new DataColumn("GiftCardDisplay"), new DataColumn("PointPay"), new DataColumn("PointPayDisplay"), new DataColumn("PrePay"), new DataColumn("PrePayDisplay"), new DataColumn("PayPrice"), new DataColumn("PayPriceDisplay"), new DataColumn("PromotionAmount"), new DataColumn("PromotionDisplay"), new DataColumn("Weight"), new DataColumn("SOItem", typeof(DataTable)) }); subSOList.ForEach(subSOInfo => { DataTable subSOItemList = new DataTable(); subSOItemList.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") }); subSOInfo.Items.ForEach(subSOItem => { pagePath = "http://www.kjt.com/product/detail/" + subSOItem.ProductSysNo; imgSrc = "http://image.kjt.com/neg/P60/" + subSOItem.ProductID + ".jpg"; ReplaceProductCM_MMC("SO_Splited", ref pagePath, subSOItem.ProductID); subSOItemList.Rows.Add(new string[] { subSOItem.ProductID, subSOItem.ProductName, subSOItem.OriginalPrice.Value.ToString(SOConst.DecimalFormat), subSOItem.Quantity.Value.ToString(), (subSOItem.Quantity.Value * subSOItem.OriginalPrice.Value).ToString(SOConst.DecimalFormat), pagePath, imgSrc }); }); string changeAmount = (subSOInfo.BaseInfo.OriginalReceivableAmount - subSOInfo.BaseInfo.ReceivableAmount).ToString(SOConst.DecimalFormat); subSO.Rows.Add(new object[] { subSOInfo.BaseInfo.GainPoint, i++, payType.PayTypeName, subSOInfo.BaseInfo.SOID, subSOInfo.BaseInfo.CreateTime.Value.ToString(SOConst.DateTimeFormat), shippingType.ShippingTypeName, shippingType.Period, subSOInfo.BaseInfo.CashPay.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.ShipPrice.Value.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.PremiumAmount.Value.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.ReceivableAmount.ToString(SOConst.DecimalFormat), changeAmount, changeAmount != (0M).ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.GiftCardPay.Value.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.GiftCardPay != 0, subSOInfo.BaseInfo.PointPay, subSOInfo.BaseInfo.PointPay != 0, subSOInfo.BaseInfo.PrepayAmount.Value.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.PrepayAmount != 0, subSOInfo.BaseInfo.PayPrice.Value.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.PayPrice != 0, subSOInfo.BaseInfo.PromotionAmount.Value.ToString(SOConst.DecimalFormat), subSOInfo.BaseInfo.PromotionAmount != 0, subSOInfo.ShippingInfo.Weight, subSOItemList }); KeyTableVariables subSOItemTableVariables = new KeyTableVariables(); }); #endregion keyTableVariables.Add("SubSOList", subSO); ExternalDomainBroker.SendExternalEmail(customerEmail, "SO_Splited", keyValueVariables, keyTableVariables, customerInfo.FavoriteLanguageCode); } catch (Exception ex) { ExceptionHelper.HandleException(ex); } }
/// <summary> /// 更新团购订单 /// </summary> /// <param name="CurrentSO"></param> /// <returns></returns> public void Update() { ValidationSOEntity(); ValidationGroupBuyingRules(); SOItemInfo groupBuyProduct = CurrentSO.Items.Find(item => item.ProductSysNo == ProductSysNo); if (groupBuyProduct == null) { return; } //可能有赠品,但是只会有一个主商品 int groupBuySysNo = groupBuyProduct.ReferenceSysNo.Value; GroupBuyingInfo gbInfo = ExternalDomainBroker.GetGroupBuyInfoBySysNo(groupBuySysNo); decimal dealPrice = gbInfo.GBPrice.HasValue ? gbInfo.GBPrice.Value : -1; if (dealPrice < 0) { throw new BizException(ResourceHelper.Get("SO_Audit_GroupNotDealPrice", CurrentSO.SysNo)); } if (groupBuyProduct != null && dealPrice < groupBuyProduct.Price) { SOInfo newSOInfo = new SOInfo(); //newSOInfo.SOItemList = SerializeHelper.DeepClone(soInfo.SOItemList); List <SOItemInfo> otherItems = CurrentSO.Items.FindAll(x => x.ProductSysNo != ProductSysNo); decimal oldSOAmt = 0.0m; if (otherItems != null && otherItems.Count > 0) { oldSOAmt = otherItems.Sum(x => x.OriginalPrice.Value * x.Quantity.Value); } decimal newSOAmt = oldSOAmt; if (groupBuyProduct.ProductType == SOProductType.Product) { groupBuyProduct.Price = dealPrice; groupBuyProduct.OriginalPrice = dealPrice; groupBuyProduct.SettlementStatus = SettlementStatus.Success; //团购订单不能用优惠卷 newSOAmt += dealPrice * groupBuyProduct.Quantity.Value; } int refundPoint = 0; decimal refundPrepay = 0.0m; decimal refundGiftCard = 0.0m; decimal difference = CurrentSO.BaseInfo.SOAmount.Value - newSOAmt; decimal newPrepayAmt = CurrentSO.BaseInfo.PrepayAmount.Value; decimal newGiftCardPay = CurrentSO.BaseInfo.GiftCardPay.Value; decimal newPremiumAmt = CurrentSO.BaseInfo.PremiumAmount.Value; int newPointPay = CurrentSO.BaseInfo.PointPay.Value; decimal newCashPay = newSOAmt - Math.Abs(CurrentSO.BaseInfo.PointPayAmount.Value); ECCentral.BizEntity.Common.ShippingType shippingType = ExternalDomainBroker.GetShippingTypeBySysNo(CurrentSO.ShippingInfo.ShipTypeSysNo.Value); if (CurrentSO.BaseInfo.IsPremium.Value) { if (shippingType != null && newSOAmt > shippingType.PremiumBase) { newPremiumAmt = UtilityHelper.ToMoney(newSOAmt * shippingType.PremiumRate.Value); } } decimal pointToMoneyRatio = ExternalDomainBroker.GetPointToMoneyRatio(); #region 退款逻辑 //退款优先级:1.先退现金支付(注意:不在这里退还),2.退余额支付,3.退礼品卡支付,4.退积分支付 // 1. 需退还的:余额支付金额,退礼支付品金额,积分支付金额的总合 decimal refundPayAmount = CurrentSO.BaseInfo.PrepayAmount.Value + CurrentSO.BaseInfo.GiftCardPay.Value + CurrentSO.BaseInfo.PointPayAmount.Value - (newSOAmt + newPremiumAmt + CurrentSO.BaseInfo.ShipPrice.Value); // 2. 如果使用余额支付,退到余额 if (refundPayAmount > 0) { refundPrepay = refundPayAmount > CurrentSO.BaseInfo.PrepayAmount ? CurrentSO.BaseInfo.PrepayAmount.Value : refundPayAmount; newPrepayAmt = CurrentSO.BaseInfo.PrepayAmount.Value - refundPrepay; refundPayAmount = refundPayAmount - refundPrepay; // 3. 如果使用礼品卡支付,退到礼品卡 if (refundPayAmount > 0) { refundGiftCard = refundPayAmount > CurrentSO.BaseInfo.GiftCardPay ? CurrentSO.BaseInfo.GiftCardPay.Value : refundPayAmount; newGiftCardPay = CurrentSO.BaseInfo.GiftCardPay.Value - refundGiftCard; refundPayAmount = refundPayAmount - refundGiftCard; // 4. 如果使用积分支付,退积分 if (refundPayAmount > 0) { decimal refundPointAmount = refundPayAmount > CurrentSO.BaseInfo.PointPayAmount ? CurrentSO.BaseInfo.PointPayAmount.Value : refundPayAmount; refundPayAmount = refundPayAmount - refundPointAmount; decimal newPontPayAmount = CurrentSO.BaseInfo.PointPayAmount.Value - refundPointAmount; newPointPay = (int)(newPontPayAmount * pointToMoneyRatio); refundPoint = (int)(refundPointAmount * pointToMoneyRatio); newCashPay = newSOAmt - newPontPayAmount; } } } #endregion ECCentral.BizEntity.Common.PayType payType = ExternalDomainBroker.GetPayTypeBySysNo(CurrentSO.BaseInfo.PayTypeSysNo.Value); decimal newPayPrice = Math.Max(UtilityHelper.ToMoney(payType.PayRate.Value * (newCashPay + CurrentSO.BaseInfo.ShipPrice.Value + newPremiumAmt - newPrepayAmt - newGiftCardPay)), 0M); CurrentSO.BaseInfo.SOAmount = newSOAmt; CurrentSO.BaseInfo.PremiumAmount = newPremiumAmt; CurrentSO.BaseInfo.PayPrice = newPayPrice; CurrentSO.BaseInfo.GiftCardPay = newGiftCardPay; CurrentSO.BaseInfo.PointPay = newPointPay; CurrentSO.BaseInfo.PointPayAmount = CurrentSO.BaseInfo.PointPay.Value / pointToMoneyRatio; CurrentSO.BaseInfo.PrepayAmount = newPrepayAmt; TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { SODA.UpdateGroupBuySOAmount(CurrentSO.BaseInfo); SODA.UpdateGroupBuyProduct(groupBuyProduct); if (refundPrepay > 0) { ExternalDomainBroker.AdjustPrePay(new BizEntity.Customer.CustomerPrepayLog { AdjustAmount = refundPrepay, CustomerSysNo = CurrentSO.BaseInfo.CustomerSysNo, Note = "Update SO For GroupBuying", PrepayType = ECCentral.BizEntity.Customer.PrepayType.SOPay, SOSysNo = CurrentSO.SysNo, }); } if (refundGiftCard > 0) { ExternalDomainBroker.GiftCardVoidForSOUpdate(newGiftCardPay, CurrentSO.SOGiftCardList, CurrentSO.CompanyCode); } if (refundPoint > 0) { ExternalDomainBroker.AdjustPoint(new BizEntity.Customer.AdjustPointRequest { CustomerSysNo = CurrentSO.BaseInfo.CustomerSysNo, Memo = "Update Group Buying SO", OperationType = ECCentral.BizEntity.Customer.AdjustPointOperationType.AddOrReduce, Point = refundPoint, PointType = (int)ECCentral.BizEntity.Customer.AdjustPointType.UpdateSO, SOSysNo = CurrentSO.SysNo, Source = SOConst.DomainName }); } scope.Complete(); } } WriteLog(BizEntity.Common.BizLogType.Sale_SO_Update, "IPP更改团购订单"); }
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); } }