266 lines
10 KiB
C#
266 lines
10 KiB
C#
using Ewide.Core;
|
||
using Ewide.RoadFlowLite.Utility;
|
||
using Furion.DatabaseAccessor;
|
||
using Furion.DependencyInjection;
|
||
using Furion.DynamicApiController;
|
||
using Furion.FriendlyException;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Newtonsoft.Json.Linq;
|
||
using RoadFlow.Data;
|
||
using RoadFlow.Utility;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace Ewide.RoadFlowLite.Serivce.Message
|
||
{
|
||
[Route("/api/roadflow/Message/")]
|
||
[ApiDescriptionSettings("RoadFlow")]
|
||
public class MessageService : IDynamicApiController, ITransient
|
||
{
|
||
private readonly ILog _log;
|
||
private readonly IUserManager _userManager;
|
||
private readonly IMessage _message;
|
||
private readonly IOrganize _organize;
|
||
private readonly IMessageUser _messageUser;
|
||
IRepository<SysUser> _sysUserRep;
|
||
|
||
public MessageService(
|
||
ILog log,
|
||
IUserManager userManager,
|
||
IMessage message,
|
||
IOrganize organize,
|
||
IMessageUser messageUser,
|
||
// IUserDummy userDummy,
|
||
IRepository<SysUser> sysUserRep)
|
||
{
|
||
|
||
_log = log;
|
||
_userManager = userManager;
|
||
_message = message;
|
||
_organize = organize;
|
||
_messageUser = messageUser;
|
||
//_userDummy = userDummy;
|
||
_sysUserRep = sysUserRep;
|
||
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 发送消息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost("Send")]
|
||
public string Send([FromBody] JObject args)
|
||
{
|
||
string ReceiverIdString = args.GetJsonValue("ReceiverIdString");
|
||
string SendType = args.GetJsonValue("SendType");
|
||
string Contents = args.GetJsonValue("Contents");
|
||
|
||
if (ReceiverIdString.IsNullOrWhiteSpace() || SendType.IsNullOrWhiteSpace() || Contents.IsNullOrWhiteSpace())
|
||
{
|
||
throw Oops.Oh("参数错误");
|
||
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["ValidEmpty"].Value);
|
||
}
|
||
var userModel = _userManager.User;
|
||
RoadFlow.Model.rf_message messageModel = new RoadFlow.Model.rf_message
|
||
{
|
||
Contents = Contents,
|
||
Id = GuidExtensions.NewGuid().ToString(),
|
||
ReceiverIdString = ReceiverIdString,
|
||
SenderId = userModel.Id,
|
||
SenderName = userModel.Name,
|
||
SendType = SendType,
|
||
SendTime = DateExtensions.Now,
|
||
Type = 1
|
||
};
|
||
string msg = _message.VueSend(messageModel);
|
||
if (msg == "1")
|
||
return "发送成功";
|
||
else
|
||
throw Oops.Oh(msg);
|
||
//RoadFlowCommon.Tools.GetReturnJsonString("1".Equals(msg), "1".Equals(msg) ? localizer["SendSuccessfully"].Value : msg);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 得到记录
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost("GetMessageList")]
|
||
public dynamic GetMessageList([FromBody]JObject args)
|
||
{
|
||
string Contents = args.GetJsonValue("Contents");
|
||
string SendTime1 = args.GetJsonValue("SendTime1");
|
||
string SendTime2 = args.GetJsonValue("SendTime2");
|
||
string status = args.GetJsonValue("status");//0自己发送的消息 1未读消息 2已读消息
|
||
int number = args.GetJsonValue("number").ToInt(1);
|
||
int size = args.GetJsonValue("size").ToInt();
|
||
string order = args.GetJsonValue("order");
|
||
if (order.IsNullOrWhiteSpace())
|
||
{
|
||
order = "SendTime desc";
|
||
}
|
||
string userId = _userManager.UserId;
|
||
|
||
var dt = _message.GetSendList(out int total, size, number, userId.ToString(), Contents, SendTime1, SendTime2, status, order);
|
||
JArray jArray = new JArray();
|
||
List<string> userids = new List<string>();
|
||
foreach (var dr in dt)
|
||
{
|
||
JObject jObject = new JObject()
|
||
{
|
||
{ "Id", dr.Id },
|
||
{ "Contents", dr.Contents.RemoveHTML() },
|
||
{ "SenderName", dr.SenderName +","+dr.SenderId } ,//(dr.SenderId.IsGuid() ? "<span style=\"color:#999;\">-" + _organize.GetOrganizeMainShowHtml(dr.SenderId, false) + "</span>" : "") },
|
||
{ "SendType", _message.GetSendTypeString(dr.SendType,null) },// localizer) },
|
||
{ "SendTime", dr.SendTime.ToShortDateTimeString() },
|
||
{ "LinkUrl", dr.Files},
|
||
{ "Type", dr.Type},
|
||
//{ "showLink", !dr["Files"].ToString().IsNullOrWhiteSpace() }
|
||
};
|
||
jArray.Add(jObject);
|
||
userids.Add(dr.SenderId);
|
||
}
|
||
var dic =_organize.GetOrganizeMainShowHtml(userids, false);
|
||
foreach (JObject obj in jArray)
|
||
{
|
||
string[] vals=obj["SenderName"].ToString().Split(",");
|
||
if (!dic.ContainsKey(vals[1]))
|
||
obj["SenderName"] = vals[0];
|
||
else
|
||
obj["SenderName"] = vals[0] + "<span style=\"color:#999;\">-" + dic[vals[1]] + "</span>";
|
||
}
|
||
JObject json = new JObject() {
|
||
{ "total", total },
|
||
};
|
||
json.Add("rows", jArray);
|
||
return json;
|
||
//RoadFlowCommon.Tools.GetReturnJsonString(jObject: json);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 得到阅读记录
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost("GetMessageUserList")]
|
||
public dynamic GetMessageUserList([FromBody] JObject args )
|
||
{
|
||
string msgId = args.GetJsonValue("msgid");
|
||
string order = args.GetJsonValue("order");
|
||
if (order.IsNullOrWhiteSpace())
|
||
{
|
||
order = "IsRead asc";
|
||
}
|
||
|
||
var dt = _messageUser.GetReadUserList(out int total, 100000, 1, msgId, order);
|
||
JArray jArray = new JArray();
|
||
int i = 0;
|
||
List<string> userids = new List<string>();
|
||
foreach (var dr in dt)
|
||
{
|
||
JObject jObject = new JObject()
|
||
{
|
||
{ "Id", i++.ToString() },
|
||
{ "UserId", dr.UserId },//+ "<span style=\"color:#999;\"> - "+_organize.GetOrganizeMainShowHtml(dr.UserId,false)+"</span>" },
|
||
{ "ReadTime", dr.ReadTime!=null ? dr.ReadTime.ToShortDateTimeString() : "<span class=\"roadui_liststatus roadui_liststatusdisabled\">未读</span>" },
|
||
};
|
||
jArray.Add(jObject);
|
||
userids.Add(dr.UserId);
|
||
}
|
||
var usrList=_sysUserRep.DetachedEntities.Where(x => userids.Contains(x.Id)).ToList();
|
||
var dic = _organize.GetOrganizeMainShowHtml(userids, false);
|
||
|
||
foreach (JObject obj in jArray)
|
||
{
|
||
string id = obj["UserId"].ToString();
|
||
obj["UserId"] = usrList.FirstOrDefault(x => x.Id == id).Name?? "" + (dic.ContainsKey(id)?"<span style=\"color:#999;\"> - " + dic[id]+ "</span>":"") ;
|
||
}
|
||
JObject json = new JObject() {
|
||
{ "total", total },
|
||
};
|
||
json.Add("rows", jArray);
|
||
return json;
|
||
//RoadFlowCommon.Tools.GetReturnJsonString(jObject: json);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查询一条消息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpGet("GetMessage")]
|
||
|
||
public dynamic GetMessage(string msgId, int type)
|
||
{
|
||
|
||
var msgModel = _message.GetOneById(msgId);
|
||
JObject jObject = new JObject();
|
||
if (msgModel != null)
|
||
{
|
||
if (type == 1)//更新状态为已读
|
||
{
|
||
_messageUser.UpdateIsRead(msgModel.Id, _userManager.UserId);
|
||
}
|
||
jObject.Add("SenderName", msgModel.SenderName + (!msgModel.SenderId.IsNullOrWhiteSpace() ? "(" + _organize.GetOrganizeMainShowHtml(msgModel.SenderId, false) + ")" : ""));
|
||
jObject.Add("SendTime", msgModel.SendTime.ToShortDateTimeString());
|
||
jObject.Add("Contents", msgModel.Contents);
|
||
}
|
||
return jObject;
|
||
//RoadFlowCommon.Tools.GetReturnJsonString(jObject: jObject);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 标记一条消息为已读
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpGet("MarkAsReadOne")]
|
||
public string MarkAsReadOne(string id)
|
||
{
|
||
if (!id.IsGuid(out Guid guid))
|
||
{
|
||
throw Oops.Oh("ID 错误");
|
||
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["IdError"].Value);
|
||
}
|
||
_messageUser.UpdateIsRead(id,_userManager.UserId);
|
||
return "标记成功";
|
||
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["MarkSuccessfully"].Value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 标记为已读
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpGet("MarkAsRead")]
|
||
public string MarkAsRead()
|
||
{
|
||
_messageUser.UpdateAllIsRead();
|
||
return "标注成功";
|
||
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["MarkSuccessfully"].Value);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除消息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost("Delete")]
|
||
public string Delete([FromBody] JObject args)
|
||
{
|
||
string ids = args.GetJsonValue("ids");
|
||
List<string> guids = new List<string>();
|
||
foreach (string id in ids.Split(','))
|
||
{
|
||
if (id.IsGuid())
|
||
{
|
||
guids.Add(id);
|
||
}
|
||
}
|
||
_messageUser.Delete(guids, _userManager.UserId);
|
||
return "删除成功";
|
||
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["DeleteSuccessfully"].Value);
|
||
}
|
||
|
||
}
|
||
}
|