private List <AccountInfoModel> LoadCmppAccount() { List <AccountInfoModel> lst = null; string sql = "select * from t_spaccountinfo"; DataTable dt = MySqlDBExec.GetDateTable(sql, null); if (dt != null && dt.Rows.Count > 0) { lst = new List <AccountInfoModel>(); for (int i = 0; i < dt.Rows.Count; i++) { AccountInfoModel aim = new AccountInfoModel(); aim.eprId = int.Parse(dt.Rows[i]["EprId"].ToString()); aim.loginname = dt.Rows[i]["LoginName"].ToString(); aim.password = dt.Rows[i]["Password"].ToString(); aim.senddelay = int.Parse(dt.Rows[i]["SendDelay"].ToString()); aim.serviceid = dt.Rows[i]["ServiceId"].ToString(); aim.spid = dt.Rows[i]["Pid"].ToString(); aim.protocolType = dt.Rows[i]["ProtocolType"].ToString(); aim.serviceIp = dt.Rows[i]["ServiceIp"].ToString(); aim.servicePort = int.Parse(dt.Rows[i]["ServicePort"].ToString()); aim.spnumber = dt.Rows[i]["Spnumber"].ToString(); lst.Add(aim); } } return(lst); }
/// <summary> /// 删除内容 /// </summary> /// <param name="id">内容表id</param> /// <returns></returns> private void DeleteContent(string id) { string delsql = string.Format("delete from t_sendsms where id={0} and CMSubmitStatus='1' and CUSubmitStatus='1' and CTSubmitStatus='1' ", id); int result = MySqlDBExec.ExecuteNonQuery(delsql, null); if (result == 0) { SMSLog.Debug("SmsService==>DeleteContent[FailSql]:" + delsql); } }
/// <summary> /// 修改ct提交状态,待下次读取 /// </summary> /// <param name="id">内容表id</param> /// <param name="cTSubmitStatus">状态0 可读取,1已发完</param> /// <returns></returns> private void UpdateSMSContentSubmitStatu(string id, int cTSubmitStatus) { string sql = string.Format("update t_sendsms set CTSubmitStatus={0} where Id={1} ", cTSubmitStatus, id); int result = MySqlDBExec.ExecuteNonQuery(sql, null); if (result == 0) { SMSLog.Debug("SmsService==>UpdateSMSContentSubmitStatu[FailSql]:" + sql); } }
/// <summary> /// 根据批次号修改手机号码表状态 /// </summary> /// <param name="state">状态:0未提交,-1失败,1成功</param> /// <param name="batchnum">批次号</param> /// <param name="errorCode">错误码</param> /// <param name="errMsg">错误说明</param> /// <returns></returns> private void UpdateMobileByBatchNum(int state, string batchnum, string errorCode, string errMsg) { string sql = string.Format("update t_smsmobile_t set SubmitStatus={0},ErrorCode='{1}',Remark='{2}' where BatchNum='{3}'", state, errorCode, errMsg, batchnum); int result = MySqlDBExec.ExecuteNonQuery(sql, null); if (result == 0) { SMSLog.Debug("SmsService==>UpdateSMSContentSubmitStatu[FailSql]:" + sql); } }
/// <summary> /// 加载待发短信内容sql /// </summary> /// <returns></returns> protected string GetLoadMessageSql() { string rand = GetTimesTamp(DateTime.Now).ToString(); string updatesql = "update t_sendsms set CTSubmitStatus='" + rand + "' where SendTime < NOW() and CheckStatus='1' and CTSubmitStatus='0' and (CTGatewayNum ='" + lp.GateWayNum + "' or CTGatewayNum='1001') order by Priority,SendTime limit " + lp.ReadContentNum + " "; int result = MySqlDBExec.ExecuteNonQuery(updatesql, null); if (result > 0) { string selecesql = "select * from t_sendsms where CTSubmitStatus='" + rand + "' and (CTGatewayNum ='" + lp.GateWayNum + "' or CTGatewayNum='1001') order by Priority,SendTime "; return(selecesql); } return(""); }
/// <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); } } }
/// <summary> /// 读取手机号码 /// </summary> /// <param name="batchnum">批次号</param> /// <returns></returns> public DataTable LoadMobile(string batchnum) { string gwno = lp.GateWayNum + ""; string rand = GetTimesTamp(DateTime.Now).ToString(); //string sendtime = DateTime.Now.AddHours(-1).ToString(); string updatecondition = " where GatewayNum ='" + gwno + "' and smsFlag='0' and SubmitStatus='0' and SendTime>date_add(now(),interval -1 hour) and BatchNum='" + batchnum + "'"; string updatesql = "update t_smsmobile_t set smsFlag=" + rand + " where GatewayNum ='" + gwno + "' and smsFlag='0' and SubmitStatus='0' and BatchNum='" + batchnum + "' order by SendTime limit " + lp.ReadMobileNum; if (MySqlDBExec.ExecuteNonQuery(updatesql, null) > 0) { string selectsql = "select * from t_smsmobile_t where SendTime>date_add(now(),interval -1 hour) and smsFlag='" + rand + "' and GatewayNum ='" + gwno + "' and SubmitStatus='0' and BatchNum='" + batchnum + "'"; DataTable dt = MySqlDBExec.GetDateTable(selectsql, null); return(dt); } return(null); }
private AccountInfoModel GetAccountInfo(int eprId) { string sql = "select * from t_accountInfo where EprId=" + eprId; DataTable dt = MySqlDBExec.GetDateTable(sql, null); if (dt != null && dt.Rows.Count > 0) { AccountInfoModel aim = new AccountInfoModel(); aim.eprId = int.Parse(dt.Rows[0]["EprId"].ToString()); aim.loginname = dt.Rows[0]["LoginName"].ToString(); aim.password = dt.Rows[0]["Password"].ToString(); aim.senddelay = int.Parse(dt.Rows[0]["SendDelay"].ToString()); aim.serviceid = dt.Rows[0]["ServiceId"].ToString(); aim.spid = dt.Rows[0]["Pid"].ToString(); aim.protocolType = dt.Rows[0]["ProtocolType"].ToString(); aim.serviceIp = dt.Rows[0]["ServiceIp"].ToString(); aim.servicePort = int.Parse(dt.Rows[0]["ServicePort"].ToString()); return(aim); } return(null); }
private void CollectThread(object obj) { if (GlobalModel.IsStopCollect) { return; } string sql = GetLoadMessageSql(); if (!string.IsNullOrEmpty(sql)) { DataTable dt = MySqlDBExec.GetDateTable(sql, null); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { string CTGatewayNum = dt.Rows[i]["CTGatewayNum"].ToString(); string id = dt.Rows[i]["Id"].ToString(); string batchnum = dt.Rows[i]["BatchNum"].ToString(); string eprId = dt.Rows[i]["EprId"].ToString(); string con = dt.Rows[i]["Content"].ToString();//短信内容 int mobileCount = 0; int.TryParse(dt.Rows[i]["MobileCount"].ToString(), out mobileCount); if (CTGatewayNum.Equals("1001")) { SMSLog.Debug("SMDDatabase==>该批次号[" + batchnum + "]1001不发送,修改tcsubmitstate状态为1 并试图删除"); UpdateSMSContentSubmitStatu(id, 1); this.DeleteContent(id); UpdateMobileByBatchNum(-1, batchnum, "1001", "限制网关"); continue; } DataTable dt_mobile = this.LoadMobile(batchnum);//根据批次号取发送号码 if (dt_mobile != null && dt_mobile.Rows.Count > 0) { for (int j = 0; j < dt_mobile.Rows.Count; j++) { SmsModel msg = new SmsModel(); msg.content = con; //短信内容 msg.contentId = id; //内容表ID if (FillMessage(dt_mobile.Rows[j], msg)) { AddQueue(msg.eprId, msg); //加入待发队列 AddCache(msg.id + "", msg); //加入缓存 } } if (dt_mobile.Rows.Count <= mobileCount) { SMSLog.Debug("SMDDatabase==>该批次号[" + batchnum + "]已读取完,修改tcsubmitstate状态为1 并试图删除"); UpdateSMSContentSubmitStatu(id, 1); this.DeleteContent(id); } else { UpdateSMSContentSubmitStatu(id, 0);//改变状态,待下次读取 } } else { try { SMSLog.Debug("SMDDatabase==>无该批次号[" + batchnum + "]手机号码,修改tcsubmitstate状态为1 并试图删除"); UpdateSMSContentSubmitStatu(id, 1); this.DeleteContent(id); } catch (Exception ex) { SMSLog.Error("SMDDatabase::CollectThread", "删除异常: " + ex.Message); } } }//for } } }