예제 #1
0
        /// <summary>
        /// 发送短信
        /// </summary>
        /// <param name="info">计划信息</param>
        private void SendSms(Model.BackgroundServices.MSmsCenterService info)
        {
            if (info == null || string.IsNullOrEmpty(info.Content) || info.Number == null || info.Number.Count < 1)
            {
                return;
            }

            //每次调用发送接口时待发送的手机号码
            var waitMobiles = new StringBuilder();
            //总的要发送的手机号码个数
            int waitMobileLength = info.Number.Count;

            for (int indexC = 0; indexC < waitMobileLength; indexC++)
            {
                waitMobiles.AppendFormat("{0},", info.Number[indexC].Code);

                #region 判断是否开始发送短信

                //号码数量达到100或者循环完全部的号码时发送短信
                if ((indexC + 1) % WaitCanMobilesMax == 0 || (indexC + 1) == waitMobileLength)
                {
                    int sendResult = 0;
                    //string sendMsg = "";
                    try
                    {
                        _sms.Timeout = 1000;
                        Model.BackgroundServices.MSmsChannel smsChannel = SmsUtils.GetSmsChannelByChannel(info.Channel);
                        //发送结果返回值 返回int类型的0时成功 返回对应的负数时失败
                        sendResult = _sms.SendSms(_enterpriseId, waitMobiles.ToString().TrimEnd(','), info.Content,
                                                  smsChannel.UserName, smsChannel.Pw);
                        //sendMsg = GetServicesState(sendResult);
                    }
                    catch
                    {
                        //sendMsg = "超时";
                        sendResult = SendTimeOutEventCode;
                    }

                    //发送失败记录发送失败的号码
                    if (sendResult != 0)
                    {
                        _dal.AddSmsPlanLose(info.PlanId, sendResult, waitMobiles.ToString().TrimEnd(','));
                    }

                    //要发送的号码清空
                    waitMobiles.Remove(0, waitMobiles.Length);
                }

                #endregion 判断是否开始发送短信
            }
        }
예제 #2
0
        /// <summary>
        /// 获得要发送的短信
        /// </summary>
        /// <param name="topNum">每次获取待发送短信的条数</param>
        /// <returns></returns>
        public Queue <Model.BackgroundServices.MSmsCenterService> GetSends(int topNum)
        {
            if (topNum <= 0)
            {
                topNum = 10;
            }

            var list   = new Queue <Model.BackgroundServices.MSmsCenterService>();
            var strSql = new StringBuilder(" SELECT ");

            strSql.AppendFormat(
                " top {0} [PlanId],[Channel],[Content],[Amount],[UnitPrice],[IssueTime],[IsSend],[SendTime] ", topNum);
            strSql.Append(" ,(select [Code],[Type] from tbl_SmsPlan114 where tbl_SmsPlan114.PlanId = tbl_SmsPlan.PlanId for xml raw,root('root')) as number ");
            strSql.Append(" FROM [tbl_SmsPlan] ");
            strSql.Append(" where [IsSend] = @IsSend ");
            strSql.Append(" ORDER BY [IssueTime] asc ");
            DbCommand dc = _db.GetSqlStringCommand(strSql.ToString());

            _db.AddInParameter(dc, "IsSend", DbType.AnsiStringFixedLength, "0");

            using (IDataReader dr = DbHelper.ExecuteReader(dc, _db))
            {
                Model.BackgroundServices.MSmsCenterService model;
                while (dr.Read())
                {
                    model = new Model.BackgroundServices.MSmsCenterService();
                    if (!dr.IsDBNull(dr.GetOrdinal("PlanId")))
                    {
                        model.PlanId = dr.GetString(dr.GetOrdinal("PlanId"));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("Channel")))
                    {
                        model.Channel = (Model.BackgroundServices.Channel)dr.GetByte(dr.GetOrdinal("Channel"));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("Content")))
                    {
                        model.Content = dr.GetString(dr.GetOrdinal("Content"));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("Amount")))
                    {
                        model.SendAmount = dr.GetDecimal(dr.GetOrdinal("Amount"));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("UnitPrice")))
                    {
                        model.UnitPrice = dr.GetDecimal(dr.GetOrdinal("UnitPrice"));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("IssueTime")))
                    {
                        model.IssueTime = dr.GetDateTime(dr.GetOrdinal("IssueTime"));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("IsSend")))
                    {
                        model.IsSend = GetBoolean(dr.GetString(dr.GetOrdinal("IsSend")));
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("SendTime")))
                    {
                        model.SendTime = dr.GetDateTime(dr.GetOrdinal("SendTime"));
                    }
                    else
                    {
                        model.SendTime = null;
                    }
                    if (!dr.IsDBNull(dr.GetOrdinal("number")))
                    {
                        model.Number = GetSmsCenterPlanNumber(dr.GetString(dr.GetOrdinal("number")));
                    }

                    list.Enqueue(model);
                }
            }

            IList <string> smsPlans = (from t in list where t != null && !string.IsNullOrEmpty(t.PlanId) select t.PlanId).ToList();

            UpdateSmsPlanState(true, DateTime.Now, smsPlans.ToArray());

            return(list);
        }