Browse Source

解决合并冲突

PC 2 years ago
parent
commit
c7c3ccb77f
36 changed files with 1454 additions and 396 deletions
  1. 3 0
      OASystem/EntitySync/Program.cs
  2. 12 30
      OASystem/OASystem.Api/Controllers/AuthController.cs
  3. 11 0
      OASystem/OASystem.Api/Controllers/BaseController.cs
  4. 305 47
      OASystem/OASystem.Api/Controllers/SystemController.cs
  5. 4 1
      OASystem/OASystem.Api/GlobalUsings.cs
  6. 2 0
      OASystem/OASystem.Api/OASystem.API.csproj
  7. 6 0
      OASystem/OASystem.Api/OASystemAuthentication.cs
  8. 0 10
      OASystem/OASystem.Api/Program.cs
  9. 0 8
      OASystem/OASystem.Api/appsettings.json
  10. 8 4
      OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs
  11. 20 0
      OASystem/OASystem.Domain/Dtos/DtoBase.cs
  12. 133 0
      OASystem/OASystem.Domain/Dtos/System/CompanyDto.cs
  13. 76 2
      OASystem/OASystem.Domain/Dtos/System/DepartmentDto.cs
  14. 1 1
      OASystem/OASystem.Domain/Dtos/System/UserDto.cs
  15. 1 1
      OASystem/OASystem.Domain/Entities/EntityBase.cs
  16. 146 0
      OASystem/OASystem.Domain/Entities/Resource/Res_CarData.cs
  17. 118 0
      OASystem/OASystem.Domain/Entities/Resource/Res_LocalGuideData.cs
  18. 1 0
      OASystem/OASystem.Domain/Entities/System/Sys_Company.cs
  19. 2 0
      OASystem/OASystem.Domain/Entities/System/Sys_Department.cs
  20. 24 0
      OASystem/OASystem.Domain/Entities/System/Sys_Users.cs
  21. 1 1
      OASystem/OASystem.Domain/ViewModels/CompanyView.cs
  22. 4 1
      OASystem/OASystem.Domain/ViewModels/LoginView.cs
  23. 97 66
      OASystem/OASystem.Domain/ViewModels/System/UserInfoView.cs
  24. 2 1
      OASystem/OASystem.Infrastructure/GlobalUsings.cs
  25. 38 5
      OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs
  26. 1 1
      OASystem/OASystem.Infrastructure/Repositories/System/DepartmentRepository.cs
  27. 75 40
      OASystem/OASystem.Infrastructure/Repositories/System/UsersRepository.cs
  28. 0 74
      OASystem/OASystem.Infrastructure/Tools/RedisHelper.cs
  29. 2 2
      OASystem/OASystem.RedisRepository/Config/RedisConnection.cs
  30. 97 100
      OASystem/OASystem.RedisRepository/RedisAsyncHelper/IRedisHelper.cs
  31. 93 0
      OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisHashHelperAsync.cs
  32. 31 0
      OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisKeyHelperAsync.cs
  33. 99 0
      OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisListHelperAsync.cs
  34. 19 0
      OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisSetHelper.cs
  35. 1 1
      OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisStringHelperAsync.cs
  36. 21 0
      OASystem/OASystem.RedisRepository/RedisFactory.cs

+ 3 - 0
OASystem/EntitySync/Program.cs

@@ -70,5 +70,8 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Res_CarGuides),
     //typeof(Res_CarInfo),
     //typeof(Res_GuidesInfo)
+    
+    typeof(Res_CarData),
+    typeof(Res_LocalGuideData)
 });
 Console.WriteLine("数据库结构同步完成!");

+ 12 - 30
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -5,11 +5,7 @@ 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.Infrastructure.Repositories.System;
-using OASystem.Domain.Dtos.System;
-using OASystem.Domain.ViewModels.System;
+using OASystem.RedisRepository;
 
 namespace OASystem.API.Controllers
 {
@@ -22,9 +18,7 @@ namespace OASystem.API.Controllers
         private readonly IMapper _mapper;
         private readonly IConfiguration _config;
         private readonly LoginRepository _loginRep;
-        private readonly SetDataRepository _setDataRepository;
-        private readonly CompanyRepository _CompanyRepository;
-        private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
+        private readonly UsersRepository _usersRepository;
         //private IDatabase _redis;
         //private RedisHelper _redisHelper;
         public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper, 
@@ -34,11 +28,7 @@ namespace OASystem.API.Controllers
             _config = config;
             _loginRep = loginRep;
             _mapper = mapper;
-            _setDataRepository = setDataRepository;
-            _CompanyRepository = companyRepository;
-            _SystemMenuPermissionRepository = systemMenuPermissionRepository;
-            //_redis = client.GetDatabase(RedisEnum.Common);
-            //_redisHelper = client("132.232.92.186", "7369", "123456");
+            //_usersRepository = usersRepository;
         }
 
         /// <summary>
@@ -46,14 +36,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)); }
@@ -61,23 +50,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";
@@ -93,6 +70,11 @@ namespace OASystem.API.Controllers
                 signingCredentials: creds);
             view.Token = new JwtSecurityTokenHandler().WriteToken(token);
 
+            //Redis  String使用示例
+            //TimeSpan ts = new TimeSpan(0, 30, 0);
+            //await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("key01", "value01", ts);//string 存
+            //string redisString = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("key01");//string 取
+
             return Ok(JsonView(view));
         }
 

+ 11 - 0
OASystem/OASystem.Api/Controllers/BaseController.cs

@@ -49,6 +49,17 @@ public class ControllerBase : Microsoft.AspNetCore.Mvc.ControllerBase
             return new JsonView { Code = StatusCodes.Status400BadRequest, Msg = msg };
         }
     }
