/// <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); } } }
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); }
/// <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); } }