亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

Discuz .net版本中的短消息系統第1/2頁

2024-07-10 13:20:26
字體:
來源:轉載
供稿:網友

在Discuz中,消息可以分為公用消息(管理后臺 --> 其他 -->公共消息管理)如下:

Discuz .net版本中的短消息系統第1/2頁

另外還有批量短消息發送(用戶管理):

Discuz .net版本中的短消息系統第1/2頁

以及個人用戶時的發送:

Discuz .net版本中的短消息系統第1/2頁

 

而在discuz中,短信息只用到了一張表:dnt_pms

Discuz .net版本中的短消息系統第1/2頁


其字段說明如下:

復制代碼 代碼如下:


pmid:自遞增的id
msgfrom:發送者的用戶名,若為系統消息則為“系統”。
msgfromid:發送者的id
msgto:接收者的用戶名
msgtoid:接收者的id
folder: 0、收件箱,1、發件箱,2、草稿箱
new:是否是新消息,未讀,1;0已讀
subject:標題
postdatetime:發送時間
message:消息內容


看下公用信息部分的函數:

復制代碼 代碼如下:


/// <summary>
/// 得到公共消息數量
/// </summary>
/// <returns>公共消息數量</returns>
public int GetAnnouncePrivateMessageCount()
{
return Utils.StrToInt(DbHelper.ExecuteScalar(CommandType.Text, "SELECT COUNT(pmid) FROM [" + BaseConfigs.GetTablePrefix + "pms] WHERE [msgtoid] = 0").ToString(), 0);
}


/// <summary>
/// 獲得指定用戶的短信息列表
/// </summary>
/// <param>每頁顯示短信息數</param>
/// <param>當前要顯示的頁數</param>
/// <returns>短信息列表</returns>
public IDataReader GetAnnouncePrivateMessageList(int pagesize, int pageindex)
{
string sql = "";
if(pageindex <= 1)
{
sql = string.Format("SELECT TOP {0} * FROM [{1}pms] WHERE [msgtoid] = 0 ORDER BY [pmid] DESC", pagesize, BaseConfigs.GetTablePrefix);
}
else
{
sql = string.Format("SELECT TOP {0} * FROM [{1}pms] WHERE [msgtoid] = 0 AND [pmid] < (SELECT MIN([pmid]) FROM (SELECT TOP " + (pageindex - 1) * pagesize + " [pmid] FROM [{1}pms] WHERE [msgtoid] = 0 ORDER BY [pmid] DESC) AS tblTmp) ORDER BY [pmid] DESC", pagesize, BaseConfigs.GetTablePrefix);
}

IDataReader reader = DbHelper.ExecuteReader(CommandType.Text, sql);
return reader;
}


可見:msgtoid=0為判斷是否公用信息的條件。

而在注冊部分發送一條歡迎的信息到新用戶的收件箱中,歡迎信息只有一條,而公用信息可以有很多條,每個注冊的用戶如果后臺設置了發送歡迎消息,則都會執行以下代碼:

復制代碼 代碼如下:


PrivateMessageInfo privatemessageinfo = new PrivateMessageInfo();

string curdatetime = Utils.GetDateTime();
// 收件箱
privatemessageinfo.Message = config.Welcomemsgtxt;
privatemessageinfo.Subject = "歡迎您的加入! (請勿回復本信息)";
privatemessageinfo.Msgto = userinfo.Username;
privatemessageinfo.Msgtoid = uid;
privatemessageinfo.Msgfrom = PrivateMessages.SystemUserName;
privatemessageinfo.Msgfromid = 0;
privatemessageinfo.New = 1;
privatemessageinfo.Postdatetime = curdatetime;
privatemessageinfo.Folder = 0;
PrivateMessages.CreatePrivateMessage(privatemessageinfo, 0);


而其批量發送短消息:

Discuz .net版本中的短消息系統第1/2頁



       執行方法也是讓我感到奇怪,居然是:比如我選擇了乞丐,而乞丐這個等級有10萬用戶,則取得這10W用戶的數據,一條條執行插入。暴汗……這樣算法以及實現確實簡單了很多,但會員一多,要經常清理這些數據。這也是為什么我們看到discuz的論壇經常一段時間需要清理短消息的原因。建議批量發送只對等級較高,數量較少的用戶使用。同時在使用過程中,不明白為什么在“批量短消息發送”中的“文件箱”有“收件箱”、“發件箱”、“草稿箱”3種,這里應該只有“收件箱”比較合適,或者這里根本就不該出現這個“文件箱”。

批量發送的代碼如下:

復制代碼 代碼如下:


