示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }