Selaa lähdekoodia

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

wangh 2 vuotta sitten
vanhempi
commit
4ee25fb8bb

+ 8 - 19
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -5,8 +5,6 @@ using System.IdentityModel.Tokens.Jwt;
 using System.Security.Claims;
 using StackExchange.Redis;
 using OASystem.Domain.Dtos.UserDto;
-using OASystem.Domain.Entities.System;
-using OASystem.Domain;
 using OASystem.RedisRepository;
 
 namespace OASystem.API.Controllers
@@ -20,11 +18,15 @@ namespace OASystem.API.Controllers
         private readonly IMapper _mapper;
         private readonly IConfiguration _config;
         private readonly LoginRepository _loginRep;
+        private readonly UsersRepository _usersRepository;
+        //private IDatabase _redis;
+        //private RedisHelper _redisHelper;
         public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper)
         {
             _config = config;
             _loginRep = loginRep;
             _mapper = mapper;
+            //_usersRepository = usersRepository;
         }
 
         /// <summary>
@@ -32,14 +34,13 @@ namespace OASystem.API.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [AllowAnonymous]
         [Route("login")]
         [HttpPost]
         [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
         public async Task<IActionResult> LoginAsync(LoginDto dto)
         {
-            #region 校验用户信息,假设此处我们已经校验成功
-            var userData = _loginRep.Login(_loginRep, dto);
+            #region 校验用户信息 
+            var userData = _loginRep.Login(dto);
             if (userData.Result.Code != 0)
             {
                 if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
@@ -47,23 +48,11 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, "暂无该员工信息!"));
             }
 
-            //人事审核是否通过
-            if (userData.Result.Data.HrAudit != 1)
-            {
-                return Ok(JsonView(false, "该员工账号暂无登录权限,人事审核未通过!"));
-            }
-
-            //该用户是否已删除
-            if (userData.Result.Data.HrAudit != 1)
-            {
-                return Ok(JsonView(false, "已离职员工没有登录权限"));
-            }
-
-
             #endregion
             var view = new LoginView
             {
-                Expires = DateTime.Now.AddMinutes(30)
+                Expires = DateTime.Now.AddMinutes(30),
+                UserInfo = userData.Result.Data
             };
 
             string authorId = dto.Number + "Token";

+ 6 - 0
OASystem/OASystem.Api/OASystemAuthentication.cs

@@ -0,0 +1,6 @@
+namespace OASystem.API
+{
+    public class OASystemAuthentication
+    {
+    }
+}

+ 3 - 3
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -30,9 +30,9 @@ namespace OASystem.Domain.AutoMappers
 
             #region 用户板块
             CreateMap<UserDto, Sys_Users>();
-            CreateMap<Sys_Users, UserInfoView>();
-            CreateMap<UserInfoView,UserIView>();
-            CreateMap<UserInfoView, UserIWebView>();
+            CreateMap<Sys_Users, UserInfo>();
+
+
             #endregion
 
         }

+ 44 - 16
OASystem/OASystem.Domain/Entities/Resource/Res_CarData.cs

@@ -33,7 +33,7 @@ namespace OASystem.Domain.Entities.Resource
         /// <summary>
         /// 联系人
         /// </summary>
-        [SugarColumn(IsNullable = true,ColumnDataType = "varchar(30)")]
+        [SugarColumn(IsNullable = true,ColumnDataType = "varchar(50)")]
         public string Contact { get; set; }
 
         /// <summary>
@@ -54,10 +54,24 @@ namespace OASystem.Domain.Entities.Resource
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
         public string ContactFax { get; set; }
 
+        /// <summary>
+        /// 车描述
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string CarDes { get; set; }
+
+        /// <summary>
+        /// 车图片路径
+        /// 存储多个 使用/r/n
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string CarPicPaths { get; set; }
+
+
         /// <summary>
         /// 其他信息
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string OtherInfo { get; set; }
 
         /// <summary>
@@ -67,52 +81,66 @@ namespace OASystem.Domain.Entities.Resource
         public int Score { get; set; }
 
         /// <summary>
-        /// 着装得体
+        /// 相关的车辆资质
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string SuitScore { get; set; }
+        public string QualificationScore { get; set; }
 
         /// <summary>
-        /// 服务意识强度
+        /// 车辆2-4年新,VIP及以上需要2年新
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string ServeScore { get; set; }
+        public string CarAgeScore { get; set; }
 
         /// <summary>
