| | |
| | | using DocumentServiceAPI.Application.UserAndLogin.Services.Interfaces; |
| | | using DocumentServiceAPI.Application.Repository; |
| | | using DocumentServiceAPI.Application.UserAndLogin.Services.Interfaces; |
| | | using DocumentServiceAPI.Application.UserAndLogin.ViewMode; |
| | | using DocumentServiceAPI.Model; |
| | | using DocumentServiceAPI.Model.cyDocumentModel; |
| | | using DocumentServiceAPI.Model.Permissions; |
| | | using DocumentServiceAPI.Model.UserInfoModel; |
| | | using DocumentServiceAPI.Services.IService; |
| | | using DocumentServiceAPI.Utility; |
| | | using Furion.Logging.Extensions; |
| | | using MapsterMapper; |
| | | using SqlSugar.Extensions; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | |
| | | namespace DocumentServiceAPI.Application.UserAndLogin.Services |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 登录验证服务 |
| | | /// </summary> |
| | | public class UserService : ILoginVerifyService, IScoped |
| | | public class UserService : IUserService, IScoped |
| | | { |
| | | /// <summary> |
| | | /// TenantPermissions在Redis中的键值 |
| | | /// </summary> |
| | | public const string TenantPermissions_RedisKey = "TenantPermissionsKen:"; |
| | | private ISqlSugarClient _db { get; set; } |
| | | public UserService(ISqlSugarClient db) |
| | | private EmployeeRepository _employeeRepository{ get; set; } |
| | | private IMapper _mapper { get; set; } |
| | | private IRedisCacheService _cacheService { get; set; } |
| | | |
| | | public UserService(ISqlSugarClient db, EmployeeRepository employeeRepository, IMapper mapper , IRedisCacheService cacheService) |
| | | { |
| | | _db = db; |
| | | _employeeRepository = employeeRepository; |
| | | _mapper = mapper; |
| | | _cacheService = cacheService; |
| | | } |
| | | /// <summary> |
| | | /// 员工详情 |
| | |
| | | jwtInfo.LogInSource = (LogInFrom)(App.User?.FindFirstValue("loginfrom")?.ObjToInt() ?? 0); |
| | | jwtInfo.EID = App.User?.FindFirstValue("eid")?.ObjToInt(); |
| | | jwtInfo.UID = App.User?.FindFirstValue("uid")?.ObjToInt(); |
| | | jwtInfo.TID = App.User?.FindFirstValue("tid")?.ObjToInt(); |
| | | jwtInfo.TEID = App.User?.FindFirstValue("teid")?.ObjToInt(); |
| | | var guid = App.User?.FindFirstValue("jid"); |
| | | jwtInfo.JID = string.IsNullOrEmpty(guid) ? new Guid(guid) : null; |
| | | jwtInfo.JID = string.IsNullOrEmpty(guid) ? null: new Guid(guid); |
| | | return jwtInfo; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取单位列表 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public async Task<List<UnitVM>> GetUserUnitInfo(int tid ) |
| | | public async Task<List<UnitVM>> GetUserUnitList(int tid ) |
| | | { |
| | | |
| | | var list = await _db.Queryable<DocumentServiceAPI.Model.cyDocumentModel.Document_TenderUnit>() |
| | |
| | | UnitName = tu.UnitName, |
| | | Remark = tu.Remark, |
| | | UnitLogo = tu.UnitLogo, |
| | | }) |
| | | }).WithCache(10) |
| | | .ToListAsync(); |
| | | return list; |
| | | } |
| | |
| | | TenderId = ti.Id |
| | | |
| | | } |
| | | ).ToListAsync(); |
| | | ).WithCache( 10).ToListAsync(); |
| | | //不再选择租户 |
| | | //var ten = await _db.Queryable<TenantInfo>().Where(x => x.IsEn == true && x.IsDel != true && x.ItCode == ItCode) |
| | | // .Select(x => new TenderVM |
| | | // { |
| | | |
| | | var ten = await _db.Queryable<TenantInfo>().Where(x => x.IsEn == true && x.IsDel != true && x.ItCode == ItCode) |
| | | .Select(x => new TenderVM |
| | | { |
| | | // Description = x.Description, |
| | | // ItCode = ItCode, |
| | | // Name = x.Name, |
| | | // TenderId = x.Id, |
| | | // IsTender = true |
| | | |
| | | Description = x.Description, |
| | | ItCode = ItCode, |
| | | Name = x.Name, |
| | | TenderId = x.Id, |
| | | IsTender = true |
| | | |
| | | } |
| | | ).ToListAsync() ; |
| | | ten.AddRange(tentlist); |
| | | return ten; |
| | | // } |
| | | // ).WithCache(10).ToListAsync() ; |
| | | //ten.AddRange(tentlist); |
| | | return tentlist; |
| | | |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取用户详情,包括员工信息,租户信息,单位信息 |
| | | /// </summary> |
| | | /// <param name="TenantID"> 租户ID</param> |
| | | /// <param name="EmployeeID">员工ID </param> |
| | | /// <param name="UnitID">单位ID</param> |
| | | /// <returns></returns> |
| | | public async Task<RetUserInfo> GetUserInfo(int? TenantID,int? EmployeeID,int? UnitID) |
| | | { |
| | | TenderInfoVM Tenant = null; |
| | | EmployeeInfoVM Employee = null; |
| | | if (TenantID != null) |
| | | Tenant = await _db.Queryable<TenantInfo>().Where(x => x.Id == TenantID) |
| | | .Select(x => new TenderInfoVM |
| | | { |
| | | Description = x.Description, |
| | | Id = x.Id, |
| | | ItCode = x.ItCode, |
| | | Name = x.Name, |
| | | ReMark = x.ReMark, |
| | | }).WithCache(20).FirstAsync(); |
| | | if (EmployeeID != null) |
| | | Employee = await _db.Queryable<Document_EmployeeInfo>().Where(x => x.EmployeeId == EmployeeID) |
| | | .Select(x => new EmployeeInfoVM |
| | | { AdviseFlag = x.AdviseFlag, |
| | | CardPositive = x.CardPositive, |
| | | CardPositiveSize = x.CardPositiveSize, |
| | | CardPositiveVersionNo = x.CardPositiveVersionNo, |
| | | EmployeeId = x.EmployeeId, |
| | | EmployeeName = x.EmployeeName, |
| | | Job = x.Job, |
| | | LastUpdateName = x.LastUpdateName, |
| | | UserName = x.UserName, |
| | | IsLogin = x.IsLogin, |
| | | |
| | | |
| | | }).WithCache(20).FirstAsync(); |
| | | UnitInfoVM Unit = null; |
| | | if (UnitID != null) |
| | | Unit = await _db.Queryable<Model.cyDocumentModel.Document_TenderUnit>().Where(x => x.UnitId == UnitID) |
| | | .Select(x => new UnitInfoVM |
| | | { |
| | | FirmQualificationLevel = x.FirmQualificationLevel, |
| | | Fax = x.Fax, |
| | | CorporaterTechnicalPost= x.CorporaterTechnicalPost, |
| | | LastUpdateName= x.LastUpdateName, |
| | | Address = x.Address, |
| | | AdviseFlag = x.AdviseFlag, BankNum = x.BankNum, |
| | | BusinessContent = x.BusinessContent, |
| | | BusinessLicense = x.BusinessLicense, |
| | | CardPositive= x.CardPositive, |
| | | CardPositiveSize= x.CardPositiveSize, |
| | | CardPositiveVersionNo= x.CardPositiveVersionNo, |
| | | ContactPerson= x.ContactPerson, |
| | | ContactPhone= x.ContactPhone, |
| | | CorporatePhone= x.CorporatePhone, |
| | | Corporater= x.Corporater, |
| | | CorporaterPost= x.CorporaterPost, |
| | | CreatTime= x.CreatTime, |
| | | Mechanicer= x.Mechanicer, |
| | | MiddleStaff= x.MiddleStaff, |
| | | OpenBank= x.OpenBank, |
| | | OrgStructure= x.OrgStructure, |
| | | PrimaryStaff= x.PrimaryStaff, |
| | | ProjectManager= x.ProjectManager, |
| | | RegMoney= x.RegMoney, |
| | | Remark= x.Remark, |
| | | UnitId= x.UnitId, |
| | | TechnicalLeader= x.TechnicalLeader, |
| | | SeniorStaff= x.SeniorStaff, |
| | | StaffCount= x.StaffCount, |
| | | TechnicalPhone= x.TechnicalPhone, |
| | | TechnicalPost= x.TechnicalPost, |
| | | UnitLogo= x.UnitLogo, |
| | | UnitLogoSize= x.UnitLogoSize, |
| | | UnitLogoVersionNo= x.UnitLogoVersionNo, |
| | | UnitName= x.UnitName, |
| | | UnitType= x.UnitType, |
| | | WebUrl= x.WebUrl, |
| | | ZipCode= x.ZipCode, |
| | | |
| | | |
| | | |
| | | |
| | | }).WithCache(20).FirstAsync(); |
| | | |
| | | |
| | | return new RetUserInfo |
| | | { |
| | | EmployeeInfo = Employee, |
| | | TenderInfo = Tenant, |
| | | UnitInfo = Unit |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取员工列表 |
| | | /// </summary> |
| | | /// <param name="_businessService"></param> |
| | | /// <param name="page"></param> |
| | | /// <returns></returns> |
| | | public async Task<PageResult<EmployeeInfoVM>> postEmployeeList( EmployeePageSearch page) |
| | | { |
| | | var a = GetJwtInfo(); |
| | | if(a.EID!=null) |
| | | throw Oops.Oh($"没有权限"); |
| | | SqlSugar.PageModel pg = new SqlSugar.PageModel(); |
| | | pg.PageSize = page.PageSize; |
| | | pg.PageIndex = page.PageIndex; |
| | | RefAsync<int> total = 0; |
| | | PageResult<EmployeeInfoVM> result = new PageResult<EmployeeInfoVM>(); |
| | | result.Items = await _db.Queryable<EmployeeAtTenant, Document_EmployeeInfo>((et, ei) => |
| | | new JoinQueryInfos(JoinType.Left, et.EmployeeID==ei.EmployeeId |
| | | )).Where((ei,et)=>ei.TenantID==a.TEID) |
| | | .Select((ei,et)=>new EmployeeInfoVM |
| | | { |
| | | EmployeeId = et.EmployeeId, |
| | | AdviseFlag=et.AdviseFlag, |
| | | CardPositive=et.CardPositive, |
| | | CardPositiveSize=et.CardPositiveSize, |
| | | CardPositiveVersionNo=et.CardPositiveVersionNo, |
| | | EmployeeName=et.EmployeeName, |
| | | IsWork=et.IsWork, |
| | | Job=et.Job, |
| | | LeaveTime=et.LeaveTime, |
| | | Phone=et.Phone, |
| | | UserId=et.UserId, |
| | | UserName=et.UserName, |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | }).MergeTable().OrderBy(x=>x.EmployeeId).ToPageListAsync(page.PageIndex,page.PageSize, total); |
| | | |
| | | result.TotalCount = pg.TotalCount; |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | public async Task<bool > UpEmployee(EmployeeInfoVM vm) |
| | | { |
| | | |
| | | var jwtinfo = GetJwtInfo(); |
| | | |
| | | if (jwtinfo.EID != null) |
| | | throw Oops.Oh($"没有权限"); |
| | | var info = await GetUserInfo(jwtinfo.TEID, null, null); |
| | | Document_EmployeeInfo a = _mapper.Map<Document_EmployeeInfo>(vm); |
| | | |
| | | a.LastUpdateName = info.EmployeeInfo.UserName; |
| | | a.LastUpdateTime = DateTime.Now; |
| | | |
| | | return await _employeeRepository.UpdateAsync(a); |
| | | |
| | | } |
| | | |
| | | public async Task<bool> InEmployee(EmployeeInfoVM vm) |
| | | { |
| | | var jwtinfo = GetJwtInfo(); |
| | | if (jwtinfo.EID != null) |
| | | throw Oops.Oh($"没有权限"); |
| | | Document_EmployeeInfo a = _mapper.Map<Document_EmployeeInfo>(vm); |
| | | |
| | | var info = await GetUserInfo(jwtinfo.TEID, null, null); |
| | | EmployeeAtTenant elt = new EmployeeAtTenant |
| | | { |
| | | CreatBy = info.TenderInfo.ItCode, |
| | | CreatTime = DateTime.Now, |
| | | TenantID = info.TenderInfo.Id, |
| | | |
| | | |
| | | |
| | | }; |
| | | try |
| | | { |
| | | await _employeeRepository.AsTenant().BeginTranAsync(); |
| | | var jwtId= await _employeeRepository.InsertReturnIdentityAsync(a); |
| | | elt.EmployeeID = jwtId; |
| | | await _db.Insertable(elt).ExecuteCommandAsync(); |
| | | |
| | | await _employeeRepository.AsTenant().CommitTranAsync(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | |
| | | await _employeeRepository.AsTenant().RollbackTranAsync(); |
| | | //写日志 |
| | | $" 插入新员工失败, 错误消息:{e.Message} \r\n 堆栈错误:{e.StackTrace}" .LogInformation(); |
| | | throw Oops.Oh("新增失败"); |
| | | } |
| | | |
| | | return await _employeeRepository.InsertAsync(a); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 租户是否已经超时过期 |
| | | /// </summary> |
| | | /// <param name="TenderID">租户ID</param> |
| | | /// <returns> true 代表没有超时有权限使用,false 代表没有权限使用了</returns> |
| | | public async Task<bool> TenderHasPermissions( int TenderID) |
| | | { |
| | | var Key = TenantPermissions_RedisKey + TenderID.ToString(); |
| | | var tp= _cacheService.Get<TenantPermissions>(TenantPermissions_RedisKey+ TenderID.ToString()); |
| | | if(tp == null ) |
| | | { |
| | | tp= await _db.Queryable<TenantPermissions>().Where(x=>x.TenantId == TenderID).FirstAsync(); |
| | | if (tp != null) |
| | | _cacheService.Add<TenantPermissions>(Key, tp, 300); |
| | | else |
| | | return false; |
| | | } |
| | | if (tp.OverTime > DateTime.Now) |
| | | return true; |
| | | return false; |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 租户是否已经超时过期 根据token中包含的TID 识别是否有权限 |
| | | /// </summary> |
| | | /// <returns> true 代表没有超时有权限使用,false 代表没有权限使用了</returns> |
| | | public async Task<bool> TenderHasPermissions() |
| | | { |
| | | var jwtinfo= GetJwtInfo(); |
| | | if(jwtinfo != null&&jwtinfo.TEID!=null ) |
| | | { |
| | | var Key = TenantPermissions_RedisKey + jwtinfo.TEID.ToString(); |
| | | var tp = _cacheService.Get<TenantPermissions>(TenantPermissions_RedisKey + jwtinfo.TEID.ToString()); |
| | | if (tp == null) |
| | | { |
| | | tp = await _db.Queryable<TenantPermissions>().Where(x => x.TenantId == jwtinfo.TEID).FirstAsync(); |
| | | if (tp == null) |
| | | _cacheService.Add<TenantPermissions>(Key, tp, 300); |
| | | else |
| | | return false; |
| | | } |
| | | |
| | | if (tp.OverTime > DateTime.Now) |
| | | return true; |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | |