public ActionResult SendMsg(string touid, string msg, string fromusername, string tousername, int isgroup = 1) { var fromuid = LoginUserService.ssoUserID; var item = new IMMsg { FromuID = fromuid, CreateDate = DateTime.Now, Msg = msg, TouID = touid, CreateUser = fromuid, fromusername = fromusername, tousername = tousername, isgroup = isgroup }; var photo = ConfigHelper.GetConfigString("sso_host_name") + "pic/" + LoginUserService.ssoUserID; unitOfWork.DIMMsg.Insert(item); var result = unitOfWork.Save(); if (result.ResultType == OperationResultType.Success) { //此群组包含的用户 即群聊要通知的用户 List <string> touids = unitOfWork.DImGroupDetail.Get(p => p.GroupID == touid && p.UserID != fromuid).Select(p => p.UserID).ToList(); return(Json(new { r = true, msgtime = item.CreateDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), msgcontent = item.Msg, photo = photo, msgid = item.ID, touids = touids }, JsonRequestBehavior.AllowGet)); } else { return(Json(new { r = false, m = "操作失败!\n" + result.Message }, JsonRequestBehavior.AllowGet)); } }
public ActionResult SendMsg(string touid, string msg, string fromusername, string tousername, int isgroup = 0) { var fromuid = LoginUserService.ssoUserID; var item = new IMMsg { FromuID = fromuid, CreateDate = DateTime.Now, Msg = msg, TouID = touid, CreateUser = fromuid, fromusername = fromusername, tousername = tousername, isgroup = isgroup //是否是群组消息标记 }; var photo = ConfigHelper.GetConfigString("sso_host_name") + "pic/" + LoginUserService.ssoUserID; unitOfWork.DIMMsg.Insert(item); var result = unitOfWork.Save(); if (result.ResultType == OperationResultType.Success) { return(Json(new { r = true, msgtime = item.CreateDate.Value.ToString("yyyy/MM/dd HH:mm:ss"), msgcontent = item.Msg, photo = photo, msgid = item.ID }, JsonRequestBehavior.AllowGet)); } else { return(Json(new { r = false, m = "操作失败!\n" + result.Message }, JsonRequestBehavior.AllowGet)); } }
/// <summary> /// 移除未读聊天消息中的某一条消息 /// </summary> /// <param name="name"></param> /// <param name="key"></param> /// <param name="model"></param> public static void RemoveRedisKeyValue(string name, string key, IMMsg model) { var str0 = RedisHelper.Hash_Get <string>(name, key) ?? ""; var msgList = JsonConvert.DeserializeObject <List <IMMsg> >(str0); if (msgList != null && msgList.Any()) { var index = -1; for (int i = 0; i < msgList.Count; i++) { if (msgList[i].ID == model.ID) { index = i; } } msgList.RemoveAt(index); var strf = JsonConvert.SerializeObject(msgList); RedisHelper.Hash_Remove(name, key); RedisHelper.Hash_Set <string>(name, key, strf); } }
/// <summary> /// 将消息添加到数据库中 若添加失败,则返回0 /// 若是重复消息,则返回-1 /// </summary> /// <param name="msg"></param> /// <returns></returns> public int InsertMsg(Msg msg) { try { var unitOfWork = new UnitOfWork(); //查询是不是重发的(主要是关于移动端的)添加前先查询是否已经存在对应的数据 if (!string.IsNullOrEmpty(msg.id1)) { var query = unitOfWork.DIMMsg.Get(p => p.FromuID == msg.fromuid && p.id1 == msg.id1).FirstOrDefault(); if (query != null) { LoggerHelper.Error("尝试添加一条重复的消息:" + JsonConvert.SerializeObject(msg)); return(-1); } } var immsg = new IMMsg { FromuID = msg.fromuid, CreateDate = DateTime.Now, TouID = msg.touid, CreateUser = msg.fromuid, QuoteContent = msg.quoteContent, fromusername = msg.fromrealname, tousername = msg.torealname, isgroup = msg.isgroup, Type = msg.msgtype.ToString(), id1 = string.Empty,//默认为空 IsDel = 0, NewFileName = string.Empty, Msg = msg.msg, IsNotice = false, FileUrl = msg.filename, ThumbCount = 0, }; if (msg.quoteId != null) { immsg.QuoteId = msg.quoteId; } else { immsg.QuoteId = 0; } if (!string.IsNullOrEmpty(msg.id1)) { immsg.id1 = msg.id1; } if (msg.msgtype == 0) { //纯文本消息 //去掉html标签 immsg.Msg = RemoveHTML(msg.msg); } else if (msg.msgtype == 1) { //单张图片,存放的是图片的url //immsg.Msg = msg.msg; immsg.FileUrl = msg.filename; } else if (msg.msgtype == 2) { //文件消息 immsg.Msg = msg.filename; immsg.FileUrl = msg.msg; //暂时用Duration这个字段来存放文件的大小,以字节为单位 immsg.Duration = msg.duration; /* * 1.取出filecode */ if (msg.msg.Contains("&fileCode=")) { var index = msg.msg.LastIndexOf("&fileCode="); var fileCode = msg.msg.Substring(index + 10); immsg.NewFileName = fileCode; } } else if (msg.msgtype == 3) { //图文混合消息, immsg.Msg = msg.msg; immsg.ImgList = ""; foreach (var img in msg.imglist) { immsg.ImgList += img + ";"; } } else if (msg.msgtype == 4) { //语音消息 immsg.Msg = "语音消息"; immsg.FileUrl = msg.msg; immsg.Duration = msg.duration; } else if (msg.msgtype == 5) { //地图类消息 用这个字段存放json var p = new GDPosition(); p.latitude = msg.filename; p.address = msg.msg; immsg.Msg = JsonConvert.SerializeObject(p); } immsg.SubjectId = "0";//默认为0 if (!string.IsNullOrEmpty(msg.subjectId)) { if (msg.subjectId == "null") { immsg.SubjectId = "0"; } else { immsg.SubjectId = msg.subjectId; } } msg.msgtime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); unitOfWork.DIMMsg.Insert(immsg); var result = unitOfWork.Save(); if (result.ResultType == OperationResultType.Success) { msg.id0 = immsg.ID.ToString(); Task.Run(() => { /*2019年5月13日 新增,更新最近聊天发送聊天记录的数据,这里只更新单人聊天*/ if (msg.isgroup == 0) { var query = unitOfWork.DRecentContacts.Get( p => (p.uID == msg.fromuid && p.ContactID == msg.touid) || (p.uID == msg.touid && p.ContactID == msg.fromuid)) .FirstOrDefault(); if (query != null) { query.ContactDate = Convert.ToDateTime(msg.msgtime); unitOfWork.DRecentContacts.Update(query); } else { var item = new RecentContacts(); item.uID = msg.fromuid; item.ContactID = msg.touid; item.ContactDate = DateTime.Now; unitOfWork.DRecentContacts.Insert(item); } unitOfWork.Save(); } }); return(immsg.ID); } return(0); } catch (Exception ex) { //记录下异常 LoggerHelper.Error(ex.ToString()); return(0); } }
public static Msg ImMsg2Msg(IMMsg item) { var msg = new Msg(); msg.fromuid = item.FromuID; msg.touid = item.TouID; msg.isgroup = item.isgroup; msg.fromrealname = item.fromusername; msg.torealname = item.tousername; msg.id0 = item.ID.ToString(); msg.id1 = item.id1; msg.msgtime = item.CreateDate.Value.ToString("yyyy/MM/dd HH:mm:ss"); msg.msgtype = Convert.ToInt32(item.Type); msg.filename = ""; msg.duration = item.Duration;//默认为0 如果是文件类型,则存放文件的大小 单位是KB msg.imglist = new List <string>(); msg.msg = item.Msg; msg.thumbCount = item.ThumbCount; msg.selfThumb = false; if (item.QuoteId != null) { msg.quoteId = item.QuoteId; } else { msg.quoteId = 0; } msg.quoteContent = item.QuoteContent; if (msg.msgtype == 0) { //纯文本 msg.msg = item.Msg; } else if (msg.msgtype == 1) { //单个图片 msg.msg = item.Msg; msg.filename = item.FileUrl; } else if (msg.msgtype == 2) { //文件 msg.msg = item.FileUrl; msg.filename = item.Msg; msg.duration = item.Duration; } else if (msg.msgtype == 3) { //图文混合 msg.msg = item.Msg; if (!string.IsNullOrEmpty(item.ImgList)) { msg.imglist = item.ImgList.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList(); } } else if (msg.msgtype == 4) { //语音 msg.msg = item.FileUrl; msg.duration = item.Duration; } else if (msg.msgtype == 5) { //地图签到类消息 var p = JsonConvert.DeserializeObject <GDPosition>(item.Msg); msg.msg = p.address; msg.filename = p.latitude; } else if (msg.msgtype == 6) { //群组视频聊天消息 纯文本,忽略 } else if (msg.msgtype == 7) { //视频类消息 已经存放了视频地址的url 忽略 } else if (msg.msgtype == 8) { //回执类的消息 忽略 } else if (msg.msgtype == 9 || msg.msgtype == 10) { //协同文档、协同研讨类消息 msg.filename = item.FileUrl; } msg.subjectId = ""; msg.subjectTitle = ""; if (!string.IsNullOrEmpty(item.SubjectId)) { msg.subjectId = item.SubjectId; } return(msg); }