using LeaRun.Application.Entity.MessageManage; using LeaRun.Application.IService.MessageManage; using LeaRun.Data; using LeaRun.Data.Repository; using LeaRun.Util; using LeaRun.Util.Extension; using LeaRun.Util.WebControl; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Text; namespace LeaRun.Application.Service.MessageManage { /// /// 版 本 V6.1 /// Copyright (c) 2013-2016 上海力软信息技术有限公司 /// 创建人:陈彬彬 /// 日 期:2015.11.26 19:39 /// 描 述:即时通信群组管理 /// public class IMContentService : RepositoryFactory, IMsgContentService { /// /// 获取消息列表(单对单) /// /// /// /// public IEnumerable GetList(Pagination pagination, string userId, string sendId,string flag = "1") { var strSql = new StringBuilder(); strSql.Append(@"SELECT * from( SELECT t1.ReadId , t1.ContentId , t1.CreateDate , t1.UserId , t2.SendId , t2.MsgContent as Content FROM IM_Read t1 INNER JOIN IM_Content t2 ON t1.ContentId = t2.ContentId and t2.IsGroup = 0)T WHERE 1=1 "); var parameter = new List(); //信息接收者 if (!userId.IsEmpty()) { if (flag == "1" && !sendId.IsEmpty())//获取一个聊天窗口的消息记录 { strSql.Append(" AND ( T.UserId = @UserId or T.UserId = @UserId2 )"); parameter.Add(DbParameters.CreateDbParameter("@UserId", userId.ToString())); parameter.Add(DbParameters.CreateDbParameter("@UserId2", sendId.ToString())); } else { strSql.Append(" AND T.UserId = @UserId"); parameter.Add(DbParameters.CreateDbParameter("@UserId", userId.ToString())); } } //信息发送者 if (!sendId.IsEmpty()) { if (flag == "1" && !userId.IsEmpty())//获取一个聊天窗口的消息记录 { strSql.Append(" AND ( T.SendId = @SendId or T.SendId = @SendId2 )"); parameter.Add(DbParameters.CreateDbParameter("@SendId", sendId.ToString())); parameter.Add(DbParameters.CreateDbParameter("@SendId2", userId.ToString())); } else { strSql.Append(" AND T.SendId = @SendId"); parameter.Add(DbParameters.CreateDbParameter("@SendId", sendId.ToString())); } } return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination); } /// /// 获取消息列表(群组) /// /// /// /// public IEnumerable GetListByGroupId(Pagination pagination, string queryJson) { var strSql = new StringBuilder(); strSql.Append(@"SELECT t.ContentId , t.SendId , t.ToId , t.MsgContent , t.CreateDate FROM IM_Content t WHERE t.IsGroup = 1"); var parameter = new List(); var queryParam = queryJson.ToJObject(); //群组Id if (!queryParam["groupId"].IsEmpty()) { strSql.Append(" AND t.ToId = @ToId"); parameter.Add(DbParameters.CreateDbParameter("@ToId", queryParam["groupId"].ToString())); } return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination); } /// /// 获取消息数量列表 /// /// readStatus,userId /// public IEnumerable GetReadList(string userId) { var strSql = new StringBuilder(); strSql.Append(@"SELECT SUM( CASE WHEN t1.ReadStatus = 0 THEN 1 ELSE 0 END )AS unReadNum, t1.SendId, t1.UserId FROM IM_Read t1 WHERE 1 = 1 "); var parameter = new List(); //接收者Id if (!userId.IsEmpty()) { strSql.Append(" AND ( t1.UserId = @UserId OR t1.SendId = @UserId )"); parameter.Add(DbParameters.CreateDbParameter("@UserId", userId.ToString())); } strSql.Append(@" GROUP BY t1.SendId, t1.UserId ORDER BY MAX (t1.CreateDate) DESC"); return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray()); } /// /// 获取某用户某种消息的总数 /// /// /// /// public DataTable GetReadAllNum(string userId, string status) { var strSql = new StringBuilder(); strSql.Append(@"SELECT COUNT(ReadId) AS unReadNum FROM IM_Read WHERE 1 = 1 "); var parameter = new List(); //消息状态 if (!status.IsEmpty()) { strSql.Append(" AND ReadStatus = @ReadStatus"); parameter.Add(DbParameters.CreateDbParameter("@ReadStatus", status)); } //接收者Id if (!userId.IsEmpty()) { strSql.Append(" AND UserId = @UserId"); parameter.Add(DbParameters.CreateDbParameter("@UserId", userId.ToString())); } return this.BaseRepository().FindTable(strSql.ToString(), parameter.ToArray()); } #region 提交数据 /// /// 增加一条消息内容 /// /// public void Add(IMContentEntity entity, DataTable dtGroupUserId) { IDatabase db = DbFactory.Base().BeginTrans(); try { //增加一条消息内容 entity.Create(); db.Insert(entity); if (entity.IsGroup == 1) { foreach (DataRow item in dtGroupUserId.Rows) { IMReadEntity msgreadentity = new IMReadEntity(); msgreadentity.Create(); msgreadentity.ContentId = entity.ContentId; msgreadentity.UserId = item["userId"].ToString(); msgreadentity.SendId = entity.ToId;//群组消息发送者为群组Id msgreadentity.CreateUserId = entity.CreateUserId; msgreadentity.CreateUserName = entity.CreateUserName; msgreadentity.ReadStatus = 0; db.Insert(msgreadentity); } } else { IMReadEntity msgreadentity = new IMReadEntity(); msgreadentity.Create(); msgreadentity.ContentId = entity.ContentId; msgreadentity.UserId = entity.ToId; msgreadentity.SendId = entity.SendId; msgreadentity.CreateUserId = entity.CreateUserId; msgreadentity.CreateUserName = entity.CreateUserName; msgreadentity.ReadStatus = 0; db.Insert(msgreadentity); } db.Commit(); } catch (Exception) { db.Rollback(); throw; } } /// /// 更新消息状态 /// /// /// /// /// public int Update(string userId, string sendId, string status) { var strSql = new StringBuilder(); strSql.Append("UPDATE IM_Read"); var parameter = new List(); //更新状态 if (!status.IsEmpty()) { strSql.Append(" SET ReadStatus = @ReadStatus"); parameter.Add(DbParameters.CreateDbParameter("@ReadStatus", status)); } strSql.Append(" WHERE 1 = 1 "); //发送者 if (!sendId.IsEmpty()) { strSql.Append(" AND SendId = @SendId"); parameter.Add(DbParameters.CreateDbParameter("@SendId", sendId)); } //接收者 if (!userId.IsEmpty()) { strSql.Append(" AND UserId = @UserId"); parameter.Add(DbParameters.CreateDbParameter("@UserId", userId)); } return this.BaseRepository().ExecuteBySql(strSql.ToString(), parameter.ToArray()); } #endregion } }