+    protected virtual JsonView JsonView(bool s, string msg, object obj)
+    {
+        if (s)
+        {
+            return new JsonView { Code = StatusCodes.Status200OK, Msg = msg,Data= obj };
+        }
+        else
+        {
+            return new JsonView { Code = StatusCodes.Status400BadRequest, Msg = msg };
+        }
+    }
     protected virtual JsonView JsonView(int code, string msg, object obj)
     {
         return new JsonView { Code = code, Msg = msg, Data = obj };

+ 305 - 47
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -1,10 +1,6 @@
 
-using MySqlX.XDevAPI.Common;
-using OASystem.Domain.Dtos.System;
-using OASystem.Domain.Entities.System;
-using OASystem.Domain.ViewModels.System;
-using OASystem.Infrastructure.Repositories.Login;
-using OASystem.Infrastructure.Repositories.System;
+
+
 
 namespace OASystem.API.Controllers
 {
@@ -15,6 +11,7 @@ namespace OASystem.API.Controllers
     [Route("api/[controller]/[action]")]
     public class SystemController : ControllerBase
     {
+      
         private readonly CompanyRepository _syscomRep;
         private readonly DepartmentRepository _sysDepRep;
         private readonly UsersRepository _userRep;
@@ -30,65 +27,219 @@ namespace OASystem.API.Controllers
         }
 
         #region user 操作
-
-       
-        [HttpGet]
-        [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> GetUserList()
+        /// <summary>
+        /// 查询所有员工(web)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GetUserList(DtoBase dto)
         {
-           var userList = _userRep.GetUserList(_userRep);
-            
-            if (userList.Result.Code != 0)
+            try
             {
-                return Ok(JsonView(false, userList.Result.Msg));
+                var result = _userRep.GetUserList(dto.PortType,string.Empty);
+                if (result.Result.Code != 0)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+
+                }
+                return Ok(JsonView(true,"查询成功!",result.Result.Data));
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
             }
-            
-            return Ok(JsonView(userList.Result.Data));
         }
 
         #endregion
 
         #region 企业操作
-        [HttpGet]
-        [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> getCompanyList()
+        /// <summary>
+        /// 查询企业数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> getCompanyList(DtoBase dto)
         {
             try
             {
-                //var companyList = _sysDepRep.QueryDto<Sys_Company, CompanyView>(c=>c.IsDel!=null).ToList();
-                string sqlWhere = "select * from Sys_Company";
-                var companyList = _syscomRep.GetListBySqlWithNolock(sqlWhere);
-                List<CompanyView> DataList = _mapper.Map<List<CompanyView>>(companyList);
-                if (DataList.Count == 0)
+                if (dto.PortType == 1)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+                else if (dto.PortType == 2)
+                {
+                    var companyList = _sysDepRep.QueryDto<Sys_Company, CompanyView>(a=>a.IsDel!=null).ToList();
+                    if (companyList.Count == 0)
+                    {
+                        return Ok(JsonView(false, "暂无数据!"));
+                    }
+                    return Ok(JsonView(true,"查询成功!",companyList));
+                }
+                else if (dto.PortType == 3)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+                else
                 {
                     return Ok(JsonView(false, "暂无数据!"));
                 }
-                return Ok(JsonView(DataList));
             }
             catch (Exception ex)
             {
                 return Ok(JsonView(false, "程序错误!"));
                 throw;
             }
+        }
+
+        /// <summary>
+        /// 添加企业数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView),StatusCodes.Status200OK)]
+        public async Task<IActionResult> AddCompany(AddCompanyDto dto)
+        {
+            try
+            {
+                if (string.IsNullOrWhiteSpace(dto.CompanyName) || dto.CreateUserId == 0 || string.IsNullOrWhiteSpace(dto.CompanyCode))
+                {
+                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
+                }
+                else if (string.IsNullOrWhiteSpace(dto.Tel))
+                {
+                    return Ok(JsonView(false, "请检查联系方式是否输入正确!"));
+                }
+                else
+                {
+                    Sys_Company _Company = _mapper.Map<Sys_Company>(dto);
+                    int id = await _syscomRep.AddAsyncReturnId(_Company);
+                    if (id == 0)
+                    {
+                        return Ok(JsonView(false, "添加失败!"));
+
+                    }
+                    return Ok(JsonView(true,"添加成功", new { Id = id }));
+                }
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+            
+            
+        }
+
+        /// <summary>
+        /// 企业修改
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult>EditCompany(EditCompanyDto dto)
+        {
+            try
+            {
+                if (string.IsNullOrWhiteSpace(dto.CompanyName) || string.IsNullOrWhiteSpace(dto.CompanyCode) || string.IsNullOrWhiteSpace(dto.Address) || dto.ParentCompanyId == 0 || dto.ContactUserId == 0)
+                {
+                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
+                }
+                else if (string.IsNullOrWhiteSpace(dto.Tel))
+                {
+                    return Ok(JsonView(false, "请检查联系方式是否输入正确!"));
+                }
+                else
+                {
+                    bool res = await _syscomRep.UpdateAsync(a => a.Id == dto.Id, a => new Sys_Company
+                    {
+                        CompanyName = dto.CompanyName,
+                        CompanyCode = dto.CompanyCode,
+                        Address = dto.Address,
+                        ParentCompanyId = dto.ParentCompanyId,
+                        Tel = dto.Tel,
+                        ContactUserId = dto.ContactUserId,
+                    });
+                    if (!res) { return Ok(JsonView(false, "修改失败")); }
+                    return Ok(JsonView(true,"修改成功!"));
+                }
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+            
+            
+        }
+
+         /// <summary>
+        /// 企业删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> DelCompany(DelCompanyDto dto)
+        {
+            try
+            {
+                bool res = await _syscomRep.SoftDeleteAsync<Sys_Company>(dto.Id.ToString());
+                if (!res) { return Ok(JsonView(false, "删除失败")); }
+                return Ok(JsonView(true, "删除成功"));
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+           
+            
+
         }
         #endregion
 
         #region 部门操作
 
-       
+        /// <summary>
+        /// 查询部门数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
         //[Authorize]
         [HttpPost]
-        [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> QueryDepartmentList(DepartmentDto dto)
         {
             try
             {
-                var result = _sysDepRep.QueryDto<Sys_Department, DepartmentView>(s => s.CompanyId == dto.CompanyId).ToList();
-                if (result.Count==0)
+                if (dto.PortType==1)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+                else if (dto.PortType==2)
+                {
+                    var result = _sysDepRep.QueryDto<Sys_Department, DepartmentIView>(s => s.CompanyId == dto.CompanyId).ToList();
+                    if (result.Count == 0)
+                    {
+                        return Ok(JsonView(false, "暂无数据!"));
+                    }
+                    return Ok(JsonView(true,"查询成功!",result));
+                }
+                else if (dto.PortType == 3)
+                {
+                    return Ok(JsonView(false, "暂无数据!"));
+                }
+                else
                 {
                     return Ok(JsonView(false, "暂无数据!"));
                 }
-                return Ok(JsonView(result));
             }
             catch (Exception ex)
             {
@@ -96,13 +247,126 @@ namespace OASystem.API.Controllers
                 throw;
             }
          
-            //return Ok(JsonView(0, "调用完成:", result));
+        }
+        /// <summary>
+        /// 部门添加
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> AddDepartment(AddDepartmentDto dto)
+        {
+            try
+            {
+                if (dto.CreateUserId == 0 || string.IsNullOrWhiteSpace(dto.DepName) || dto.CompanyId == 0 || string.IsNullOrWhiteSpace(dto.DepCode))
+                {
+                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
+                }
+                else
+                {
+                    Sys_Department _Department = _mapper.Map<Sys_Department>(dto);
+                    int id = await _sysDepRep.AddAsyncReturnId(_Department);
+                    if (id == 0)
+                    {
+                        return Ok(JsonView(false, "添加失败!"));
+                    }
+                    return Ok(JsonView(true, "添加成功!", new { Id = id }));
+                }
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+            
+           
+        }
+
+        /// <summary>
+        /// 部门修改
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> EditDepartment(EditDepartmentDto dto)
+        {
+            try
+            {
+                if (dto.Id==0 || string.IsNullOrWhiteSpace(dto.DepName) || dto.CompanyId == 0 || string.IsNullOrWhiteSpace(dto.DepCode))
+                {
+                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
+                }
+                else
+                {
+                    bool res = await _sysDepRep.UpdateAsync<Sys_Department>(a => a.Id == dto.Id, a => new Sys_Department
+                    {
+                        CompanyId=dto.CompanyId,
+                        DepCode=dto.DepCode,
+                        DepName=dto.DepName,
+                        ParentDepId=dto.ParentDepId,
+                        Remark=dto.Remark,
+    });
+                    if (!res)
+                    {
+                        return Ok(JsonView(false, "修改失败!"));
+                    }
+                    return Ok(JsonView(true, "修改成功!"));
+                }
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+
+
+        }
+
+        /// <summary>
+        /// 部门删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> DelDepartment(DelDepartmentDto dto)
+        {
+            try
+            {
+                if (dto.Id == 0)
+                {
+                    return Ok(JsonView(-1, "请检查信息是否输入完整!", null));
+                }
+                else
+                {
+                    bool res =await _sysDepRep.SoftDeleteAsync<Sys_Department>(dto.Id.ToString());
+                    if (!res)
+                    {
+                        return Ok(JsonView(false, "删除失败!"));
+                    }
+                    return Ok(JsonView(true, "删除成功!"));
+                }
+            }
+            catch (Exception)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+
+
         }
         #endregion
 
         #region 用户操作
+        /// <summary>
+        /// 查询用户数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
         [HttpPost]
-        [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> QueryUserList(UserDto dto)
         {
             try
@@ -116,24 +380,18 @@ namespace OASystem.API.Controllers
                 {
                     sqlWhere += string.Format(@" And su.DepId={0}", dto.DepId);
                 }
-                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 where 1=1 {0}",sqlWhere);
-                var _userList = _userRep.GetListBySqlWithNolock(userSqlWhere);
-                List<UserInfoListView> _userDataList = _mapper.Map<List<UserInfoListView>>(_userList);//这一步,映射不上JobName,DepName,CompanyName,
-
-                if (_userDataList.Count==0)
+                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
                 {
-                    return Ok(JsonView(false, "暂无数据!"));
+                    Regex r = new Regex("And");
+                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
                 }
-                for (int i = 0; i < _userDataList.Count; i++)
+                var result=_userRep.GetUserList(dto.PortType,sqlWhere);
+                if (result.Result.Code!=0)
                 {
-                    _userDataList[i].CompanyName = _userList[i].CompanyName;
-                    _userDataList[i].DepName = _userList[i].DepName;
-                    _userDataList[i].JobName = _userList[i].JobName;
+                    return Ok(JsonView(false, "暂无数据!"));
+
                 }
-                return Ok(JsonView(_userDataList));
+                return Ok(JsonView(true,"查询成功!",result.Result.Data));
             }
             catch (Exception)
             {

+ 4 - 1
OASystem/OASystem.Api/GlobalUsings.cs

@@ -47,6 +47,9 @@ global using System;
 global using System.Collections.Generic;
 global using System.Linq;
 global using OASystem.Domain;
-
+global using OASystem.Domain.Dtos.System;
+global using OASystem.Domain.Entities.System;
+global using OASystem.Domain.ViewModels.System;
+global using OASystem.Infrastructure.Repositories.System;
 
 

+ 2 - 0
OASystem/OASystem.Api/OASystem.API.csproj

@@ -5,6 +5,7 @@
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
+<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
   </PropertyGroup>
 
   <ItemGroup>
@@ -36,6 +37,7 @@
   <ItemGroup>
     <ProjectReference Include="..\OASystem.Domain\OASystem.Domain.csproj" />
     <ProjectReference Include="..\OASystem.Infrastructure\OASystem.Infrastructure.csproj" />
+    <ProjectReference Include="..\OASystem.RedisRepository\OASystem.RedisRepository.csproj" />
   </ItemGroup>
 
   <ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>

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

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

+ 0 - 10
OASystem/OASystem.Api/Program.cs

@@ -16,16 +16,6 @@ builder.Services.AddControllersWithViews();
 
 #region redis
 
-//redis缓存
-var section = builder.Configuration.GetSection("Redis:Default");
-//连接字符串
-string _connectionString = section.GetSection("Connection").Value;
-//实例名称
-string _instanceName = section.GetSection("InstanceName").Value;
-//默认数据库 
-int _defaultDB = int.Parse(section.GetSection("DefaultDB").Value ?? "0");
-builder.Services.AddSingleton(new RedisHelper(_connectionString+",password=123456", _instanceName, _defaultDB));
-
 #endregion
 
 

+ 0 - 8
OASystem/OASystem.Api/appsettings.json

@@ -4,13 +4,5 @@
   },
   "JwtSecurityKey": "48d3f4fe770940a1068052f581536b81", //jwt密钥
   "UseSwagger": "true", //启用Swagger
-  "Redis": {
-    "Default": {
-      "Connection": "132.232.92.186:6379", //redis连接地址,端口号,密码
-      "InstanceName": "local", //实例名
-      "DefaultDB": "0" //Db8数据库
-    }
-  }
-  ,"RedisServer": "11"
 
 }

+ 8 - 4
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -18,17 +18,21 @@ namespace OASystem.Domain.AutoMappers
 
             #region 公司板块
             CreateMap<Sys_Company, CompanyView>();
+            CreateMap<AddCompanyDto, Sys_Company>();
+            CreateMap<EditCompanyDto, Sys_Company>();
             #endregion
 
             #region 部门板块
-            CreateMap<DepartmentDto, Sys_Department>();
-            CreateMap<Sys_Department, DepartmentView>();
+            CreateMap<Sys_Department, DepartmentIView>();
+            CreateMap<AddDepartmentDto,Sys_Department>();
+            CreateMap<EditDepartmentDto,Sys_Department>();
             #endregion
 
             #region 用户板块
             CreateMap<UserDto, Sys_Users>();
-            CreateMap<Sys_Users, UserInfoView>();
-            CreateMap<Sys_Users,UserInfoListView>();
+            CreateMap<Sys_Users, UserInfo>();
+
+
             #endregion
 
         }

+ 20 - 0
OASystem/OASystem.Domain/Dtos/DtoBase.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos
+{
+    /// <summary>
+    /// 请求实体类 基类
+    /// </summary>
+    public class DtoBase
+    {
+        /// <summary>
+        /// 请求端口分类
+        /// 1 Web 2 Android 3 IOS
+        /// </summary>
+        public int PortType { get; set; }
+    }
+}

+ 133 - 0
OASystem/OASystem.Domain/Dtos/System/CompanyDto.cs

@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.System
+{
+    /// <summary>
+    /// 企业添加Dto
+    /// </summary>
+    public class AddCompanyDto
+    {
+        /// <summary>
+        /// 公司Code
+        /// </summary>
+        public string CompanyCode { get; set; }
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string CompanyName { get; set; }
+
+        /// <summary>
+        /// 公司所在地
+        /// </summary>
+        public string Address { get; set; }
+        /// <summary>
+        /// 负责人Id
+        /// </summary>
+        public int ContactUserId { get; set; }
+        /// <summary>
+        /// 联系方式
+        /// </summary>
+        private string tel;
+        public string Tel
+        {
+            get
+            {
+                return tel;
+            }
+            set
+            {
+                if (Regex.IsMatch(value, @"^[1]+[2,3,4,5,6,7,8,9]+\d{9}"))
+                {
+                    tel = value;
+                }
+                else
+                {
+                    tel = "";
+                }
+               
+            }
+        }
+        /// <summary>
+        /// 父级公司Id
+        /// </summary>
+        public int ParentCompanyId { get; set; }
+
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+
+        public int CreateUserId { get; set; }
+    }
+
+    /// <summary>
+    /// 修改企业dto
+    /// </summary>
+    public class EditCompanyDto
+    {
+        /// <summary>
+        /// 公司Id
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 公司Code
+        /// </summary>
+        public string CompanyCode { get; set; }
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string CompanyName { get; set; }
+
+        /// <summary>
+        /// 公司所在地
+        /// </summary>
+        public string Address { get; set; }
+        /// <summary>
+        /// 负责人Id
+        /// </summary>
+        public int ContactUserId { get; set; }
+        /// <summary>
+        /// 联系方式
+        /// </summary>
+        private string tel;
+        public string Tel
+        {
+            get
+            {
+                return tel;
+            }
+            set
+            {
+                if (Regex.IsMatch(value, @"^[1]+[2,3,4,5,6,7,8,9]+\d{9}"))
+                {
+                    tel = value;
+                }
+                else
+                {
+                    tel = "";
+                }
+
+            }
+        }
+        /// <summary>
+        /// 父级公司Id
+        /// </summary>
+        public int ParentCompanyId { get; set; }
+
+    }
+
+    /// <summary>
+    /// 删除企业dto
+    /// </summary>
+    public class DelCompanyDto
+    {
+        /// <summary>
+        /// 公司Id
+        /// </summary>
+        public int Id { get; set; }
+    }
+}

+ 76 - 2
OASystem/OASystem.Domain/Dtos/System/DepartmentDto.cs

@@ -1,4 +1,5 @@
-using System;
+using OASystem.Domain.Entities;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -7,11 +8,84 @@ using System.Threading.Tasks;
 
 namespace OASystem.Domain.Dtos.System
 {
-    public class DepartmentDto
+    /// <summary>
+    /// 查询dto
+    /// </summary>
+    public class DepartmentDto:DtoBase
     {
         /// <summary>
         /// 公司Id
         /// </summary>
         public int CompanyId { get; set; }
     }
+    /// <summary>
+    /// 添加dto
+    /// </summary>
+    public class AddDepartmentDto
+    {
+        /// <summary>
+        /// 公司Id
+        /// </summary>
+        public int CompanyId { get; set; }
+        /// <summary>
+        /// 部门code
+        /// </summary>
+        public string DepCode { get; set; }
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string DepName { get; set; }
+        /// <summary>
+        /// 父级部门Id
+        /// </summary>
+        public int ParentDepId { get; set; }
+
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+        public int CreateUserId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string Remark { get; set; }
+       
+    }
+
+    /// <summary>
+    /// 修改dto
+    /// </summary>
+    public class EditDepartmentDto
+    {
+        /// <summary>
+        /// 部门Id
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 公司Id
+        /// </summary>
+        public int CompanyId { get; set; }
+        /// <summary>
+        /// 部门code
+        /// </summary>
+        public string DepCode { get; set; }
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string DepName { get; set; }
+        /// <summary>
+        /// 父级部门Id
+        /// </summary>
+        public int ParentDepId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+
+    }
+
+    public class DelDepartmentDto
+    {
+        public int Id { get; set; }
+    }
 }

+ 1 - 1
OASystem/OASystem.Domain/Dtos/System/UserDto.cs

@@ -9,7 +9,7 @@ namespace OASystem.Domain.Dtos.System
     /// <summary>
     /// 员工表查询dto
     /// </summary>
-    public class UserDto
+    public class UserDto : DtoBase
     {
         /// <summary>
         /// 公司Id

+ 1 - 1
OASystem/OASystem.Domain/Entities/EntityBase.cs

@@ -8,7 +8,7 @@
         /// <summary>
         /// 编号
         /// </summary>
-        [SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true, /*IsIdentity = true,*/ IsNullable = false)]
+        [SugarColumn(ColumnDescription = "主键", IsPrimaryKey = true, IsIdentity = true, IsNullable = false)]
         public int Id { get; set; }
         /// <summary>
         /// 创建者Id

+ 146 - 0
OASystem/OASystem.Domain/Entities/Resource/Res_CarData.cs

@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Resource
+{
+    /// <summary>
+    /// 车公司数据源
+    /// </summary>
+    [SugarTable("Res_CarData")]
+    public class Res_CarData : EntityBase
+    {
+        /// <summary>
+        /// 区域
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string UnitArea { get; set; }
+
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string UnitName { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]        
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        [SugarColumn(IsNullable = true,ColumnDataType = "varchar(50)")]
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人手机号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")] 
+        public string ContactTel { get; set; }
+
+        /// <summary>
+        /// 联系人邮箱
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string ContactEmail { get; set; }
+
+        /// <summary>
+        /// 联系人传真
+        /// </summary>
+        [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(500)")]
+        public string OtherInfo { get; set; }
+
+        /// <summary>
+        /// 服务评分
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Score { get; set; }
+
+        /// <summary>
+        /// 相关的车辆资质
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string QualificationScore { get; set; }
+
+        /// <summary>
+        /// 车辆2-4年新,VIP及以上需要2年新
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string CarAgeScore { get; set; }
+
+        /// <summary>
+        /// 车身干净,无文字图片等
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string CleanImgScore { get; set; }
+
+        /// <summary>
+        /// 车内整洁、无异味
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        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 TimeScore { get; set; }
+
+        /// <summary>
+        /// 安全意识高
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string SafetyScore { get; set; }
+
+        /// <summary>
+        /// 司机驾龄时间长,提前熟悉路线
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string DrivingAgeScore { get; set; }
+    }
+}

+ 118 - 0
OASystem/OASystem.Domain/Entities/Resource/Res_LocalGuideData.cs

@@ -0,0 +1,118 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Resource
+{
+    /// <summary>
+    /// 导游地接数据
+    /// </summary>
+    [SugarTable("Res_LocalGuideData")]
+    public class Res_LocalGuideData : EntityBase
+    {
+        /// <summary>
+        /// 区域
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string UnitArea { get; set; }
+
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string UnitName { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人手机号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        public string ContactTel { get; set; }
+
+        /// <summary>
+        /// 联系人邮箱
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string ContactEmail { get; set; }
+
+        /// <summary>
+        /// 联系人传真
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        public string ContactFax { get; set; }
+
+        /// <summary>
+        /// 其他信息
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
+        public string OtherInfo { get; set; }
+
+        /// <summary>
+        /// 服务评分
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Score { get; set; }
+
+        /// <summary>
+        /// 着装得体
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string SuitScore { get; set; }
+
+        /// <summary>
+        /// 服务意识强度
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string ServeScore { get; set; }
+
+        /// <summary>
+        /// 讲解水平专业
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string TalkProScore { get; set; }
+
+        /// <summary>
+        /// 时间概念强度
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string TimeScore { get; set; }
+
+        /// <summary>
+        /// 配合能力强,服从安排
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string FitScore { get; set; }
+
+        /// <summary>
+        /// 应变能力强
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string StrainScore { get; set; }
+
+        /// <summary>
+        /// 当地语言和中文表达流畅
+        /// A B C  选择
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(10)")]
+        public string LocalAndChineseScore { get; set; }
+    }
+}

+ 1 - 0
OASystem/OASystem.Domain/Entities/System/Sys_Company.cs

@@ -39,4 +39,5 @@
         public int ParentCompanyId { get; set; }
     }
 
+    
 }

+ 2 - 0
OASystem/OASystem.Domain/Entities/System/Sys_Department.cs

@@ -27,5 +27,7 @@ namespace OASystem.Domain.Entities.System
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int ParentDepId { get; set; }
+
+
     }
 }

+ 24 - 0
OASystem/OASystem.Domain/Entities/System/Sys_Users.cs

@@ -156,4 +156,28 @@ namespace OASystem.Domain.Entities.System
 
 
     }
+
+    #region 附加字段
+    /// <summary>
+    /// 用户表
+    /// 数据库查询接受实体类
+    /// </summary>
+    public class UserInfo : Sys_Users
+    {
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string? CompanyName { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string? DepName { get; set; }
+
+        /// <summary>
+        /// 岗位名称
+        /// </summary>
+        public string? JobName { get; set; }
+    }
+    #endregion
 }

+ 1 - 1
OASystem/OASystem.Domain/ViewModels/CompanyView.cs

@@ -3,7 +3,7 @@
 namespace OASystem.Domain.ViewModels
 {
     /// <summary>
-    /// 公司视图表(返回数据model)
+    /// 公司视图表(返回数据model)安卓端
     /// </summary>
     public class CompanyView
     {

+ 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; }
 }

+ 97 - 66
OASystem/OASystem.Domain/ViewModels/System/UserInfoView.cs

@@ -7,40 +7,37 @@ using System.Threading.Tasks;
 
 namespace OASystem.Domain.ViewModels.System
 {
+
     /// <summary>
-    /// 用户
-    /// 数据库查询接受实体类
+    /// 用户数据 数据库返回数据实体接受类
+    /// 查询返回View
     /// </summary>
-    public class UserInfoView :Sys_Users
+    public class UserInfoWebView
     {
         /// <summary>
-        /// 公司名称
+        /// 公司Id
         /// </summary>
-        public string? CompanyName { get; set; }
+        public int CompanyId { get; set; }
 
         /// <summary>
-        /// 部门名称
+        /// 公司名称
         /// </summary>
-        public string? DepName { get; set; }
+        public string CompanyName { get; set; }
 
         /// <summary>
-        /// 岗位名称
+        /// 部门Id
         /// </summary>
-        public string? JobName { get; set; }
-    }
 
-    public class UserInfoListView
-    {
-        /// <summary>
-        /// 公司名称
-        /// </summary>
-        public string CompanyName { get; set; }
+        public int DepId { get; set; }
 
         /// <summary>
         /// 部门名称
         /// </summary>
         public string DepName { get; set; }
-
+        /// <summary>
+        /// 岗位Id
+        /// </summary>
+        public int JobPostId { get; set; }
         /// <summary>
         /// 岗位名称
         /// </summary>
@@ -48,90 +45,124 @@ namespace OASystem.Domain.ViewModels.System
         /// <summary>
         /// 用户Id
         /// </summary>
-        public int Id { get; set; }
+        public int UserId { get; set; }
         /// <summary>
         /// 中文姓名
         /// </summary>
-        
+
         public string CnName { get; set; }
-        /// <summary>
-        /// 英文姓名
-        /// </summary>
-        
-        public string EnName { get; set; }
+
         /// <summary>
         /// 工号
         /// </summary>
-        
+
         public string Number { get; set; }
+
         /// <summary>
-        /// 公司Id
+        /// 分机号
         /// </summary>
-       
-        public int CompanyId { get; set; }
+        public string Ext { get; set; }
+
         /// <summary>
-        /// 部门Id
+        /// 手机号
         /// </summary>
-        
-        public int DepId { get; set; }
+
+        public string Phone { get; set; }
         /// <summary>
-        /// 岗位Id
+        /// 紧急联系人 手机号
         /// </summary>
-        
-        public int JobPostId { get; set; }
-        
+
+        public string UrgentPhone { get; set; }
         /// <summary>
-        /// 性别0 男1 女  2 未设置
+        /// 邮箱
         /// </summary>
-        
-        public int Sex { get; set; }
+
+        public string Email { get; set; }
+    }
+
+
+    /// <summary>
+    /// 用户信息 - 个人基本信息 登陆时返回信息
+    /// </summary>
+    public class UserLoginInfoView
+    {
         /// <summary>
-        /// 分机号
+        /// 用户Id
         /// </summary>
-        
-        public string Ext { get; set; }
+        public int UserId { get; set; }
+
         /// <summary>
-        /// 手机号
+        /// 中文姓名
         /// </summary>
-        
-        public string Phone { get; set; }
+        public string CnName { get; set; }
+
         /// <summary>
-        /// 紧急联系人 手机号
+        /// 公司名称
         /// </summary>
-        
-        public string UrgentPhone { get; set; }
+        public string CompanyName { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string DepName { get; set; }
+
+        /// <summary>
+        /// 岗位名称
+        /// </summary>
+        public string JobName { get; set; }
+
         /// <summary>
         /// 邮箱
         /// </summary>
-        
         public string Email { get; set; }
+    }
+
+
+    /// <summary>
+    /// 用户信息 - 个人基本信息
+    /// </summary>
+    public class UserBasicInfoView 
+    {
+        /// <summary>
+        /// 用户Id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 中文姓名
+        /// </summary>
+        public string CnName { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// 0 男1 女  2 未设置
+        /// </summary>
+
+        public int Sex { get; set; }
+
         /// <summary>
-        /// 住址
+        /// 工号
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
-        public string Address { get; set; }
+        public string Number { get; set; }
+
         /// <summary>
-        /// 入职时间
+        /// 公司名称
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
-        public DateTime Edate { get; set; }
+        public string CompanyName { get; set; }
+
         /// <summary>
-        /// 离职时间
+        /// 部门名称
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "DateTime")]
-        public DateTime Rdate { get; set; }
-        
-       
+        public string DepName { get; set; }
+
         /// <summary>
-        /// 身份证号码
+        /// 岗位名称
         /// </summary>
-        public string IDCard { get; set; }
-        
-        
+        public string JobName { get; set; }
+
         /// <summary>
-        /// 家庭地址
+        /// 邮箱
         /// </summary>
-        public string HomeAddress { get; set; }
-        
+        public string Email { get; set; }
     }
 }

+ 2 - 1
OASystem/OASystem.Infrastructure/GlobalUsings.cs

@@ -9,4 +9,5 @@ global using Microsoft.Extensions.Configuration;
 global using System.Text.Json;
 global using Microsoft.AspNetCore.Http;
 global using System.Text.RegularExpressions;
-
+global using OASystem.Domain.Entities.System;
+global using OASystem.Domain.ViewModels.System;

+ 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<UserLoginInfoView>(userSqlWhere).FirstAsync();
+
+
+
             result.Code = 0;
             result.Msg = "登录成功!";
-            result.Data = _entity;
+            result.Data = _userBasicInfo;
             return result;
 
         }

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/System/DepartmentRepository.cs

@@ -4,7 +4,7 @@ using OASystem.Domain.ViewModels.System;
 
 namespace OASystem.Infrastructure.Repositories.System
 {
-    public class DepartmentRepository : BaseRepository<Sys_Department, DepartmentView>
+    public class DepartmentRepository : BaseRepository<Sys_Department, DepartmentIView>
     {
         public DepartmentRepository(SqlSugarClient sqlSugar) : base(sqlSugar)
         {

+ 75 - 40
OASystem/OASystem.Infrastructure/Repositories/System/UsersRepository.cs

@@ -1,6 +1,8 @@
-using OASystem.Domain;
-
+using AutoMapper;
+using OASystem.Domain;
+using OASystem.Domain.Entities.System;
 using OASystem.Domain.ViewModels.System;
+using StackExchange.Redis;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -9,10 +11,12 @@ using System.Threading.Tasks;
 
 namespace OASystem.Infrastructure.Repositories.System
 {
-    public class UsersRepository : BaseRepository<UserInfoView, JsonView>
+    public class UsersRepository : BaseRepository<UserInfo, JsonView>
     {
-        public UsersRepository(SqlSugarClient sqlSugar) : base(sqlSugar)
+        private readonly IMapper _mapper;
+        public UsersRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
         {
+            _mapper = mapper;
         }
 
         /// <summary>
@@ -20,49 +24,80 @@ namespace OASystem.Infrastructure.Repositories.System
         /// </summary>
         /// <param name="_userRep"></param>
         /// <returns></returns>
-        public async Task<Result> GetUserList(UsersRepository _userRep)
+        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 ");
-            List<UserInfoView> _userList = await _userRep.GetListBySqlWithNolockAsync(userSqlWhere);
-            if (_userList.Count < 1)
-            {
-                result.Code = -2;
-                result.Msg = "暂无员工信息!";
+            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();
 
-                return result;
-            }
 
-            List<dynamic> reultUserList = new List<dynamic>();
-            foreach (UserInfoView user in _userList)
+            if (portType == 1) //web
             {
-                var data = new
+
+                string userSqlWhere = string.Format(@"Select su.CompanyId, sc.CompanyName,su.DepId,sd.DepName,su.JobPostId,sjp.JobName,
+                                                        su.Id UserId,su.CnName,su.CnName,su.Number,su.Ext,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
                 {
-                    Number = user.Number,
-                    UserId = user.Id,
-                    CnName = user.CnName,
-                    CompanyId = user.CompanyId,
-                    CompanyName = user.CompanyName,
-                    DepId = user.DepId,
-                    DepName = user.DepName,
-                    //JobPostId = user.JobPostId,
-                    //JobName = user.JobName,
-                    Ext = user.Ext,
-                    Phone = user.Phone,
-                    UrgentPhone = user.UrgentPhone,
-                    Email = user.Email
-                };
-                reultUserList.Add(data);
+                    result.Msg = "暂无数据!";
+                }
             }
-
-            result.Code = 0;
-            result.Msg = "成功!";
-            result.Data = reultUserList;
+            else if (portType == 2) //Android
+            {
+                //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.Msg = "暂无数据!";
+            } 
+            
             return result;
-
         }
     }
 }

+ 0 - 74
OASystem/OASystem.Infrastructure/Tools/RedisHelper.cs

@@ -1,74 +0,0 @@
-
-using Newtonsoft.Json;
-using StackExchange.Redis;
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-
-namespace OASystem.Infrastructure.Tools
-{
-
-    public class RedisHelper : IDisposable
-    {
-        //连接字符串
-        private string _connectionString;
-        //实例名称
-        private string _instanceName;
-        //默认数据库
-        private int _defaultDB;
-
-        private ConcurrentDictionary<string, ConnectionMultiplexer> _connections;
-        public RedisHelper(string connectionString, string instanceName, int defaultDB = 0)
-        {
-            _connectionString = connectionString;
-            _instanceName = instanceName;
-            _defaultDB = defaultDB;
-            _connections = new ConcurrentDictionary<string, ConnectionMultiplexer>();
-        }
-
-        /// <summary>
-        /// 获取ConnectionMultiplexer
-        /// </summary>
-        /// <returns></returns>
-        private ConnectionMultiplexer GetConnect()
-        {
-            return _connections.GetOrAdd(_instanceName, p => ConnectionMultiplexer.Connect(_connectionString));
-        }
-
-        /// <summary>
-        /// 获取数据库
-        /// </summary>
-        /// <param name="configName"></param>
-        /// <param name="db">默认为0:优先代码的db配置,其次config中的配置</param>
-        /// <returns></returns>
-        public IDatabase GetDatabase(RedisEnum redisEnum)
-        {
-            return GetConnect().GetDatabase((int)redisEnum);
-        }
-
-        public IServer GetServer(string configName = null, int endPointsIndex = 0)
-        {
-            var confOption = ConfigurationOptions.Parse(_connectionString);
-            return GetConnect().GetServer(confOption.EndPoints[endPointsIndex]);
-        }
-
-        public ISubscriber GetSubscriber(string configName = null)
-        {
-            return GetConnect().GetSubscriber();
-        }
-        public void Dispose()
-        {
-            if (_connections != null && _connections.Count > 0)
-            {
-                foreach (var item in _connections.Values)
-                {
-                    item.Close();
-                }
-            }
-        }
-    }
-}

+ 2 - 2
OASystem/OASystem.RedisRepository/Config/RedisConnection.cs

@@ -27,8 +27,8 @@ namespace OASystem.RedisRepository.Config
                             Password = RedisClientConfig.RedisAuth,
                             EndPoints =
                             {
-                                {RedisClientConfig.Server, RedisClientConfig.Port},
-                                {RedisClientConfig.SlaveServer, RedisClientConfig.SlavePort}
+                                {RedisClientConfig.Server, RedisClientConfig.Port}
+                                //,{RedisClientConfig.SlaveServer, RedisClientConfig.SlavePort}
                             }
                         };
                         _connection = ConnectionMultiplexer.Connect(configurationOptions);

+ 97 - 100
OASystem/OASystem.RedisRepository/RedisAsyncHelper/IRedisHelper.cs

@@ -304,101 +304,101 @@ namespace OASystem.RedisRepository.RedisAsyncHelper
         /// <returns></returns>
         Task<bool> SetAddAsync<T>(string key, T value);
 
-        /// <summary>
-        /// 指定集合计算操作operation枚举,指定计算结果将存的目标destKey,指定需要参与计算的多个key
-        /// </summary>
-        /// <param name="operation"></param>
-        /// <param name="destKey"></param>
-        /// <param name="combineKeys"></param>
-        /// <returns></returns>
-        Task<long> SetCombineAndStoreAsync(SetOperation operation, string destKey, List<string> combineKeys);
-
-        /// <summary>
-        /// 指定集合计算操作operation枚举,指定需要参与计算的多个key
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="operation"></param>
-        /// <param name="combineKeys"></param>
-        /// <returns></returns>
-        Task<List<T>> SetCombineAsync<T>(SetOperation operation, List<string> combineKeys);
-
-        /// <summary>
-        /// 指定值是否存在于指定集合中
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <param name="value"></param>
-        /// <returns></returns>
-        Task<bool> SetContainsAsync<T>(string key, T value);
-
-        /// <summary>
-        /// 获取指定集合中元素个数
-        /// </summary>
-        /// <param name="key"></param>
-        /// <returns></returns>
-        Task<long> SetLengthAsync(string key);
-
-        /// <summary>
-        /// 获取指定集合中的所有元素
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <param name="value"></param>
-        /// <returns></returns>
-        Task<List<T>> SetMembersAsync<T>(string key, T value);
-
-        /// <summary>
-        /// 从sourceKey移除指定value到目标distKey集合当中
-        /// 如果sourceKey存在指定value则返回true,否则不做任何操作返回false
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="sourcekey"></param>
-        /// <param name="distKey"></param>
-        /// <param name="value"></param>
-        /// <returns></returns>
-        Task<bool> SetMoveAsync<T>(string sourcekey, string distKey, T value);
-
-        /// <summary>
-        /// 从指定集合当中随机取出一个元素
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <returns></returns>
-        Task<T> SetRandomMemberAsync<T>(string key);
-
-        /// <summary>
-        /// 从指定集合随机弹出(删除并获取)一个元素
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <returns></returns>
-        Task<T> SetPopAsync<T>(string key);
-
-        /// <summary>
-        /// 从集合中随机弹出(删除并获取)多个元素
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <returns></returns>
-        Task<List<T>> SetRandomMembersAsync<T>(string key);
-
-        /// <summary>
-        /// 从集合中移除指定元素
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <param name="value"></param>
-        /// <returns></returns>
-        Task<bool> SetRemoveAsync<T>(string key, T value);
-
-        /// <summary>
-        /// 从集合中批量移除元素
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="key"></param>
-        /// <param name="values"></param>
-        /// <returns></returns>
-        Task<long> SetMultiRemoveAsync<T>(string key, List<T> values);
+        ///// <summary>
+        ///// 指定集合计算操作operation枚举,指定计算结果将存的目标destKey,指定需要参与计算的多个key
+        ///// </summary>
+        ///// <param name="operation"></param>
+        ///// <param name="destKey"></param>
+        ///// <param name="combineKeys"></param>
+        ///// <returns></returns>
+        //Task<long> SetCombineAndStoreAsync(SetOperation operation, string destKey, List<string> combineKeys);
+
+        ///// <summary>
+        ///// 指定集合计算操作operation枚举,指定需要参与计算的多个key
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="operation"></param>
+        ///// <param name="combineKeys"></param>
+        ///// <returns></returns>
+        //Task<List<T>> SetCombineAsync<T>(SetOperation operation, List<string> combineKeys);
+
+        ///// <summary>
+        ///// 指定值是否存在于指定集合中
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <param name="value"></param>
+        ///// <returns></returns>
+        //Task<bool> SetContainsAsync<T>(string key, T value);
+
+        ///// <summary>
+        ///// 获取指定集合中元素个数
+        ///// </summary>
+        ///// <param name="key"></param>
+        ///// <returns></returns>
+        //Task<long> SetLengthAsync(string key);
+
+        ///// <summary>
+        ///// 获取指定集合中的所有元素
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <param name="value"></param>
+        ///// <returns></returns>
+        //Task<List<T>> SetMembersAsync<T>(string key, T value);
+
+        ///// <summary>
+        ///// 从sourceKey移除指定value到目标distKey集合当中
+        ///// 如果sourceKey存在指定value则返回true,否则不做任何操作返回false
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="sourcekey"></param>
+        ///// <param name="distKey"></param>
+        ///// <param name="value"></param>
+        ///// <returns></returns>
+        //Task<bool> SetMoveAsync<T>(string sourcekey, string distKey, T value);
+
+        ///// <summary>
+        ///// 从指定集合当中随机取出一个元素
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <returns></returns>
+        //Task<T> SetRandomMemberAsync<T>(string key);
+
+        ///// <summary>
+        ///// 从指定集合随机弹出(删除并获取)一个元素
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <returns></returns>
+        //Task<T> SetPopAsync<T>(string key);
+
+        ///// <summary>
+        ///// 从集合中随机弹出(删除并获取)多个元素
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <returns></returns>
+        //Task<List<T>> SetRandomMembersAsync<T>(string key);
+
+        ///// <summary>
+        ///// 从集合中移除指定元素
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <param name="value"></param>
+        ///// <returns></returns>
+        //Task<bool> SetRemoveAsync<T>(string key, T value);
+
+        ///// <summary>
+        ///// 从集合中批量移除元素
+        ///// </summary>
+        ///// <typeparam name="T"></typeparam>
+        ///// <param name="key"></param>
+        ///// <param name="values"></param>
+        ///// <returns></returns>
+        //Task<long> SetMultiRemoveAsync<T>(string key, List<T> values);
 
         #endregion
 
@@ -423,7 +423,7 @@ namespace OASystem.RedisRepository.RedisAsyncHelper
         /// <param name="key"></param>
         /// <param name="expireAt"></param>
         /// <returns></returns>
-        Task<bool> KeyExpireAtAsync(string key, DateTime expireAt);
+        //Task<bool> KeyExpireAtAsync(string key, DateTime expireAt);
 
         /// <summary>
         /// 设置key在将来的timeout后过期(TimeSpan)
@@ -457,12 +457,9 @@ namespace OASystem.RedisRepository.RedisAsyncHelper
         /// </summary>
         /// <param name="ranOperations"></param>
         /// <returns></returns>
-        Task<bool> DoInTranscationAsync(Action<ITransaction> ranOperations);
+        //Task<bool> DoInTranscationAsync(Action<ITransaction> ranOperations);
 
         #endregion
 
-
-
-        Task<RedisResult> Test();
     }
 }

+ 93 - 0
OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisHashHelperAsync.cs

@@ -0,0 +1,93 @@
+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
+{
+    /// <summary>
+    ///  Redis异步操作类  Hash部分类
+    /// </summary>
+    internal partial class RedisHelper //: IRedisHelper
+    {
+        #region Hash 写操作
+
+        public async Task<bool> HashSetAsync<T>(string key, string field, T value)
+        {
+            return await _client.HashSetAsync(key, field, SerializeHelper.Serialize(value));
+        }
+
+        public async Task HashMultiSetAsync<T>(string key, Dictionary<string, T> hashFields)
+        {
+            List<HashEntry> entries = new List<HashEntry>();
+            hashFields.ToList().ForEach(d => entries.Add(new HashEntry(d.Key, SerializeHelper.Serialize(d.Value))));
+            await _client.HashSetAsync(key, entries.ToArray());
+        }
+
+        public async Task<long> HashIncrementAsync(string key, string field, long incrCount = 1)
+        {
+            return await _client.HashIncrementAsync(key, field, incrCount);
+        }
+
+        public async Task<long> HashDecrementAsync(string key, string field, long decrCount = 1)
+        {
+            return await _client.HashDecrementAsync(key, field, decrCount);
+        }
+
+        public async Task<bool> HashDeleteFieldAsync(string key, string field)
+        {
+            return await _client.HashDeleteAsync(key, field);
+        }
+
+        public async Task<long> HashMultiDeleteFieldAsync(string key, List<string> fields)
+        {
+            List<RedisValue> values = new List<RedisValue>();
+            fields.ForEach(f => values.Add(f));
+            return await _client.HashDeleteAsync(key, values.ToArray());
+        }
+
+        #endregion
+
+        #region Hash 读操作
+
+        /// <summary>
+        /// Redis 指定hash类型key中field是否存在
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        public async Task<bool> HashFieldExistAsync(string key, string field)
+        {
+            return await _client.HashExistsAsync(key, field, CommandFlags.PreferSlave);
+        }
+        public async Task<List<string>> HashFieldsAsync(string key)
+        {
+            RedisValue[] values = await _client.HashKeysAsync(key, CommandFlags.PreferSlave);
+            return RedisInnerTypeHelper.RedisValuesToGenericList<string>(values);
+        }
+        public async Task<List<T>> HashValuesAsync<T>(string key)
+        {
+            var values = await _client.HashValuesAsync(key, CommandFlags.PreferSlave);
+            return RedisInnerTypeHelper.RedisValuesToGenericList<T>(values);
+        }
+
+        public async Task<T> HashGetAsync<T>(string key, string field)
+        {
+            return SerializeHelper.Deserialize<T>(await _client.HashGetAsync(key, field, CommandFlags.PreferSlave));
+        }
+
+        public async Task<Dictionary<string, T>> HashGetAllAsync<T>(string key)
+        {
+            HashEntry[] entries = await _client.HashGetAllAsync(key, CommandFlags.PreferSlave);
+            Dictionary<string, T> dic = new Dictionary<string, T>();
+            entries.ToList().ForEach(e => dic.Add(e.Name, SerializeHelper.Deserialize<T>(e.Value)));
+            return dic;
+        }
+
+        #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);
+        }
+    }
+}

+ 99 - 0
OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisListHelperAsync.cs

@@ -0,0 +1,99 @@
+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
+{
+    /// <summary>
+    /// Redis异步操作类  List部分类
+    /// </summary>
+    internal partial class RedisHelper //: IRedisHelper
+    {
+        //    _client.ListRightPopLeftPushAsync();
+        //    _client.ListTrimAsync();
+
+        #region List 写操作
+
+        public async Task<long> ListInsertAfterAsync<T>(string key, string pivot, T value)
+        {
+            return await _client.ListInsertAfterAsync(key, pivot, SerializeHelper.Serialize(value));
+        }
+
+        public async Task<long> ListInsertBeforeAsync<T>(string key, string pivot, T value)
+        {
+            return await _client.ListInsertBeforeAsync(key, pivot, SerializeHelper.Serialize(value));
+        }
+
+        public async Task<T> ListLeftPopAsync<T>(string key)
+        {
+            return SerializeHelper.Deserialize<T>(await _client.ListLeftPopAsync(key));
+        }
+
+        public async Task<long> ListLeftPushAsync<T>(string key, T value)
+        {
+            return await _client.ListLeftPushAsync(key, SerializeHelper.Serialize(value));
+        }
+
+        public async Task<long> ListLeftMultiPushAsync<T>(string key, List<T> values)
+        {
+            return await _client.ListLeftPushAsync(key, SerializeHelper.Serialize(RedisInnerTypeHelper.GenericListToRedisValues(values)));
+        }
+
+        public async Task<long> ListRemoveAsync<T>(string key, T value, long count = 0L)
+        {
+            return await _client.ListRemoveAsync(key, SerializeHelper.Serialize(value), count);
+        }
+
+        public async Task<T> ListRightPopAsync<T>(string key)
+        {
+            return SerializeHelper.Deserialize<T>(await _client.ListRightPopAsync(key));
+        }
+
+        public async Task<long> ListRightPushAsync<T>(string key, T value)
+        {
+            return await _client.ListRightPushAsync(key, SerializeHelper.Serialize(value));
+        }
+
+        public async Task<long> ListRightMultiPushAsync<T>(string key, List<T> values)
+        {
+            return
+                await
+                    _client.ListRightPushAsync(key,
+                        SerializeHelper.Serialize(RedisInnerTypeHelper.GenericListToRedisValues(values)));
+        }
+
+        public async Task ListSetByIndexAsync<T>(string key, int index, T value)
+        {
+            await _client.ListSetByIndexAsync(key, index, SerializeHelper.Serialize(value));
+        }
+
+        public async Task ListTrimAsync(string key, long start, long stop)
+        {
+            await _client.ListTrimAsync(key, start, stop);
+        }
+        #endregion
+
+        #region List 读操作
+
+        public async Task<T> ListGetByIndexAsync<T>(string key, long index)
+        {
+            return SerializeHelper.Deserialize<T>(await _client.ListGetByIndexAsync(key, index, CommandFlags.PreferSlave));
+        }
+
+        public async Task<long> ListLengthAsync<T>(string key)
+        {
+            return await _client.ListLengthAsync(key, CommandFlags.PreferSlave);
+        }
+
+        public async Task<List<T>> ListRangeAsync<T>(string key, long start = 0L, long stop = -1L)
+        {
+            return RedisInnerTypeHelper.RedisValuesToGenericList<T>(await _client.ListRangeAsync(key, start, stop, CommandFlags.PreferSlave));
+        }
+
+        #endregion
+    }
+}

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

+ 1 - 1
OASystem/OASystem.RedisRepository/RedisAsyncHelper/RedisStringHelperAsync.cs

@@ -11,7 +11,7 @@ namespace OASystem.RedisRepository.RedisAsyncHelper
 {/// <summary>
  /// Redis异步操作类  String部分类
  /// </summary>
-    internal partial class RedisHelper// : IRedisHelper
+    internal partial class RedisHelper : IRedisHelper
     {
 
         private static IDatabase _client;

+ 21 - 0
OASystem/OASystem.RedisRepository/RedisFactory.cs

@@ -0,0 +1,21 @@
+using OASystem.RedisRepository.RedisAsyncHelper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.RedisRepository
+{
+    public class RedisFactory
+    {
+        /// <summary>
+        /// 外部访问redis入口,暂时只暴露异步方法
+        /// </summary>
+        /// <returns></returns>
+        public static IRedisHelper CreateRedisRepository()
+        {
+            return new RedisHelper();
+        }
+    }
+}