/// <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); } }
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); } }