private void BatchSendSM_Click(object sender, EventArgs e)
{
#region 批量短消息發送

if (this.CheckCookie())
{
string groupidlist = Usergroups.GetSelectString(",");

if (groupidlist == "")
{
base.RegisterStartupScript( "", "<script>alert('請您先選取相關的用戶組,再點擊提交按鈕');</script>");
return;
}

int percount = 10; //每多少記錄為一次等待
int count = 0; //當前記錄數
// GetUserNameListByGroupid為取得選中的用戶組的所有用戶的id和用戶名
foreach (DataRow dr in DatabaseProvider.GetInstance().GetUserNameListByGroupid(groupidlist).Rows)
{
DatabaseProvider.GetInstance().SendPMToUser(username.Replace("'", "''"), userid, dr["username"].ToString().Replace("'", "''"), Convert.ToInt32(dr["uid"].ToString()), int.Parse(folder.SelectedValue), subject.Text, Convert.ToDateTime(postdatetime.Text), message.Text);
if (count >= percount)
{
Thread.Sleep(3500);
count = 0;
}
count++;
}
base.RegisterStartupScript( "PAGE", "window.location.href='global_sendSMtogroup.aspx';");
}

#endregion
}

//SendPMToUser函數如下:
public void SendPMToUser(string msgfrom, int msgfromid, string msgto, int msgtoid, int folder, string subject, DateTime postdatetime, string message)
{
DbParameter[] parms =
{
DbHelper.MakeInParam("@msgfrom", (DbType)SqlDbType.NVarChar,50, msgfrom),
DbHelper.MakeInParam("@msgfromid", (DbType)SqlDbType.Int, 4, msgfromid),
DbHelper.MakeInParam("@msgto", (DbType)SqlDbType.NVarChar,50, msgto),
DbHelper.MakeInParam("@msgtoid", (DbType)SqlDbType.Int, 4, msgtoid),
DbHelper.MakeInParam("@folder", (DbType)SqlDbType.SmallInt, 2, folder),
DbHelper.MakeInParam("@subject", (DbType)SqlDbType.NVarChar,60, subject),
DbHelper.MakeInParam("@postdatetime", (DbType)SqlDbType.DateTime,8, postdatetime),
DbHelper.MakeInParam("@message",(DbType)SqlDbType.NText, 0,message)
};
string sql = "INSERT INTO [" + BaseConfigs.GetTablePrefix + "pms] (msgfrom,msgfromid,msgto,msgtoid,folder,new,subject,postdatetime,message) " +
"VALUES (@msgfrom,@msgfromid,@msgto,@msgtoid,@folder,1,@subject,@postdatetime,@message)";
DbHelper.ExecuteNonQuery(CommandType.Text, sql, parms);
sql = "UPDATE [" + BaseConfigs.GetTablePrefix + "users] SET [newpmcount]=[newpmcount]+1 WHERE [uid] =@msgtoid";
DbHelper.ExecuteNonQuery(CommandType.Text, sql, parms);
}


有一句語句是用于users用戶表中的一個字段,而用戶表中有兩個字段跟短消息是相關的:

       不明白這里為什么要用兩個字段,用newpmcount一個字段就可以判斷是否有新消息了,如果為0說明沒有新消息,而查看消息后也只需要對newpmcount進行操作,并不需要對newpm也進行操作。公用消息并不會對這兩個字段進行操作。

詳細如下,根據自己見解做了修改,在會員閱讀信息之后的具體操作大家應該都清楚,就不寫那么仔細。

