Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        /// <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);
            }
        }
Esempio n. 5
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);
        }