-        /// 讲解水平专业
+        /// 车身干净,无文字图片等
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string TalkProScore { get; set; }
+        public string CleanImgScore { get; set; }
 
         /// <summary>
-        /// 时间概念强度
+        /// 车内整洁、无异味
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string TimeScore { get; set; }
+        public string SmellScore { get; set; }
+
+        /// <summary>
+        /// 提前备水,纸巾等
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string WaterPaperScore { get; set; }
+
+        /// <summary>
+        /// 车辆配置高(皮座椅等)
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string HardwareScore { get; set; }
 
         /// <summary>
-        /// 配合能力强,服从安排
+        /// 时间概念强
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string FitScore { get; set; }
+        public string TimeScore { get; set; }
 
         /// <summary>
-        /// 应变能力强
+        /// 安全意识高
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string StrainScore { get; set; }
+        public string SafetyScore { get; set; }
 
         /// <summary>
-        /// 当地语言和中文表达流畅
+        /// 司机驾龄时间长,提前熟悉路线
         /// A B C  选择
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
-        public string LocalAndChineseScore { get; set; }
+        public string DrivingAgeScore { get; set; }
     }
 }

+ 2 - 2
OASystem/OASystem.Domain/Entities/Resource/Res_LocalGuideData.cs

@@ -33,7 +33,7 @@ namespace OASystem.Domain.Entities.Resource
         /// <summary>
         /// 联系人
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string Contact { get; set; }
 
         /// <summary>
@@ -57,7 +57,7 @@ namespace OASystem.Domain.Entities.Resource
         /// <summary>
         /// 其他信息
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string OtherInfo { get; set; }
 
         /// <summary>

+ 1 - 1
OASystem/OASystem.Domain/Entities/System/Sys_Users.cs

@@ -162,7 +162,7 @@ namespace OASystem.Domain.Entities.System
     /// 用户表
     /// 数据库查询接受实体类
     /// </summary>
-    public class UserInfoView : Sys_Users
+    public class UserInfo : Sys_Users
     {
         /// <summary>
         /// 公司名称

+ 4 - 1
OASystem/OASystem.Domain/ViewModels/LoginView.cs

@@ -15,5 +15,8 @@ public class LoginView
     /// </summary>
     public DateTime Expires { get; set; }
 
-
+    /// <summary>
+    /// 返回用户信息
+    /// </summary>
+    public object? UserInfo { get; set; }
 }

+ 46 - 28
OASystem/OASystem.Domain/ViewModels/System/UserInfoView.cs

