Abp模块
abp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

177 lines
5.2 KiB

using Sanhe.Abp.RealTime.Localization;
using System;
using Volo.Abp.Data;
using Volo.Abp.EventBus;
namespace Sanhe.Abp.Notifications;
/// <summary>
/// 通知数据
/// </summary>
/// <remarks>
/// 把通知的标题和内容设计为 <see cref="LocalizableStringInfo"/> 让客户端自行本地化
/// </remarks>
[Serializable]
[EventName("notifications")]
public class NotificationData : IHasExtraProperties
{
/// <summary>
/// 用来标识是否需要本地化的信息
/// </summary>
public const string LocalizerKey = "L";
/// <summary>
/// <see cref="Type"/>类型完全名称
/// </summary>
public virtual string Type => GetType().FullName;
/// <summary>
/// 获取或设置扩展属性
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public object this[string key] {
get {
return this.GetProperty(key);
}
set {
this.SetProperty(key, value);
}
}
/// <summary>
/// 扩展属性
/// </summary>
public ExtraPropertyDictionary ExtraProperties { get; set; }
public NotificationData()
{
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
TrySetData(LocalizerKey, false);
}
/// <summary>
/// 写入本地化的消息数据
/// </summary>
/// <param name="title"></param>
/// <param name="message"></param>
/// <param name="createTime"></param>
/// <param name="formUser"></param>
/// <param name="description"></param>
/// <returns></returns>
public NotificationData WriteLocalizedData(
LocalizableStringInfo title,
LocalizableStringInfo message,
DateTime createTime,
string formUser,
LocalizableStringInfo description = null)
{
TrySetData("title", title);
TrySetData("message", message);
TrySetData("formUser", formUser);
TrySetData("createTime", createTime);
TrySetData(LocalizerKey, true);
if (description != null)
{
TrySetData("description", description);
}
return this;
}
/// <summary>
/// 写入标准数据
/// </summary>
/// <param name="title">标题</param>
/// <param name="message">内容</param>
/// <param name="createTime">创建时间</param>
/// <param name="formUser">来源用户</param>
/// <param name="description">附加说明</param>
/// <returns></returns>
public NotificationData WriteStandardData(string title, string message, DateTime createTime, string formUser, string description = "")
{
TrySetData("title", title);
TrySetData("message", message);
TrySetData("description", description);
TrySetData("formUser", formUser);
TrySetData("createTime", createTime);
TrySetData(LocalizerKey, false);
return this;
}
/// <summary>
/// 写入标准数据
/// </summary>
/// <param name="prefix">数据前缀</param>
/// <param name="key">标识</param>
/// <param name="value">数据内容</param>
/// <returns></returns>
public NotificationData WriteStandardData(string prefix, string key, object value)
{
TrySetData(string.Concat(prefix, key), value);
TrySetData(LocalizerKey, false);
return this;
}
/// <summary>
/// 转换为标准数据
/// </summary>
/// <param name="sourceData">原始数据</param>
/// <returns></returns>
public static NotificationData ToStandardData(NotificationData sourceData)
{
var data = new NotificationData();
data.TrySetData("title", sourceData.TryGetData("title"));
data.TrySetData("message", sourceData.TryGetData("message"));
data.TrySetData("description", sourceData.TryGetData("description"));
data.TrySetData("formUser", sourceData.TryGetData("formUser"));
data.TrySetData("createTime", sourceData.TryGetData("createTime"));
data.TrySetData(LocalizerKey, sourceData.TryGetData(LocalizerKey));
return data;
}
/// <summary>
/// 转换为标准数据
/// </summary>
/// <param name="prefix">数据前缀</param>
/// <param name="sourceData">原始数据</param>
/// <returns></returns>
public static NotificationData ToStandardData(string prefix, NotificationData sourceData)
{
var data = ToStandardData(sourceData);
foreach (var property in sourceData.ExtraProperties)
{
if (property.Key.StartsWith(prefix))
{
var key = property.Key.Replace(prefix, "");
data.TrySetData(key, property.Value);
}
}
return data;
}
public object TryGetData(string key)
{
return this.GetProperty(key);
}
public void TrySetData(string key, object value)
{
this.SetProperty(key, value);
}
/// <summary>
/// 需要本地化
/// </summary>
/// <returns></returns>
public bool NeedLocalizer()
{
var localizer = TryGetData(LocalizerKey);
if (localizer != null && localizer is bool needLocalizer)
{
return needLocalizer;
}
return false;
}
}