Discuz .net版本中的短消息系統第1/2頁

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一级一级97网| 欧美性黄网官网| 精品偷拍一区二区三区在线看| 日韩在线观看免费网站| 91夜夜未满十八勿入爽爽影院| 国产精品精品久久久| 欧美精品在线看| 成人444kkkk在线观看| 国产欧美一区二区三区视频| 精品av在线播放| 免费不卡欧美自拍视频| 国产一区二区成人| 亚洲精品综合久久中文字幕| 狠狠色香婷婷久久亚洲精品| 国产日韩在线精品av| 亚洲在线免费视频| 精品精品国产国产自在线| 亚洲精品一区二区久| 国产精品久久久久久久av大片| 中文字幕日韩欧美在线| 成人国产精品久久久| 欧美精品电影免费在线观看| 97在线视频一区| 欧美一区三区三区高中清蜜桃| 一区二区三区 在线观看视| 日韩av大片在线| 欧美激情xxxx| 97视频免费观看| 高清一区二区三区四区五区| 国产精品自产拍在线观| 欧美精品videos另类日本| 亚洲欧美制服第一页| 亚洲成人av在线| 性色av一区二区三区免费| 亚洲影院在线看| 91色p视频在线| 欧美亚洲国产成人精品| 日韩在线免费视频| 国产精品黄页免费高清在线观看| 亚洲精品福利在线| 亚洲欧美日韩天堂一区二区| 韩日精品中文字幕| 国产亚洲免费的视频看| 亚洲男人天堂网| 免费91麻豆精品国产自产在线观看| 精品国产一区二区三区久久| 国产不卡在线观看| 国产高清在线不卡| 午夜精品久久久久久99热软件| 日韩在线播放一区| 日本久久精品视频| 欧美黑人极品猛少妇色xxxxx| 欧美视频不卡中文| 日韩中文有码在线视频| 国产精品精品国产| 大胆人体色综合| 日韩欧美视频一区二区三区| 国产美女高潮久久白浆| 亚洲人成网站色ww在线| 亚洲一区久久久| 国产极品精品在线观看| 亚洲免费小视频| 日韩a**中文字幕| 欧美噜噜久久久xxx| 欧美日韩国产va另类| 国产主播欧美精品| 欧美老肥婆性猛交视频| 狠狠躁夜夜躁人人爽超碰91| 亚洲图片制服诱惑| 国产精品99久久久久久久久久久久| 亚洲欧美精品一区| 欧美国产视频一区二区| 日韩网站免费观看高清| 奇门遁甲1982国语版免费观看高清| 黄色成人av网| 国外色69视频在线观看| 国产精品久久久久久久午夜| 欧美最近摘花xxxx摘花| 日韩av片永久免费网站| 成人免费网站在线看| 777精品视频| 成人激情视频在线播放| 深夜福利91大全| 亚洲va码欧洲m码| 亚洲第一区在线| 欧美一区二区大胆人体摄影专业网站| 国产精品一二三视频| 日本高清视频一区| 色小说视频一区| 久久久久国产精品免费网站| 中文字幕一精品亚洲无线一区| 亚洲毛片在线免费观看| 久久精品一区中文字幕| 欧美一级视频免费在线观看| 国产亚洲精品综合一区91| 日韩在线播放视频| 亚洲欧美日韩综合| 国产日本欧美在线观看| 成人在线观看视频网站| 亚洲欧美综合另类中字| 91精品国产91久久久久福利| 欧美洲成人男女午夜视频| 色哟哟亚洲精品一区二区| 久久伊人91精品综合网站| 国产精品1234| 久久精品国产清自在天天线| 欧美激情视频播放| 欧美影院久久久| 欧美日韩午夜视频在线观看| 国产精品高潮呻吟久久av黑人| 欧美日韩亚洲精品一区二区三区| 欧美激情xxxx| 亚洲美女在线看| 欧美黄色性视频| 国产视频精品久久久| 亚洲精品99久久久久| 国产在线98福利播放视频| 大胆欧美人体视频| 日本精品免费一区二区三区| 亚洲美女在线视频| 欧美福利视频在线| 欧美性高潮在线| 欧美亚洲国产日韩2020| 97久久精品人搡人人玩| 中文字幕九色91在线| 在线播放国产一区中文字幕剧情欧美| 97视频在线观看亚洲| 久久久精品国产亚洲| 欧美日韩另类在线| 亚洲第一黄色网| 51ⅴ精品国产91久久久久久| 国产欧美精品日韩| 欧美精品在线视频观看| 亚洲精品美女视频| 狠狠躁夜夜躁人人躁婷婷91| 亚洲xxxxx电影| 成人情趣片在线观看免费| 欧美性感美女h网站在线观看免费| 欧美成人免费在线观看| 日韩高清欧美高清| 成人免费大片黄在线播放| 欧美一级淫片videoshd| 国产免费一区视频观看免费| 欧美成人四级hd版| 精品国产欧美一区二区五十路| 久久久久久伊人| 日韩av中文在线| 第一福利永久视频精品| 欧美自拍大量在线观看| 欧美日韩激情美女| 亚洲电影免费观看高清完整版在线| 一本色道久久88综合亚洲精品ⅰ| 成人免费视频a| 国内外成人免费激情在线视频| 精品久久久久久亚洲国产300| 精品视频9999| 亚洲欧美国产精品久久久久久久| 91久久精品在线| 国产综合福利在线| 97在线观看视频国产| 国产一区二区丝袜高跟鞋图片| 高清一区二区三区日本久| 久久久久久亚洲精品不卡| 国产精品99久久99久久久二8|