/// <summary> /// 根据SqlXml构造发送短信价格信息集合 /// </summary> /// <param name="strSqlXml">SqlXml</param> /// <returns>发送短信价格信息集合</returns> private List <MSmsChannelInfo> GetSmsUnitPrice(string strSqlXml) { if (string.IsNullOrEmpty(strSqlXml)) { return(null); } List <MSmsChannelInfo> items = new List <MSmsChannelInfo>(); XElement xRoot = XElement.Parse(strSqlXml); var xRows = Utils.GetXElements(xRoot, "row"); if (xRows == null || xRows.Count() <= 0) { return(null); } foreach (var xrow in xRows) { var item = new MSmsChannelInfo(); item.Cnannel = Utils.GetEnumValue <Channel>(Utils.GetXAttributeValue(xrow, "Channel"), Channel.通用通道); item.Price = Utils.GetDecimal(Utils.GetXAttributeValue(xrow, "UnitPrice")); item.Name = item.Cnannel.ToString(); items.Add(item); } return(items); }
/// <summary> /// 验证要发送的短信 /// </summary> /// <param name="smsPlan">发送短信提交的业务实体</param> /// <returns></returns> public MSendResult ValidateSend(MSmsPlan smsPlan) { var validateResultInfo = new MSendResult(true, null); if (smsPlan == null || smsPlan.SmsAccount == null) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "未填写发送短信账户信息"; return(validateResultInfo); } if (string.IsNullOrEmpty(smsPlan.SmsAccount.AccountId) || smsPlan.SmsAccount.AccountId.Length != 36) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "发送短信的账户编号不正确"; return(validateResultInfo); } if (string.IsNullOrEmpty(smsPlan.SmsAccount.AppKey) || smsPlan.SmsAccount.AppKey.Length != 36) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "发送短信的账户的AppKey不正确"; return(validateResultInfo); } /* * if (string.IsNullOrEmpty(smsPlan.SmsAccount.AppSecret) || smsPlan.SmsAccount.AppSecret.Length != 36) * { * validateResultInfo.IsSucceed = false; * validateResultInfo.ErrorMessage = "发送短信的账户的AppSecret不正确"; * * return validateResultInfo; * } */ MSmsAccount modelAccount = _dalAccount.GetFullSmsAccount(smsPlan.SmsAccount.AccountId, smsPlan.SmsAccount.AppKey); if (modelAccount == null) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "发送短信的账户在短信中心不存在"; return(validateResultInfo); } if (modelAccount.Amount <= 0) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "发送短信的账户余额不足"; return(validateResultInfo); } MSmsChannelInfo price = null; if (modelAccount.SmsUnitPrice != null && modelAccount.SmsUnitPrice.Count > 0) { price = modelAccount.SmsUnitPrice.Find((MSmsChannelInfo tmp) => { return(smsPlan.Channel == tmp.Cnannel); }); } if (price == null) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "短信帐户中不存在与该广告通道对应的价格信息"; return(validateResultInfo); } if (string.IsNullOrEmpty(smsPlan.Content)) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "短信内容不能为空"; return(validateResultInfo); } if (smsPlan.Number == null || smsPlan.Number.Count < 1) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = "未填写任何接收短信人的手机号码"; return(validateResultInfo); } string keyWord = IsIncludeKeyWord(smsPlan.Content); if (!string.IsNullOrEmpty(keyWord)) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = string.Format("您要发送的短信内容中包含:{0} 这些禁止发送的关键字,请重新编辑!", keyWord); return(validateResultInfo); } //单条短信发送价格 smsPlan.UnitPrice = price.Price; //短信内容针对移动联通手机实际产生的短信条数 validateResultInfo.FactCount = GetSmsTotalCount(smsPlan.Content, MobileType.Mobiel); //短信内容针对小灵通实际产生的短信条数 validateResultInfo.PhsFactCount = GetSmsTotalCount(smsPlan.Content, MobileType.Phs); //小灵通号码个数 validateResultInfo.PhsNumberCount = GetPhsCount(smsPlan.Number); //移动联通号码个数 validateResultInfo.MobileNumberCount = smsPlan.Number.Count - validateResultInfo.PhsNumberCount; //应扣除的金额 validateResultInfo.CountFee = smsPlan.UnitPrice * (validateResultInfo.WaitSendMobileCount + validateResultInfo.WaitSendPhsCount); //本次的发送费用 smsPlan.SendAmount = validateResultInfo.CountFee; //用户账户余额 validateResultInfo.AccountMoney = modelAccount.Amount; if (validateResultInfo.AccountMoney < validateResultInfo.CountFee) { validateResultInfo.IsSucceed = false; validateResultInfo.ErrorMessage = string.Format("您的账户余额不足,当前余额为:{0},此次消费:{1}", validateResultInfo.AccountMoney.ToString("C2"), validateResultInfo.CountFee.ToString("C2")); return(validateResultInfo); } return(validateResultInfo); }