init commit

This commit is contained in:
路 范
2022-03-30 17:54:33 +08:00
parent df01841625
commit 904bdd16cd
500 changed files with 217251 additions and 0 deletions

View 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);
}
}

View 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('、');
}
}
}