/// <summary>
        /// 更新状态回执
        /// </summary>
        /// <param name="msgid">msgid</param>
        /// <param name="reportstatus">状态</param>
        /// <returns></returns>
        private void UpdateReportState(string msgid, string srcnumber, string reportstatus)
        {
            string status = reportstatus;

            if (reportstatus.Equals("DELIVRD"))
            {
                status = "1";
            }
            else
            {
                status = "-1";
            }
            SmsModel sm = this.GetFormCache(msgid);

            string sql = string.Format("update t_smsmobile_t set ReportStatus='{0}' ,ErrorCode='{1}',SrcNo='{2}' where  MsgId='{3}' ", status, reportstatus, srcnumber, msgid);

            if (sm != null)
            {
                sql = string.Format("update t_smsmobile_t set ReportStatus='{0}' ,ErrorCode='{1}',SrcNo='{2}' where  Id='{3}' ", status, reportstatus, srcnumber, sm.id);
            }
            Random            rand = new Random();
            int               i    = rand.Next(0, _reportQueueNum + 1);
            SqlStatementModel sqlm = new SqlStatementModel();

            sqlm.MySqlCmdParms = null;
            sqlm.CmdTxt        = sql;
            sqlm.CmdType       = CommandType.Text;
            sqlm.ExecTimer     = 1;
            ReportQueue[i].AddSql(sqlm);

            string sqlstate = "";

            if (sm != null)
            {
                object[] obj = { sm.eprId, sm.userId, sm.mobile, sm.clientMsgId, status };
                sqlstate = string.Format("insert into t_pushsmsmsg(EprId,UserId,Mobile,ClientMsgId,Status,AddTime) values('{0}','{1}','{2}','{3}','{4}',now())", obj);
            }
            else
            {
                string    sel = string.Format("select * from t_smsmobile_t where MsgId='{0}'", msgid);
                DataTable dt  = MySqlDBExec.GetDateTable(sel, null);
                if (dt != null && dt.Rows.Count > 0)
                {
                    object[] obj = { dt.Rows[0]["EprId"], dt.Rows[0]["UserId"], dt.Rows[0]["Mobile"], dt.Rows[0]["ClientMsgId"], status };
                    sqlstate = string.Format("insert into t_pushsmsmsg(EprId,UserId,Mobile,ClientMsgId,Status,AddTime) values('{0}','{1}','{2}','{3}','{4}',now())", obj);
                }
            }
            if (!string.IsNullOrEmpty(sqlstate))
            {
                SqlStatementModel seq = new SqlStatementModel();
                seq.MySqlCmdParms = null;
                seq.CmdTxt        = sqlstate;
                seq.CmdType       = CommandType.Text;
                seq.ExecTimer     = 1;
                ReportSeqQueue[i].AddSql(seq);
            }
        }
        /// <summary>
        /// 更新手机号码提交状态、MSGID
        /// </summary>
        /// <param name="id">id</param>
        /// <param name="state">提交结果</param>
        /// <param name="msgid">msgid</param>
        /// <param name="srcno">发送号码</param>
        /// <returns></returns>
        private void UpdateMobileSubmitState(string id, string state, string msgid, string remark, string srcno)
        {
            int submitstatu = 0;

            if (state.Equals("0"))
            {
                submitstatu = 1;
                remark      = "成功";
            }
            string sql = string.Format("update t_smsmobile_t set MsgId='{0}',SubmitStatus='{1}',ErrorCode='{2}',Remark='{3}',SrcNo='{4}' where  id='{5}' ", msgid, submitstatu, state, remark, srcno, id);
            int    re  = 0;
            int    i   = 0;

            do
            {
                re = MySqlDBExec.ExecuteNonQuery(sql, null);
                i++;
            } while (re <= 0 && i < 3);

            if (re < 1)
            {
                SMSLog.Debug("SmsService==>UpdateMobileSubmitState[FailSql]:" + sql);
            }

            //重新加入缓存
            SmsModel sm = this.GetFormCache(id);

            if (sm != null)
            {
                this.AddCache(msgid, sm);
            }
            //失败状态,写入状态流水表
            if (submitstatu == 0)
            {
                if (sm != null)
                {
                    object[]          obj      = { sm.eprId, sm.userId, sm.mobile, sm.clientMsgId, submitstatu };
                    string            sqlstate = string.Format("insert into t_pushsmsmsg(EprId,UserId,Mobile,ClientMsgId,Status,AddTime) values('{0}','{1}','{2}','{3}','{4}',now())", obj);
                    Random            rand     = new Random();
                    int               ii       = rand.Next(0, _reportQueueNum + 1);
                    SqlStatementModel seq      = new SqlStatementModel();
                    seq.MySqlCmdParms = null;
                    seq.CmdTxt        = sqlstate;
                    seq.CmdType       = CommandType.Text;
                    seq.ExecTimer     = 1;
                    ReportSeqQueue[ii].AddSql(seq);
                }
            }
        }
