You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
11 KiB
C#

5 months ago
using OpenAuth.App.Base;
using OpenAuth.Repository.Domain;
using OpenAuth.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Infrastructure;
using SqlSugar;
using OpenAuth.App.BaseApp.Request;
using DocumentFormat.OpenXml.Office2010.Excel;
using Infrastructure.Helpers;
using OpenAuth.Repository.Core;
using OpenAuth.App.BaseApp.WFTask;
using OpenAuth.App.BaseApp.ImMsgManager;
using Microsoft.Extensions.Configuration;
using DocumentFormat.OpenXml.EMMA;
using OpenAuth.App.BaseApp.Base;
namespace OpenAuth.App.BaseApp
{
public class ImMsgApp : SqlSugarBaseApp<ImMsg, SugarDbContext>
{
private ChatsHub _hub;
private readonly IConfiguration _configuration;
private readonly ISqlSugarClient client;
#region 构造函数
public ImMsgApp(ChatsHub hub, ISqlSugarClient sqlSugarClient, ISugarUnitOfWork<SugarDbContext> unitWork, ISimpleClient<ImMsg> repository, IConfiguration configuration) : base(unitWork, repository, null)
{
_hub = hub;
_configuration = configuration;
this.client = sqlSugarClient;
}
#endregion
#region 数据查询
/// <summary>
/// 分页获取列表数据
/// </summary>
/// <param name="keyword"></param>
/// <param name="pageindex"></param>
/// <param name="pagesize"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<ImMsg>>>> LoadImMsgList(string sendUserId, string recvUserId, string keyword, int pageindex, int pagesize)
{
//定义且实例化分页数据
RefAsync<int> totalCount = 0;
//数据查询并返回
var info = await this.Repository.AsQueryable()
.Where(t => (t.SendUserid == sendUserId && t.RecvUserid == recvUserId))
.WhereIF(!string.IsNullOrEmpty(keyword), t => t.Content.Contains(keyword))
.OrderByDescending(t => t.CreateDate)
.ToPageListAsync(pageindex, pagesize, totalCount);
return new Response<PageInfo<List<ImMsg>>>
{
Result = new PageInfo<List<ImMsg>>
{
Items = info,
Total = totalCount
}
};
}
/// <summary>
/// 获取收到的未读消息
/// </summary>
///<param name="userId">当前登录用户id</param>
/// <returns></returns>
public async Task<Response<List<ImMsg>>> GetLastList(string userId)
{
//数据查询并返回
var info = await this.Repository.AsQueryable()
.Where(t => t.RecvUserid == userId&&t.IsRead==0)
.OrderByDescending(t => t.CreateDate)
.ToListAsync();
return new Response<List<ImMsg>>
{
Result = info
};
}
/// <summary>
/// 分页获取系统消息
/// </summary>
/// <param name="myId"></param>
/// <param name="sysCode"></param>
/// <param name="keyword"></param>
/// <param name="isDelete"></param>
/// <param name="pageindex"></param>
/// <param name="pagesize"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<ImMsg>>>> LoadSysImMsgList(string myId, string sysCode, string keyword, int? isDelete, int pageindex, int pagesize)
{
//定义且实例化分页数据
RefAsync<int> totalCount = 0;
//数据查询并返回
var info = await this.Repository.AsQueryable()
.Where(r=>r.Issystem==1)
.WhereIF(!string.IsNullOrEmpty(myId),r=>r.RecvUserid==myId)
.WhereIF(!string.IsNullOrEmpty(sysCode),r=>r.SendUserid==sysCode)
.WhereIF(!string.IsNullOrEmpty(keyword), t => t.Content.Contains(keyword))
.WhereIF(isDelete!=null,r=>r.DeleteMark==isDelete)
.OrderByDescending(t => t.CreateDate)
.ToPageListAsync(pageindex, pagesize, totalCount);
return new Response<PageInfo<List<ImMsg>>>
{
Result = new PageInfo<List<ImMsg>>
{
Items = info,
Total = totalCount
}
};
}
//根据contentid获取任务信息
public async Task<dynamic> GetInfoByContentId(string contentid)
{
var info= await client.Queryable<OpenAuth.Repository.Domain.WFTask>().Where(r=>r.Token==contentid)
.Select<dynamic>(r => new
{
r.Id,
r.ProcessCode,
r.Type,
r.ProcessId
}).ToListAsync();
return new Response<dynamic>
{
Result = info.Count > 0 ? info.First() : null
};
}
#endregion
#region 增删改
/// <summary>
/// 保存(新增)
/// </summary>
/// <param name="imsg">数据源实体</param>
/// <returns></returns>
public async Task<Response<bool>> SaveEntity(ImMsgReq imsg)
{
var flag = false;
ImMsg entity = imsg.MapTo<ImMsg>();
entity.MsgId = Guid.NewGuid().ToString();
entity.CreateDate = DateTime.Now;
entity.Issystem = 0;
entity.DeleteMark = 0;
flag = await this.Repository.InsertAsync(entity);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
/// <summary>
/// 保存(新增)
/// </summary>
/// <param name="imsg">数据源实体</param>
/// <returns></returns>
public Response<bool> SaveEntitys(List<ImMsg> mglist)
{
var flag = false;
flag = this.Repository.InsertRange(mglist);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
/// <summary>
/// 删除数据源
/// </summary>
/// <param name="id">主键</param>
public async Task<Response<bool>> DeleteEntity(string id)
{
var flag = await this.Repository.DeleteByIdAsync(id);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
/// <summary>
/// 删除数据源
/// </summary>
/// <param name="ids">主键list</param>
public async Task<Response<bool>> DeleteEntitys(List<string> ids)
{
List<ImMsg> list = new List<ImMsg>();
list = this.Repository.AsQueryable().Where(r => ids.Contains(r.MsgId)).ToList();
var flag = await this.Repository.DeleteAsync(list);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
/// <summary>
/// 删除数据源(虚拟删除)
/// </summary>
/// <param name="id">主键</param>
public async Task<Response<bool>> VirtualDeleteEntity(string id)
{
using (var uow = base.UnitWork.CreateContext())
{
await uow.ImMsg.UpdateAsync(r => new ImMsg { DeleteMark = 1 }, r => r.MsgId == id);
var flag = uow.Commit();
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
}
/// <summary>
/// 删除数据源(虚拟删除)
/// </summary>
/// <param name="ids">主键list</param>
public async Task<Response<bool>> VirtualDeleteEntitys(List<string> ids)
{
using (var uow = base.UnitWork.CreateContext())
{
foreach(var id in ids)
{
await uow.ImMsg.UpdateAsync(r => new ImMsg { DeleteMark = 1 }, r => r.MsgId == id);
}
var flag = uow.Commit();
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
}
#endregion
#region 确认阅读
/// <summary>
/// 确认阅读
/// </summary>
/// <param name="id">主键</param>
/// <returns></returns>
public async Task<Response<bool>> ReadMsg(string id)
{
using (var uow = base.UnitWork.CreateContext())
{
await uow.ImMsg.UpdateAsync(r => new ImMsg { IsRead = 1 }, r => r.MsgId == id);
var flag = uow.Commit();
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
}
#endregion
#region 扩展方法
/// <summary>
/// 发送消息
/// </summary>
/// <param name="code">编码</param>
/// <param name="userIdList">用户列表</param>
/// <param name="content">消息内容</param>
/// <param name="messageType">消息类型1.短信 2.邮箱 3.微信 4.IM站内消息</param>
/// <param name="contentId">消息内容id</param>
public async Task SendMsg(string code, IEnumerable<string> userIdList, string content, string messageType, string contentId = "")
{
if (!string.IsNullOrEmpty(content) && userIdList != null)
{
foreach (var userId in userIdList)
{
if (messageType.IndexOf("4") != -1) // 站内消息
{
ImMsg iMMsgEntity = new ImMsg();
iMMsgEntity.SendUserid = code;
iMMsgEntity.RecvUserid = userId;
iMMsgEntity.Content = content;
iMMsgEntity.ContentId = contentId;
iMMsgEntity.Issystem = 1;
iMMsgEntity.IsRead = 0;
iMMsgEntity.DeleteMark = 0;
iMMsgEntity.MsgId = Guid.NewGuid().ToString();
iMMsgEntity.CreateDate = DateTime.Now;
await this.Repository.InsertAsync(iMMsgEntity);
var url = _configuration.GetSection("AppSetting:IMUrl").Value;
var imopen = _configuration.GetSection("AppSetting:IMOpen").Value;
await SendHubs.callMethod(url, imopen, "SendMsg", code, userId, content, iMMsgEntity.MsgId, 1);
//await _hub.SendMsg(url,imopen,code, userId, content, iMMsgEntity.MsgId, 1);
}
}
}
}
#endregion
}
}