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 _sysUserRep; public MessageService( ILog log, IUserManager userManager, IMessage message, IOrganize organize, IMessageUser messageUser, // IUserDummy userDummy, IRepository sysUserRep) { _log = log; _userManager = userManager; _message = message; _organize = organize; _messageUser = messageUser; //_userDummy = userDummy; _sysUserRep = sysUserRep; } /// /// 发送消息 /// /// [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); } /// /// 得到记录 /// /// [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 userids = new List(); foreach (var dr in dt) { JObject jObject = new JObject() { { "Id", dr.Id }, { "Contents", dr.Contents.RemoveHTML() }, { "SenderName", dr.SenderName +","+dr.SenderId } ,//(dr.SenderId.IsGuid() ? "-" + _organize.GetOrganizeMainShowHtml(dr.SenderId, false) + "" : "") }, { "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] + "-" + dic[vals[1]] + ""; } JObject json = new JObject() { { "total", total }, }; json.Add("rows", jArray); return json; //RoadFlowCommon.Tools.GetReturnJsonString(jObject: json); } /// /// 得到阅读记录 /// /// [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 userids = new List(); foreach (var dr in dt) { JObject jObject = new JObject() { { "Id", i++.ToString() }, { "UserId", dr.UserId },//+ " - "+_organize.GetOrganizeMainShowHtml(dr.UserId,false)+"" }, { "ReadTime", dr.ReadTime!=null ? dr.ReadTime.ToShortDateTimeString() : "未读" }, }; 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)?" - " + dic[id]+ "":"") ; } JObject json = new JObject() { { "total", total }, }; json.Add("rows", jArray); return json; //RoadFlowCommon.Tools.GetReturnJsonString(jObject: json); } /// /// 查询一条消息 /// /// [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); } /// /// 标记一条消息为已读 /// /// [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); } /// /// 标记为已读 /// /// [HttpGet("MarkAsRead")] public string MarkAsRead() { _messageUser.UpdateAllIsRead(); return "标注成功"; //RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["MarkSuccessfully"].Value); } /// /// 删除消息 /// /// [HttpPost("Delete")] public string Delete([FromBody] JObject args) { string ids = args.GetJsonValue("ids"); List guids = new List(); 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); } } }