diff --git a/Infrastructure/AppSetting.cs b/Infrastructure/AppSetting.cs index 698468e1..b695e52f 100644 --- a/Infrastructure/AppSetting.cs +++ b/Infrastructure/AppSetting.cs @@ -35,6 +35,11 @@ //identity授权的地址 public string IdentityServerUrl { get; set; } + + /// + /// Redis服务器配置 + /// + public string RedisConf { get; set; } //是否是Identity授权方式 public bool IsIdentityAuth => !string.IsNullOrEmpty(IdentityServerUrl); diff --git a/Infrastructure/Cache/RedisCacheContext.cs b/Infrastructure/Cache/RedisCacheContext.cs new file mode 100644 index 00000000..d80ac073 --- /dev/null +++ b/Infrastructure/Cache/RedisCacheContext.cs @@ -0,0 +1,59 @@ +using System; +using Enyim.Caching; +using Enyim.Caching.Memcached; +using Microsoft.Extensions.Options; +using StackExchange.Redis; + +namespace Infrastructure.Cache +{ + /// + /// 缓存redis实现 + /// + public sealed class RedisCacheContext : ICacheContext + { + private ConnectionMultiplexer _conn { get; set; } + private IDatabase iDatabase { get; set; } + + private AppSetting _appSettings; + public RedisCacheContext(IOptions options) + { + _conn = ConnectionMultiplexer.Connect(options.Value.RedisConf); + iDatabase = _conn.GetDatabase(); + } + + public override T Get(string key) + { + RedisValue value = iDatabase.StringGet(key); + if (!value.HasValue) + { + return default(T); + } + + if (typeof(T) == typeof(string)) + { + return (T) Convert.ChangeType(value, typeof(T)); + } + else + { + return JsonHelper.Instance.Deserialize(value); + } + } + + public override bool Set(string key, T t, DateTime expire) + { + if (typeof(T) == typeof(string)) + { + return iDatabase.StringSet(key, t.ToString(), expire-DateTime.Now); + } + else + { + return iDatabase.StringSet(key, JsonHelper.Instance.Serialize(t), expire - DateTime.Now); + } + } + + public override bool Remove(string key) + { + return iDatabase.KeyDelete(key); + } + } +} \ No newline at end of file diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index 1a26d828..050cdebb 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -19,6 +19,7 @@ + diff --git a/OpenAuth.App/FlowInstanceApp.cs b/OpenAuth.App/FlowInstanceApp.cs index c01a372c..e3b3870e 100644 --- a/OpenAuth.App/FlowInstanceApp.cs +++ b/OpenAuth.App/FlowInstanceApp.cs @@ -481,7 +481,7 @@ namespace OpenAuth.App if (request.type == "wait") //待办事项 { - Expression> waitExp = u => (u.MakerList == "1" || u.MakerList.Contains(user.User.Id)) && u.IsFinish == 0; + Expression> waitExp = u => (u.MakerList == "1" || u.MakerList.Contains(user.User.Id)) && (u.IsFinish == 0|| u.IsFinish==4); // 加入搜索自定义标题 if (!string.IsNullOrEmpty(request.key)) diff --git a/OpenAuth.App/Test/TestBase.cs b/OpenAuth.App/Test/TestBase.cs index 077f66de..bbba6f75 100644 --- a/OpenAuth.App/Test/TestBase.cs +++ b/OpenAuth.App/Test/TestBase.cs @@ -35,6 +35,7 @@ namespace OpenAuth.App.Test .Build(); Console.WriteLine($"单元测试数据库信息:{config.GetSection("AppSetting")["DbType"]}/{config.GetSection("ConnectionStrings")["OpenAuthDBContext"]}"); + serviceCollection.Configure(config.GetSection("AppSetting")); //添加log4net serviceCollection.AddLogging(builder => { diff --git a/OpenAuth.App/Test/TestCache.cs b/OpenAuth.App/Test/TestCache.cs new file mode 100644 index 00000000..3375c31e --- /dev/null +++ b/OpenAuth.App/Test/TestCache.cs @@ -0,0 +1,77 @@ +using System; +using System.Linq; +using Infrastructure; +using Infrastructure.Cache; +using Microsoft.AspNetCore.Http; +using NUnit.Framework; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using OpenAuth.App.Request; +using OpenAuth.App.SSO; +using OpenAuth.Repository.Domain; + +namespace OpenAuth.App.Test +{ + public class TestCache :TestBase + { + public override ServiceCollection GetService() + { + var services = new ServiceCollection(); + + var delservices = services.Where(u => u.ServiceType == typeof(ICacheContext)).ToList(); + for (int i = 0; i < delservices.Count(); i++) + { + services.Remove(delservices[i]); + } + services.AddScoped(typeof(ICacheContext), typeof(RedisCacheContext)); + + return services; + } + + + /// + /// 测试字符串 + /// + [Test] + public void SetString() + { + var app = _autofacServiceProvider.GetService(); + app.Set("yubaolee", "ok", DateTime.Now.AddDays(1)); + + var result = app.Get("yubaolee"); + Console.WriteLine($"redis结果:{result}"); + } + + /// + /// 测试对象 + /// + [Test] + public void SetObj() + { + var app = _autofacServiceProvider.GetService(); + app.Set("user:info", new User + { + Name = "测试", + Account ="Test", + BizCode = "0.1.1" + }, DateTime.Now.AddDays(1)); + + var result = app.Get("user:info"); + Console.WriteLine($"redis结果:{JsonHelper.Instance.Serialize(result)}"); + } + + /// + /// 测试获取不存在的key + /// + [Test] + public void GetNoExistKey() + { + var app = _autofacServiceProvider.GetService(); + + var result = app.Get("noexistkey"); + Console.WriteLine($"redis结果:{JsonHelper.Instance.Serialize(result)}"); + } + + + } +} diff --git a/OpenAuth.WebApi/appsettings.Production.json b/OpenAuth.WebApi/appsettings.Production.json index 9e1f30a5..656d8ba8 100644 --- a/OpenAuth.WebApi/appsettings.Production.json +++ b/OpenAuth.WebApi/appsettings.Production.json @@ -15,6 +15,7 @@ "IdentityServerUrl": "", //IdentityServer服务器地址。如果为空,则不启用OAuth认证 //"IdentityServerUrl": "http://demo.openauth.me:12796", //IdentityServer服务器地址。如果为空,则不启用OAuth认证 "DbType": "MySql", //数据库类型:SqlServer、MySql - "UploadPath": "" //附件上传的路径,如果为空则保存在站点根目录 + "UploadPath": "", //附件上传的路径,如果为空则保存在站点根目录 + "RedisConf": "your_redis_server:6379,password=your_redis_password" //redis配置信息 } } diff --git a/OpenAuth.WebApi/appsettings.json b/OpenAuth.WebApi/appsettings.json index 6d5aac86..a082b3bf 100644 --- a/OpenAuth.WebApi/appsettings.json +++ b/OpenAuth.WebApi/appsettings.json @@ -14,6 +14,7 @@ "IdentityServerUrl": "", //IdentityServer服务器地址。如果为空,则不启用OAuth认证 // "IdentityServerUrl": "http://localhost:12796", //IdentityServer服务器地址。如果为空,则不启用OAuth认证 "DbType": "SqlServer", //数据库类型:SqlServer、MySql - "UploadPath": "" //附件上传的路径,如果为空则保存在站点根目录 + "UploadPath": "", //附件上传的路径,如果为空则保存在站点根目录 + "RedisConf": "redistest.cq-p.com.cn:8001,password=share_redis@123" } }