Beispiel #1
0
        /// <summary>
        /// 发送短信
        /// </summary>
        /// <param name="smsPlan">发送短信提交的业务实体</param>
        /// <returns></returns>
        public MSendResult Send(MSmsPlan smsPlan)
        {
            //发送短信验证
            MSendResult validateResultInfo = ValidateSend(smsPlan);

            if (!validateResultInfo.IsSucceed)
            {
                return(validateResultInfo);
            }

            smsPlan.IsSend    = false;
            smsPlan.SendTime  = null;
            smsPlan.IssueTime = DateTime.Now;
            int result = _dalPlan.AddSmsPlan(smsPlan);

            if (result == 1)
            {
                validateResultInfo.IsSucceed       = true;
                validateResultInfo.ErrorMessage    = "发送成功";
                validateResultInfo.SmsCenterPlanId = smsPlan.PlanId;
                validateResultInfo.AccountMoney    = validateResultInfo.AccountMoney - validateResultInfo.CountFee;

                validateResultInfo.SuccessCount    = validateResultInfo.MobileNumberCount;
                validateResultInfo.PhsSuccessCount = validateResultInfo.PhsNumberCount;

                //扣除费用
                _dalAccount.UpdateSmsAccountAmount(smsPlan.SmsAccount.AccountId, smsPlan.SmsAccount.AppKey, false,
                                                   validateResultInfo.CountFee);
            }
            else
            {
                validateResultInfo.IsSucceed    = false;
                validateResultInfo.ErrorMessage = "写短信发送信息时发生错误,请联系管理员";
                return(validateResultInfo);
            }

            return(validateResultInfo);
        }
Beispiel #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);
        }