示例#3
0
        public bool AddSql(SqlStatementModel sm)
        {
            bool ret = false;

            try
            {
                lock (((ICollection)sqlueue).SyncRoot)
                {
                    sqlueue.Enqueue(sm);
                }
                ret = true;
            }
            catch (Exception ex)
            {
                MySqlDBExec.ExecuteNonQuery(sm.CmdTxt, sm.MySqlCmdParms);
                SMSLog.Error("SMDQueue::addSql", "=================>Exception:" + ex.Message);
                ret = false;
            }
            return(ret);
        }
示例#4
0
        /// <summary>
        /// 批量保存
        /// </summary>
        /// <returns></returns>
        private void BatchSaveSql(object obj)
        {
            try
            {
                List <SqlStatementModel> sqlList = new List <SqlStatementModel>();
                try
                {
                    if (sqlueue != null && sqlueue.Count > 0)
                    {
                        lock (((ICollection)sqlueue).SyncRoot)
                        {
                            for (int i = 0; i < _maxexecnum; i++)
                            {
                                if (i > sqlueue.Count)
                                {
                                    break;
                                }
                                SqlStatementModel sm = sqlueue.Dequeue();
                                if (sm != null)
                                {
                                    sqlList.Add(sm);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        queueStatus.Set();
                    }
                }
                catch (Exception ex)
                {
                    SMSLog.Error("SMDQueue::BatchSaveSql(Dequeue):Exception:", ex.Message);
                }

                if (sqlList != null && sqlList.Count > 0)
                {
                    DateTime tmStart = DateTime.Now;
                    List <SqlStatementModel> reList = dbexec.BatchExec(sqlList);
                    int re = 0;
                    if (reList != null)
                    {
                        re = reList.Count;
                        foreach (SqlStatementModel resm in reList)
                        {
                            resm.ExecTimer++;
                            if (resm.ExecTimer < _maxexectimer)
                            {
                                SMSLog.Debug("SMDQueue==>BatchSaveSql=>Result Fail[" + resm.ExecTimer + "]" + resm.ToString());
                                this.AddSql(resm);
                            }
                            else
                            {
                                if (resm.CmdType == System.Data.CommandType.Text)
                                {
                                    SMSLog.Debug("SMDQueue==>BatchSaveSql[FailSql]:" + resm.ToString());
                                }
                                else
                                {
                                    SMSLog.Debug("SMDQueue==>BatchSaveSql[FailProc]:" + resm.ToString());
                                }
                            }
                        }
                    }
                    SMSLog.Debug("SMDQueue::BatchSaveSql", " BatchExcSql (" + sqlList.Count + "),Result Fail:" + re + "]时间: " + (DateTime.Now - tmStart).TotalMilliseconds + "毫秒");
                }
            }
            catch (Exception EX)
            {
                SMSLog.Error("SMDQueue::BatchSaveSql:Exception:", EX.Message);
            }
        }