init commit
This commit is contained in:
49
20220330_Vote/Ewide.RoadFlow/Data/Message/IMessage.cs
Normal file
49
20220330_Vote/Ewide.RoadFlow/Data/Message/IMessage.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using Ewide.Core;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RoadFlow.Data
|
||||
{
|
||||
public interface IMessage: IRoadFlowRepository<RoadFlow.Model.rf_message>
|
||||
{
|
||||
/// <summary>
|
||||
/// 发送一条消息(VUE版本)
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="receiveUsers">接收人员,如果为空则从message.ReceiverIdString中取</param>
|
||||
/// <param name="url">要连接的地址</param>
|
||||
/// <param name="language">语言包</param>
|
||||
/// <returns>返回1表示成功,其它为错误信息</returns>
|
||||
public string VueSend(Model.rf_message message, IEnumerable<SysUser> receiveUsers = null, string url = "", IConfigurationSection language = null);
|
||||
|
||||
/// <summary>
|
||||
/// 查询一页已发送消息
|
||||
/// </summary>
|
||||
/// <param name="count"></param>
|
||||
/// <param name="size"></param>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="contents"></param>
|
||||
/// <param name="date1"></param>
|
||||
/// <param name="date2"></param>
|
||||
/// <param name="status">0自己发送的消息 1未读消息 2已读消息</param>
|
||||
/// <param name="order"></param>
|
||||
/// <returns></returns>
|
||||
public List<Model.rf_message> GetSendList(out int count, int size, int number, string userId, string contents, string date1, string date2, string status, string order);
|
||||
|
||||
/// <summary>
|
||||
/// 得到发送方式字符串
|
||||
/// </summary>
|
||||
/// <param name="receiveType">发送方式 0站内消息 1手机短信 2微信 </param>
|
||||
/// <param name="localizer">语言包</param>
|
||||
/// <returns></returns>
|
||||
public string GetSendTypeString(string sendType, IStringLocalizer localizer = null);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
243
20220330_Vote/Ewide.RoadFlow/Data/Message/Message.cs
Normal file
243
20220330_Vote/Ewide.RoadFlow/Data/Message/Message.cs
Normal file
@@ -0,0 +1,243 @@
|
||||
using Ewide.Core;
|
||||
using Furion.DependencyInjection;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using RoadFlow.Utility;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RoadFlow.Data
|
||||
{
|
||||
public class Message: RoadFlowRepository<RoadFlow.Model.rf_message>, IMessage, ITransient
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 发送一条消息(VUE版本)
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="receiveUsers">接收人员,如果为空则从message.ReceiverIdString中取</param>
|
||||
/// <param name="url">要连接的地址</param>
|
||||
/// <param name="language">语言包</param>
|
||||
/// <returns>返回1表示成功,其它为错误信息</returns>
|
||||
public string VueSend(Model.rf_message message, IEnumerable<SysUser> receiveUsers = null, string url = "", IConfigurationSection language = null)
|
||||
{
|
||||
if (null == message)
|
||||
{
|
||||
return language != null && language.GetSection("sendmsg_empty") != null ? language.GetSection("sendmsg_empty").Value : "消息为空!";
|
||||
}
|
||||
if (receiveUsers == null)
|
||||
{
|
||||
receiveUsers = new Organize().GetAllUsers(message.ReceiverIdString);
|
||||
}
|
||||
if (!receiveUsers.Any())
|
||||
{
|
||||
return language != null && language.GetSection("sendmsg_notreceiver") != null ? language.GetSection("sendmsg_notreceiver").Value : "消息没有接收人!";
|
||||
}
|
||||
if (message.ReceiverIdString.IsNullOrEmpty())
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
foreach (var u in receiveUsers)
|
||||
{
|
||||
stringBuilder.Append(IOrganize.PREFIX_USER);
|
||||
stringBuilder.Append(u.Id);
|
||||
stringBuilder.Append(",");
|
||||
}
|
||||
message.ReceiverIdString = stringBuilder.ToString().TrimEnd(',');
|
||||
}
|
||||
List<Model.rf_messageuser> messageUsers = new List<Model.rf_messageuser>();
|
||||
List<string> userIDList = new List<string>();//记录用户ID,用于发送singalr消息
|
||||
string[] sendTypes = message.SendType.Split(',');
|
||||
foreach (string sendType in sendTypes)
|
||||
{
|
||||
if (!sendType.IsInt(out int t))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
switch (t)
|
||||
{
|
||||
case 0://站内短信
|
||||
foreach (var user in receiveUsers)
|
||||
{
|
||||
messageUsers.Add(new Model.rf_messageuser()
|
||||
{
|
||||
MessageId = message.Id,
|
||||
UserId = user.Id,
|
||||
IsRead = 0
|
||||
});
|
||||
userIDList.Add(user.Id.ToString().ToLower());
|
||||
}
|
||||
break;
|
||||
case 1://手机短信
|
||||
StringBuilder mobiles = new StringBuilder();
|
||||
foreach (var user in receiveUsers)
|
||||
{
|
||||
if (!user.Phone.IsNullOrWhiteSpace())
|
||||
{
|
||||
mobiles.Append(user.Phone);
|
||||
mobiles.Append(",");
|
||||
}
|
||||
}
|
||||
SMS.SendSMS(message.Contents.RemoveHTML(), mobiles.ToString().TrimEnd(','));
|
||||
|
||||
break;
|
||||
case 2://企业微信
|
||||
/* if (Config.EnterpriseWeChatIsUse)
|
||||
{
|
||||
if (message.Type == 20)
|
||||
{
|
||||
if (!url.ContainsIgnoreCase("&ismobile="))
|
||||
{
|
||||
url += "&ismobile=1";
|
||||
}
|
||||
if (!url.ContainsIgnoreCase("&ismessage="))
|
||||
{
|
||||
url += "&ismessage=1";
|
||||
}
|
||||
}
|
||||
string linkUrl = url.IsNullOrWhiteSpace() && message.Type == 1
|
||||
? Config.EnterpriseWeChatWebUrl + "/?loadurl=" + ("/mobile/message-show?messageid=" + message.Id.ToString()).UrlEncode()
|
||||
: Config.EnterpriseWeChatWebUrl + "/?loadurl=" + url.UrlEncode();
|
||||
string msgTitle = message.Type == 20 ? (language != null && language.GetSection("sendmsg_todo") != null ? language.GetSection("sendmsg_todo").Value : "待办事项")
|
||||
: (language != null && language.GetSection("sendmsg_msg") != null ? language.GetSection("sendmsg_msg").Value : "消息");
|
||||
string msgDescription = "<div class=\"normal\">" + message.Contents + "</div><div class=\"gray\">"
|
||||
+ (message.SenderName.IsNullOrWhiteSpace() ? "" : (language != null && language.GetSection("sendmsg_sender") != null ? language.GetSection("sendmsg_sender").Value : "发送人") + ":" + message.SenderName)
|
||||
+ " " + (language != null && language.GetSection("sendmsg_time") != null ? language.GetSection("sendmsg_time").Value : "时间") + ":" + message.SendTime.ToShortDateTimeString() + "</div>";
|
||||
string msgBtnText = message.Type == 20 ? (language != null && language.GetSection("sendmsg_handle") != null ? language.GetSection("sendmsg_handle").Value : "点击处理")
|
||||
: (language != null && language.GetSection("sendmsg_info") != null ? language.GetSection("sendmsg_info").Value : "详情");
|
||||
|
||||
//每次最大只能发1000人,所以这里要分段
|
||||
List<List<Model.User>> toUsers = new List<List<Model.User>>();
|
||||
int skip = 1000;
|
||||
int number = 1;
|
||||
while (skip == 1000)
|
||||
{
|
||||
var userList = receiveUsers.Skip(number++ * 1000 - 1000).Take(1000).ToList();
|
||||
toUsers.Add(userList);
|
||||
skip = userList.Count;
|
||||
}
|
||||
|
||||
EnterpriseWeChat.Message weChatMessage = new EnterpriseWeChat.Message();
|
||||
foreach (var toUserList in toUsers)
|
||||
{
|
||||
StringBuilder msgReceiveUsers = new StringBuilder();
|
||||
foreach (var receiveUser in toUserList)
|
||||
{
|
||||
msgReceiveUsers.Append(receiveUser.Account + "|");
|
||||
}
|
||||
weChatMessage.SendTextCard(msgTitle, msgDescription, msgBtnText, linkUrl, msgReceiveUsers.ToString().TrimEnd('|'));
|
||||
}
|
||||
}*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
//发送singalr消息
|
||||
if (userIDList.Count > 0)
|
||||
{
|
||||
JObject jObject = new JObject
|
||||
{
|
||||
{ "id", message.Id.ToString() },
|
||||
{ "title", message.Type == 20 ? language != null && language.GetSection("sendmsg_todomsg") != null ? language.GetSection("sendmsg_todomsg").Value : "待办任务消息"
|
||||
: language != null && language.GetSection("sendmsg_msg") != null ? language.GetSection("sendmsg_msg").Value : "消息" },
|
||||
{ "contents", message.Contents },
|
||||
{ "linkUrl", message.Files.IsNullOrWhiteSpace() ? "" : message.Files },
|
||||
{ "count", 1 }
|
||||
};
|
||||
new Business.SignalR.SignalRHub().SendMessage(jObject.ToString(Newtonsoft.Json.Formatting.None), userIDList);
|
||||
}
|
||||
return Add(message, messageUsers.ToArray()) > 0 ? "1" : language != null && language.GetSection("sendmsg_fail") != null ? language.GetSection("sendmsg_fail").Value : "发送失败!";
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加一批消息
|
||||
/// </summary>
|
||||
/// <param name="message">消息实体</param>
|
||||
/// <param name="messageUsers">阅读人员</param>
|
||||
/// <returns></returns>
|
||||
public int Add(Model.rf_message message, Model.rf_messageuser[] messageUsers)
|
||||
{
|
||||
return 1;
|
||||
//this.Add(message);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询一页已发送消息
|
||||
/// </summary>
|
||||
/// <param name="count"></param>
|
||||
/// <param name="size"></param>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="contents"></param>
|
||||
/// <param name="date1"></param>
|
||||
/// <param name="date2"></param>
|
||||
/// <param name="status">0自己发送的消息 1未读消息 2已读消息</param>
|
||||
/// <param name="order"></param>
|
||||
/// <returns></returns>
|
||||
public List<Model.rf_message> GetSendList(out int count, int size, int number, string userId, string contents, string date1, string date2, string status, string order)
|
||||
{
|
||||
int total = 0;
|
||||
var rtn = db.Queryable<Model.rf_message>()
|
||||
.WhereIF(status == "1",
|
||||
x => SqlFunc.Subqueryable<Model.rf_messageuser>().Where(y => y.MessageId == x.Id && y.IsRead == 0 && y.UserId == userId).Count() > 0)
|
||||
.WhereIF(status == "2",
|
||||
x => SqlFunc.Subqueryable<Model.rf_messageuser>().Where(y => y.MessageId == x.Id && y.IsRead == 1 && y.UserId == userId).Count() > 0)
|
||||
.WhereIF(status == "0",
|
||||
x => x.SenderId == userId)
|
||||
.WhereIF(!contents.IsNullOrWhiteSpace(),
|
||||
x => x.Contents.Contains(contents.Trim()))
|
||||
.WhereIF(date1.IsDateTime(out DateTime dt),
|
||||
x => x.SendTime >= dt.GetDate())
|
||||
.WhereIF(date2.IsDateTime(out DateTime dt1),
|
||||
x => x.SendTime < dt1.GetDate()
|
||||
)
|
||||
.OrderByIF(!order.IsNullOrWhiteSpace(), order.FilterSelectSql())
|
||||
.ToPageList(number, size, ref total).ToList();
|
||||
count = total;
|
||||
return rtn;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 得到发送方式字符串
|
||||
/// </summary>
|
||||
/// <param name="receiveType">发送方式 0站内消息 1手机短信 2微信 </param>
|
||||
/// <param name="localizer">语言包</param>
|
||||
/// <returns></returns>
|
||||
public string GetSendTypeString(string sendType, IStringLocalizer localizer = null)
|
||||
{
|
||||
if (sendType.IsNullOrWhiteSpace())
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
string[] types = sendType.Split(',');
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
foreach (string type in types)
|
||||
{
|
||||
if (!type.IsInt(out int t))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
switch (t)
|
||||
{
|
||||
case 0:
|
||||
stringBuilder.Append(localizer == null ? "站内消息、" : localizer["MessageType0"] + "、");
|
||||
break;
|
||||
case 1:
|
||||
stringBuilder.Append(localizer == null ? "手机短信、" : localizer["MessageType1"] + "、");
|
||||
break;
|
||||
case 2:
|
||||
stringBuilder.Append(localizer == null ? "微信、" : localizer["MessageType2"] + "、");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return stringBuilder.ToString().TrimEnd('、');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user