@@ -7,12 +7,12 @@ using System.Threading.Tasks;
 
 namespace OASystem.Domain.ViewModels.System
 {
-    
+
     /// <summary>
     /// 用户数据 数据库返回数据实体接受类
     /// 查询返回View
     /// </summary>
-    public class UserIView
+    public class UserView
     {
 
         /// <summary>
@@ -69,17 +69,17 @@ namespace OASystem.Domain.ViewModels.System
     /// 用户数据 - Web
     /// 查询返回View
     /// </summary>
-    public class UserIWebView
+    public class UserInfoWebView
     {
-        /// <summary>
-        /// 工号
-        /// </summary>
-        public string Number { get; set; }
+        ///// <summary>
+        ///// 工号
+        ///// </summary>
+        ////public string Number { get; set; }
 
         /// <summary>
         /// 用户Id
         /// </summary>
-        public int Id { get; set; }
+        public int UserId { get; set; }
 
         /// <summary>
         /// 中文姓名
@@ -87,54 +87,72 @@ namespace OASystem.Domain.ViewModels.System
         public string CnName { get; set; }
 
         /// <summary>
-        /// 公司Id
+        /// 公司名称
         /// </summary>
-        public int CompanyId { get; set; }
+        public string CompanyName { get; set; }
 
         /// <summary>
-        /// 公司名称
+        /// 部门名称
         /// </summary>
-        public string CompanyName { get; set; }
+        public string DepName { get; set; }
 
         /// <summary>
-        /// 部门Id
+        /// 岗位名称
         /// </summary>
-        public int DepId { get; set; }
+        public string JobName { get; set; }
+       
+        /// <summary>
+        /// 邮箱
+        /// </summary>
+        public string Email { get; set; }
 
+    }
+
+    /// <summary>
+    /// 用户信息 - 个人基本信息
+    /// </summary>
+    public class UserBasicInfoView 
+    {
         /// <summary>
-        /// 部门名称
+        /// 用户Id
         /// </summary>
-        public string DepName { get; set; }
+        public int Id { get; set; }
 
         /// <summary>
-        /// 岗位Id
+        /// 中文姓名
         /// </summary>
-        public int JobPostId { get; set; }
+        public string CnName { get; set; }
+
         /// <summary>
-        /// 岗位名称
+        /// 性别
+        /// 0 男1 女  2 未设置
         /// </summary>
-        public string JobName { get; set; }
-       
+
+        public int Sex { get; set; }
+
         /// <summary>
-        /// 分机
+        /// 
         /// </summary>
+        public string Number { get; set; }
 
-        public string Ext { get; set; }
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string CompanyName { get; set; }
 
         /// <summary>
-        /// 手机号
+        /// 部门名称
         /// </summary>
-        public string Phone { get; set; }
+        public string DepName { get; set; }
 
         /// <summary>
-        /// 紧急联系人 手机号
+        /// 岗位名称
         /// </summary>
-        public string UrgentPhone { get; set; }
+        public string JobName { get; set; }
 
         /// <summary>
         /// 邮箱
         /// </summary>
         public string Email { get; set; }
-
     }
 }

+ 38 - 5
OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs

@@ -1,7 +1,12 @@
 
+using AutoMapper;
 using OASystem.Domain;
+using OASystem.Domain.Dtos.System;
 using OASystem.Domain.Dtos.UserDto;
 using OASystem.Domain.Entities.System;
+using OASystem.Domain.ViewModels.System;
+using OASystem.Infrastructure.Repositories.System;
+using SqlSugar;
 
 namespace OASystem.Infrastructure.Repositories.Login
 {
@@ -9,6 +14,7 @@ namespace OASystem.Infrastructure.Repositories.Login
     {
         public LoginRepository(SqlSugarClient sqlSugar) : base(sqlSugar)
         {
+            
         }
 
         /// <summary>
@@ -18,22 +24,49 @@ namespace OASystem.Infrastructure.Repositories.Login
         /// <param name="_loginRep"></param>
         /// <param name="loginDto"></param>
         /// <returns></returns>
-        public async Task<Result> Login(LoginRepository _loginRep, LoginDto loginDto)
+        public async Task<Result> Login(LoginDto loginDto)
         {
-            Result result = new Result();
+            Result result = new Result() { Code = -2 };
             string SQLWhere = string.Format("Where Number='{0}' And Password='{1}'", loginDto.Number, loginDto.Password);
             string sql = string.Format("Select * From Sys_Users With(NoLock) {0}", SQLWhere);
-            Sys_Users _entity = await _loginRep.GetSingleInfoBySqlWithNolockAsync(sql);
+            Sys_Users _entity = await GetSingleInfoBySqlWithNolockAsync(sql);
+
+
             if (_entity == null)
             {
-                result.Code = -2;
                 result.Msg = "暂无该账号信息!";
+                return result;
+            }
+
+            //人事审核是否通过
+            if (_entity.HrAudit != 1)
+            {
+                result.Msg = "该员工账号暂无登录权限,人事审核未通过!";
+                return result;
+            }
 
+            //该用户是否已删除
+            if (_entity.HrAudit != 1)
+            {
+                result.Msg = "已离职员工没有登录权限!";
                 return result;
             }
+
+
+            //员工数据
+            string sqlWhere = string.Format(" Where su.Id={0}", _entity.Id);
+            string userSqlWhere = string.Format(@"Select sc.CompanyName,sd.DepName,sjp.JobName,su.Id UserId,su.CnName,su.Email
+                                                  From Sys_Users su 
+                                                  Inner Join Sys_Company sc On su.CompanyId = sc.Id
+                                                  Inner Join Sys_Department sd On su.DepId = sd.Id
+                                                  Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
+            var _userBasicInfo = await _sqlSugar.SqlQueryable<UserInfoWebView>(userSqlWhere).FirstAsync();
+
+
+
             result.Code = 0;
             result.Msg = "登录成功!";
-            result.Data = _entity;
+            result.Data = _userBasicInfo;
             return result;
 
         }

+ 57 - 32
OASystem/OASystem.Infrastructure/Repositories/System/UsersRepository.cs

@@ -11,7 +11,7 @@ using System.Threading.Tasks;
 
 namespace OASystem.Infrastructure.Repositories.System
 {
-    public class UsersRepository : BaseRepository<UserInfoView, UserIView>
+    public class UsersRepository : BaseRepository<UserInfo, JsonView>
     {
         private readonly IMapper _mapper;
         public UsersRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
@@ -26,49 +26,74 @@ namespace OASystem.Infrastructure.Repositories.System
         /// <returns></returns>
         public async Task<Result> GetUserList(int portType,string sqlWhere)
         {
-            Result result = new Result();
-            string userSqlWhere = string.Format(@"Select sjp.JobName,sd.DepName,sc.CompanyName,su.* From Sys_Users su 
-                                                  Inner Join Sys_Company sc On su.CompanyId = sc.Id
-                                                  Inner Join Sys_Department sd On su.DepId = sd.Id
-                                                  Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
-            var _userList = await GetListBySqlWithNolockAsync(userSqlWhere);
+            Result result = new Result() { Code = -2 };
+            
+            //List<UserInfoWebView> _userList = _sqlSugar.Queryable<Sys_Users>()
+            //    .InnerJoin<Sys_Company>((u, c) => u.CompanyId == c.Id) //若是多个条件 用 &&
+            //    .InnerJoin<Sys_Department>((u, c, d) => u.DepId == d.Id)
+            //    .InnerJoin<Sys_JobPost>((u, c, d, j) => u.JobPostId == j.Id)
+            //    .Where((u) => u.Id == 208)
+            //    .Select
+            //    ((u, c, d, j) => new UserInfoWebView
+            //    { 
+            //        Number = u.Number,
+            //        CompanyId = u.CompanyId, 
+            //        CompanyName = c.CompanyName, 
+            //        DepId=u.DepId,
+            //        DepName = d.DepName,
+            //        JobPostId = u.JobPostId,
+            //        JobName = j.JobName,
+            //        Id = u.Id,
+            //        CnName = u.CnName,
+            //        Phone = u.Phone,
+            //        UrgentPhone = u.UrgentPhone,
+            //        Ext =u.Ext,
+            //        Email = u.Email,
+            //    })
+            //    .ToList();
+
 
             if (portType == 1) //web
             {
-                List<UserIWebView> _userWebList = _mapper.Map<List<UserIWebView>>(_userList);
-                if (_userList.Count != 0)
-                {
-                    result.Code = 0;
-                    result.Msg = "成功!";
-                    result.Data = _userWebList;
-                }
-                else
-                {
-                    result.Code = -1;
-                    result.Msg = "暂无数据!";
-                }
+
+                //string userSqlWhere = string.Format(@"Select su.CompanyId, sc.CompanyName,su.DepId,sd.DepName,su.JobPostId,
+                //                                  	     sjp.JobName,su.Id UserId,su.CnName,su.Phone,su.UrgentPhone,su.Email
+                //                                      From Sys_Users su 
+                //                                      Inner Join Sys_Company sc On su.CompanyId = sc.Id
+                //                                      Inner Join Sys_Department sd On su.DepId = sd.Id
+                //                                      Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
+                //var _userList = await _sqlSugar.SqlQueryable<UserInfoWebView>(userSqlWhere).ToListAsync();
+
+                //if (_userList.Count != 0)
+                //{
+                //    result.Code = 0;
+                //    result.Msg = "成功!";
+                //    result.Data = _userList;
+                //}
+                //else
+                //{
+                //    result.Msg = "暂无数据!";
+                //}
             }
             else if (portType == 2) //Android
             {
-                List<UserIView> _userDataList = _mapper.Map<List<UserIView>>(_userList);
-                if (_userDataList.Count != 0)
-                {
-                    result.Code = 0;
-                    result.Msg = "成功!";
-                    result.Data = _userDataList;
-                }
-                else
-                {
-                    result.Code = -1;
-                    result.Msg = "暂无数据!";
-                }
+                //List<UserView> _userDataList = _mapper.Map<List<UserView>>(_userList);
+                //if (_userDataList.Count != 0)
+                //{
+                //    result.Code = 0;
+                //    result.Msg = "成功!";
+                //    result.Data = _userDataList;
+                //}
+                //else
+                //{
+                //    result.Msg = "暂无数据!";
+                //}
             }
             else if (portType == 3) //IOS
             {
             }
             else
             {
-                result.Code = -1;
                 result.Msg = "暂无数据!";
             } 
             

+ 248 - 248
OASystem/OASystem.RedisRepository/RedisAsyncHelper/IRedisHelper.cs

@@ -53,256 +53,256 @@ namespace OASystem.RedisRepository.RedisAsyncHelper
 
         #region Redis数据类型—Hash
 
-        ///// <summary>
-        ///// 向Hash key中存储任意类型任意值
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="field"></param>
-        ///// <param name="value"></param>
-        ///// <returns>是否成功</returns>
-        //Task<bool> HashSetAsync<T>(string key, string field, T value);
+        /// <summary>
+        /// 向Hash key中存储任意类型任意值
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <param name="value"></param>
+        /// <returns>是否成功</returns>
+        Task<bool> HashSetAsync<T>(string key, string field, T value);
 
-        ///// <summary>
-        ///// 批量 向Hash key中存储任意类型任意值
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="hashFields"></param>
-        ///// <returns>无返回值</returns>
-        //Task HashMultiSetAsync<T>(string key, Dictionary<string, T> hashFields);
+        /// <summary>
+        /// 批量 向Hash key中存储任意类型任意值
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="hashFields"></param>
+        /// <returns>无返回值</returns>
+        Task HashMultiSetAsync<T>(string key, Dictionary<string, T> hashFields);
 
-        ///// <summary>
-        ///// 对指定hash key中制定field做数量增加操作 默认自增1 
-        ///// 如果此操作前key不存在 则创建。 如果此操作前该field不存在或者非数字 则先被置0,再被继续操作
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="field"></param>
-        ///// <param name="incrCount"></param>
-        ///// <returns>操作后的结果</returns>
-        //Task<long> HashIncrementAsync(string key, string field, long incrCount = 1);
+        /// <summary>
+        /// 对指定hash key中制定field做数量增加操作 默认自增1 
+        /// 如果此操作前key不存在 则创建。 如果此操作前该field不存在或者非数字 则先被置0,再被继续操作
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <param name="incrCount"></param>
+        /// <returns>操作后的结果</returns>
+        Task<long> HashIncrementAsync(string key, string field, long incrCount = 1);
 
-        ///// <summary>
-        ///// 对指定hash key中制定field做数量增加操作 默认自减1 
-        ///// 如果此操作前key不存在 则创建。 如果此操作前该field不存在或者非数字 则先被置0,再被继续操作
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="field"></param>
-        ///// <param name="decrCount"></param>
-        ///// <returns>操作后的结果</returns>
-        //Task<long> HashDecrementAsync(string key, string field, long decrCount = 1);
+        /// <summary>
+        /// 对指定hash key中制定field做数量增加操作 默认自减1 
+        /// 如果此操作前key不存在 则创建。 如果此操作前该field不存在或者非数字 则先被置0,再被继续操作
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <param name="decrCount"></param>
+        /// <returns>操作后的结果</returns>
+        Task<long> HashDecrementAsync(string key, string field, long decrCount = 1);
 
-        ///// <summary>
-        ///// 从指定Hash中 删除指定field
-        ///// 如果key或者field不存在,则false
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="field"></param>
-        ///// <returns>是否成功</returns>
-        //Task<bool> HashDeleteFieldAsync(string key, string field);
+        /// <summary>
+        /// 从指定Hash中 删除指定field
+        /// 如果key或者field不存在,则false
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <returns>是否成功</returns>
+        Task<bool> HashDeleteFieldAsync(string key, string field);
 
-        ///// <summary>
-        ///// 从指定Hash key中 批量删除指定field
-        ///// 如果key或者field不存在,则false
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="fields"></param>
-        ///// <returns>移除数量</returns>
-        //Task<long> HashMultiDeleteFieldAsync(string key, List<string> fields);
+        /// <summary>
+        /// 从指定Hash key中 批量删除指定field
+        /// 如果key或者field不存在,则false
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="fields"></param>
+        /// <returns>移除数量</returns>
+        Task<long> HashMultiDeleteFieldAsync(string key, List<string> fields);
 
-        ///// <summary>
-        ///// 从指定Hash key中获取指定field值
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="field"></param>
-        ///// <returns></returns>
-        //Task<T> HashGetAsync<T>(string key, string field);
+        /// <summary>
+        /// 从指定Hash key中获取指定field值
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        Task<T> HashGetAsync<T>(string key, string field);
 
-        ///// <summary>
-        ///// 从指定Hash key中判断field是否存在
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="field"></param>
-        ///// <returns></returns>
-        //Task<bool> HashFieldExistAsync(string key, string field);
+        /// <summary>
+        /// 从指定Hash key中判断field是否存在
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        Task<bool> HashFieldExistAsync(string key, string field);
 
-        ///// <summary>
-        ///// 获取指定Hash key中的所有field的值 
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<List<T>> HashValuesAsync<T>(string key);
+        /// <summary>
+        /// 获取指定Hash key中的所有field的值 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<List<T>> HashValuesAsync<T>(string key);
 
-        ///// <summary>
-        ///// 获取指定Hash key中所有 field名称及其Value
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<Dictionary<string, T>> HashGetAllAsync<T>(string key);
+        /// <summary>
+        /// 获取指定Hash key中所有 field名称及其Value
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<Dictionary<string, T>> HashGetAllAsync<T>(string key);
 
-        ///// <summary>
-        ///// 获取指定Hash key中所有field
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<List<string>> HashFieldsAsync(string key);
+        /// <summary>
+        /// 获取指定Hash key中所有field
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<List<string>> HashFieldsAsync(string key);
 
         #endregion
 
         #region Redis数据类型—List     
 
-        ///// <summary>
-        ///// 在指定pivot后插入value, 如果pivot不存在,则返回-1, 如果key不存在,则返回0
-        ///// 如果存在多个相同指定的的pivot,则插入第一个指定pivot后面.
-        ///// 即链表从左向右查找,遇到指定pivot,则确定位置
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="pivot">list中的一个值</param>
-        ///// <param name="value"></param>
-        ///// <returns></returns>
-        //Task<long> ListInsertAfterAsync<T>(string key, string pivot, T value);
+        /// <summary>
+        /// 在指定pivot后插入value, 如果pivot不存在,则返回-1, 如果key不存在,则返回0
+        /// 如果存在多个相同指定的的pivot,则插入第一个指定pivot后面.
+        /// 即链表从左向右查找,遇到指定pivot,则确定位置
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="pivot">list中的一个值</param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        Task<long> ListInsertAfterAsync<T>(string key, string pivot, T value);
 
-        ///// <summary>
-        ///// 在指定pivot前插入value, 如果pivot不存在,则返回-1, 如果key不存在,则返回0
-        ///// 如果存在多个相同指定的的pivot,则插入第一个指定pivot前面.
-        ///// 即链表从左向右查找,遇到指定pivot,则确定位置
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="pivot"></param>
-        ///// <param name="value"></param>
-        ///// <returns></returns>
-        //Task<long> ListInsertBeforeAsync<T>(string key, string pivot, T value);
+        /// <summary>
+        /// 在指定pivot前插入value, 如果pivot不存在,则返回-1, 如果key不存在,则返回0
+        /// 如果存在多个相同指定的的pivot,则插入第一个指定pivot前面.
+        /// 即链表从左向右查找,遇到指定pivot,则确定位置
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="pivot"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        Task<long> ListInsertBeforeAsync<T>(string key, string pivot, T value);
 
-        ///// <summary>
-        ///// 从链表左侧弹出第一个元素(弹出能获取到该元素并且被删除)
-        ///// 如果key不存在 或者链表为空 则为null
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<T> ListLeftPopAsync<T>(string key);
+        /// <summary>
+        /// 从链表左侧弹出第一个元素(弹出能获取到该元素并且被删除)
+        /// 如果key不存在 或者链表为空 则为null
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<T> ListLeftPopAsync<T>(string key);
 
-        ///// <summary>
-        ///// 从链表左侧增加一个元素,key不存在则被创建
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="value"></param>
-        ///// <returns>返回操作后的链表长度</returns>
-        //Task<long> ListLeftPushAsync<T>(string key, T value);
+        /// <summary>
+        /// 从链表左侧增加一个元素,key不存在则被创建
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="value"></param>
+        /// <returns>返回操作后的链表长度</returns>
+        Task<long> ListLeftPushAsync<T>(string key, T value);
 
-        ///// <summary>
-        ///// 从链表左侧批量增加元素,如果 a b c  则c会在链表左侧第一位  b第二位  a第三位
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="values"></param>
-        ///// <returns>返回操作后的链表长度</returns>
-        //Task<long> ListLeftMultiPushAsync<T>(string key, List<T> values);
+        /// <summary>
+        /// 从链表左侧批量增加元素,如果 a b c  则c会在链表左侧第一位  b第二位  a第三位
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="values"></param>
+        /// <returns>返回操作后的链表长度</returns>
+        Task<long> ListLeftMultiPushAsync<T>(string key, List<T> values);
 
-        ///// <summary>
-        ///// 获取链表长度,不存在key则为0
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<long> ListLengthAsync<T>(string key);
+        /// <summary>
+        /// 获取链表长度,不存在key则为0
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<long> ListLengthAsync<T>(string key);
 
-        ///// <summary>
-        ///// 获取链表中所有数据,从左侧start开始到stop结束,从0—-1则认为获取全部,默认获取全部
-        ///// start为负数则代表从链表右侧开始,-1为右侧第一位,-2为右侧第二位
-        ///// start要小于stop,否则返回null
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="start"></param>
-        ///// <param name="stop"></param>
-        ///// <returns></returns>
-        //Task<List<T>> ListRangeAsync<T>(string key, long start = 0L, long stop = -1L);
+        /// <summary>
+        /// 获取链表中所有数据,从左侧start开始到stop结束,从0—-1则认为获取全部,默认获取全部
+        /// start为负数则代表从链表右侧开始,-1为右侧第一位,-2为右侧第二位
+        /// start要小于stop,否则返回null
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="start"></param>
+        /// <param name="stop"></param>
+        /// <returns></returns>
+        Task<List<T>> ListRangeAsync<T>(string key, long start = 0L, long stop = -1L);
 
-        ///// <summary>
-        ///// 从链表中一处count数量的value. count大于0则从左至右,count小于0则从右至左,count=0则移除全部
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="value"></param>
-        ///// <param name="count"></param>
-        ///// <returns></returns>
-        //Task<long> ListRemoveAsync<T>(string key, T value, long count = 0L);
+        /// <summary>
+        /// 从链表中一处count数量的value. count大于0则从左至右,count小于0则从右至左,count=0则移除全部
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="value"></param>
+        /// <param name="count"></param>
+        /// <returns></returns>
+        Task<long> ListRemoveAsync<T>(string key, T value, long count = 0L);
 
-        ///// <summary>
-        ///// 从右侧弹出第一个元素(弹出能获取到该元素并且被删除)
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<T> ListRightPopAsync<T>(string key);
+        /// <summary>
+        /// 从右侧弹出第一个元素(弹出能获取到该元素并且被删除)
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<T> ListRightPopAsync<T>(string key);
 
 
-        ///// <summary>
-        ///// 从链表右侧加入元素,如果 rpush a b c 则c为右侧第一位 b第二位 c第三位
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="value"></param>
-        ///// <returns></returns>
-        //Task<long> ListRightPushAsync<T>(string key, T value);
+        /// <summary>
+        /// 从链表右侧加入元素,如果 rpush a b c 则c为右侧第一位 b第二位 c第三位
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        Task<long> ListRightPushAsync<T>(string key, T value);
 
-        ///// <summary>
-        ///// 从右侧批量插入,和左侧相反
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="values"></param>
-        ///// <returns></returns>
-        //Task<long> ListRightMultiPushAsync<T>(string key, List<T> values);
+        /// <summary>
+        /// 从右侧批量插入,和左侧相反
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="values"></param>
+        /// <returns></returns>
+        Task<long> ListRightMultiPushAsync<T>(string key, List<T> values);
 
-        ///// <summary>
-        ///// 在链表指定索引处,插入元素
-        ///// 正数索引从0开始,代表左侧。负数从-1开始 代表从右侧。-1为右侧第一位
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="index"></param>
-        ///// <param name="value"></param>
-        ///// <returns></returns>
-        //Task ListSetByIndexAsync<T>(string key, int index, T value);
+        /// <summary>
+        /// 在链表指定索引处,插入元素
+        /// 正数索引从0开始,代表左侧。负数从-1开始 代表从右侧。-1为右侧第一位
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="index"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        Task ListSetByIndexAsync<T>(string key, int index, T value);
 
-        ///// <summary>
-        ///// 留下start到stop之间的数据。负数代表从右侧寻找  -1为右侧第一位
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="start"></param>
-        ///// <param name="stop"></param>
-        ///// <returns></returns>
-        //Task ListTrimAsync(string key, long start, long stop);
+        /// <summary>
+        /// 留下start到stop之间的数据。负数代表从右侧寻找  -1为右侧第一位
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="start"></param>
+        /// <param name="stop"></param>
+        /// <returns></returns>
+        Task ListTrimAsync(string key, long start, long stop);
 
-        ///// <summary>
-        ///// 获取指定index的值,负数代表从右侧寻找  -1为右侧第一位
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="index"></param>
-        ///// <returns></returns>
-        //Task<T> ListGetByIndexAsync<T>(string key, long index);
+        /// <summary>
+        /// 获取指定index的值,负数代表从右侧寻找  -1为右侧第一位
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        Task<T> ListGetByIndexAsync<T>(string key, long index);
 
         #endregion
 
         #region Redis数据类型—Set
 
-        ///// <summary>
-        ///// 向指定集合中增加一个元素
-        ///// </summary>
-        ///// <typeparam name="T"></typeparam>
-        ///// <param name="key"></param>
-        ///// <param name="value"></param>
-        ///// <returns></returns>
-        //Task<bool> SetAddAsync<T>(string key, T value);
+        /// <summary>
+        /// 向指定集合中增加一个元素
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="key"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        Task<bool> SetAddAsync<T>(string key, T value);
 
         ///// <summary>
         ///// 指定集合计算操作operation枚举,指定计算结果将存的目标destKey,指定需要参与计算的多个key
@@ -410,43 +410,43 @@ namespace OASystem.RedisRepository.RedisAsyncHelper
 
         #region Redis Key操作
 
-        ///// <summary>
-        ///// 删除指定key
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<bool> KeyDeleteAsync(string key);
+        /// <summary>
+        /// 删除指定key
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<bool> KeyDeleteAsync(string key);
 
-        ///// <summary>
-        ///// 设置key过期时间具体DateTime
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="expireAt"></param>
-        ///// <returns></returns>
+        /// <summary>
+        /// 设置key过期时间具体DateTime
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="expireAt"></param>
+        /// <returns></returns>
         //Task<bool> KeyExpireAtAsync(string key, DateTime expireAt);
 
-        ///// <summary>
-        ///// 设置key在将来的timeout后过期(TimeSpan)
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="timeout"></param>
-        ///// <returns></returns>
-        //Task<bool> KeyExpireInAsync(string key, TimeSpan timeout);
+        /// <summary>
+        /// 设置key在将来的timeout后过期(TimeSpan)
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="timeout"></param>
+        /// <returns></returns>
+        Task<bool> KeyExpireInAsync(string key, TimeSpan timeout);
 
-        ///// <summary>
-        ///// key重命名
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <param name="newKey"></param>
-        ///// <returns></returns>
-        //Task<bool> KeyRenameAsync(string key, string newKey);
+        /// <summary>
+        /// key重命名
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="newKey"></param>
+        /// <returns></returns>
+        Task<bool> KeyRenameAsync(string key, string newKey);
 
-        ///// <summary>
-        ///// 判断key是否已存在
-        ///// </summary>
-        ///// <param name="key"></param>
-        ///// <returns></returns>
-        //Task<bool> KeyExistsAsync(string key);
+        /// <summary>
+        /// 判断key是否已存在
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        Task<bool> KeyExistsAsync(string key);
 
         #endregion
 

+ 31 - 0
OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisKeyHelperAsync.cs

@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.RedisRepository.RedisAsyncHelper
+{
+    internal partial class RedisHelper
+    {
+        public async Task<bool> KeyDeleteAsync(string key)
+        {
+            return await _client.KeyDeleteAsync(key);
+        }
+
+        public async Task<bool> KeyExpireInAsync(string key, TimeSpan timeout)
+        {
+            return await _client.KeyExpireAsync(key, timeout);
+        }
+
+        public async Task<bool> KeyRenameAsync(string key, string newKey)
+        {
+            return await _client.KeyRenameAsync(key, newKey);
+        }
+
+        public async Task<bool> KeyExistsAsync(string key)
+        {
+            return await _client.KeyExistsAsync(key);
+        }
+    }
+}

+ 19 - 0
OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisSetHelper.cs

@@ -0,0 +1,19 @@
+using OASystem.RedisRepository.CommonHelper;
+using StackExchange.Redis;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.RedisRepository.RedisAsyncHelper
+{
+    internal partial class RedisHelper
+    {
+        public async Task<bool> SetAddAsync<T>(string key, T value)
+        {
+            return await _client.SetAddAsync(key, SerializeHelper.Serialize(value));
+        }
+
+    }
+}