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.
169 lines
6.6 KiB
C#
169 lines
6.6 KiB
C#
using Myshipping.Core;
|
|
using Furion.DependencyInjection;
|
|
using Furion.DynamicApiController;
|
|
using Mapster;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using SqlSugar;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Furion.Logging;
|
|
using Microsoft.Extensions.Logging;
|
|
using Myshipping.Core.Entity;
|
|
using Furion.FriendlyException;
|
|
using System;
|
|
using Furion.EventBus;
|
|
|
|
namespace Myshipping.Core.Service
|
|
{
|
|
/// <summary>
|
|
/// 大简云消息服务
|
|
/// </summary>
|
|
[ApiDescriptionSettings(Name = "DjyMessage", Order = 1)]
|
|
public class DjyMessageService : IDjyMessageService, IDynamicApiController, ITransient
|
|
{
|
|
private readonly SqlSugarRepository<DjyMessage> _rep;
|
|
private readonly ISysCacheService _cacheService;
|
|
private readonly ILogger<DjyMessageService> _logger;
|
|
private readonly IEventPublisher _publisher;
|
|
|
|
public DjyMessageService(SqlSugarRepository<DjyMessage> rep, ILogger<DjyMessageService> logger, ISysCacheService cacheService,
|
|
IEventPublisher publisher)
|
|
{
|
|
_rep = rep;
|
|
_logger = logger;
|
|
_cacheService = cacheService;
|
|
this._publisher = publisher;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 消息列表
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/Page")]
|
|
public async Task<SqlSugarPagedList<DjyMessageListOutput>> Page(DjyMessageQueryInput input)
|
|
{
|
|
var query = _rep.AsQueryable()
|
|
.Where(x => x.TenantId == UserManager.TENANT_ID && (x.ToId == null || x.ToId == UserManager.UserId))
|
|
.WhereIF(!string.IsNullOrEmpty(input.TypeCode), x => x.TypeCode == input.TypeCode)
|
|
.WhereIF(!string.IsNullOrEmpty(input.Module), x => x.Module == input.Module)
|
|
.WhereIF(input.IsRead.HasValue, x => x.IsRead == input.IsRead)
|
|
.WhereIF(!string.IsNullOrEmpty(input.ProcStatus), x => x.ProcStatus == input.ProcStatus)
|
|
.WhereIF(!string.IsNullOrEmpty(input.RelativeCode), x => x.RelativeCode.Contains(input.RelativeCode))
|
|
.WhereIF(input.CreateTimeStart.HasValue, x => x.CreatedTime >= input.CreateTimeStart)
|
|
.WhereIF(input.CreateTimeEnd.HasValue, x => x.CreatedTime < input.CreateTimeEnd.Value.AddDays(1))
|
|
.WhereIF(!string.IsNullOrEmpty(input.FromName), x => x.FromName.Contains(input.FromName));
|
|
|
|
if (!string.IsNullOrEmpty(input.SortField) || input.MultiSort == null || input.MultiSort.Count == 0)
|
|
{
|
|
query = query.OrderBy(PageInputOrder.OrderBuilder(input.SortField, input.DescSort));
|
|
}
|
|
else
|
|
{
|
|
query = query.OrderBy(PageInputOrder.MultiOrderBuilder(input.MultiSort));
|
|
}
|
|
|
|
var entities = await query.ToPagedListAsync(input.PageNo, input.PageSize);
|
|
var list = entities.Adapt<SqlSugarPagedList<DjyMessageListOutput>>();
|
|
return list;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 消息删除
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/Delete")]
|
|
public async Task Delete(long id)
|
|
{
|
|
await _rep.AsUpdateable(new DjyMessage() { Id = id, IsDeleted = true }).UpdateColumns(x => new { x.IsDeleted }).ExecuteCommandAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存消息
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/Save")]
|
|
public Task<long> Save(DjyMessageSaveInput input)
|
|
{
|
|
throw new System.NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 消息详情
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/Get")]
|
|
public async Task<DjyMessageDetailOutput> Get(long id)
|
|
{
|
|
var msg = await _rep.FirstOrDefaultAsync(x => x.Id == id);
|
|
return msg.Adapt<DjyMessageDetailOutput>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取消息
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/Read")]
|
|
public async Task Read(long id)
|
|
{
|
|
await _rep.AsUpdateable(new DjyMessage()
|
|
{
|
|
Id = id,
|
|
IsRead = true,
|
|
ReadTime = DateTime.Now,
|
|
ReadUser = UserManager.Name
|
|
}).UpdateColumns(x => new { x.IsRead, x.ReadTime, x.ReadUser }).ExecuteCommandAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 处理消息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/Process")]
|
|
public async Task Process(DjyMessageProcessInput input)
|
|
{
|
|
var msg = await _rep.FirstOrDefaultAsync(x => x.Id == input.Id);
|
|
if (msg.ProcStatus != MessageProcessStatus.UnProcess.ToString())
|
|
{
|
|
throw Oops.Bah($"当前消息已被{msg.ProcUser}在{(msg.ProcTime.HasValue ? msg.ProcTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "")}处理过");
|
|
}
|
|
|
|
msg.ProcStatus = input.ProcStatus.ToString();
|
|
msg.ProcResult = input.Comment;
|
|
msg.ProcUser = UserManager.Name;
|
|
msg.ProcTime = DateTime.Now;
|
|
if (!msg.IsRead) //处理消息时,自动已读
|
|
{
|
|
msg.IsRead = true;
|
|
msg.ReadTime = DateTime.Now;
|
|
msg.ReadUser = UserManager.Name;
|
|
}
|
|
|
|
await _rep.AsUpdateable(msg).UpdateColumns(x => new { x.ProcStatus, x.ProcResult, x.ProcUser }).ExecuteCommandAsync();
|
|
|
|
//发布已处理事件消息
|
|
await _publisher.PublishAsync(new ChannelEventSource($"Message:Process:{msg.Module}:{msg.TypeCode}", input.Id));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取消息数量统计
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("/DjyMessage/GetNumSum")]
|
|
public async Task<DjyMessageProcessNum> GetNumSum(string module)
|
|
{
|
|
var rtn = new DjyMessageProcessNum();
|
|
rtn.UnreadCount = await _rep.CountAsync(x => x.Module == module && x.IsRead == false && x.TenantId == UserManager.TENANT_ID && (x.ToId == null || x.ToId == UserManager.UserId));
|
|
var strStaUnproc = MessageProcessStatus.UnProcess.ToString();
|
|
rtn.UnprocessCount = await _rep.CountAsync(x => x.Module == module && x.ProcStatus == strStaUnproc && x.TenantId == UserManager.TENANT_ID && (x.ToId == null || x.ToId == UserManager.UserId));
|
|
return rtn;
|
|
}
|
|
}
|
|
}
|