Files
number_zj/20220330_Vote/Ewide.RoadFlow/Serivce/Message/MessageService.cs
2022-03-30 17:54:33 +08:00

266 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
}
}