using cylsg.Model.ECTEModel; using cylsg.Model.UserModel; using cylsg.Model.utilityViewModel; using cylsg.utility.Extend; using EzCoreNet.Redis; using Furion; using Furion.DependencyInjection; using Furion.FriendlyException; using Models; using SqlSugar; using System.Security.Claims; namespace ECTESTOA { /// /// 川印相关的OA 服务 /// public class OAServices : IOAServices, IScoped { private static string ECTESTOAPermissionsKey= "ECTESTOAPermissionsKey:"; /// /// redis服务 /// private readonly IEzCoreNetRedisService _redisService; private ISqlSugarClient _OAsqlSugarClient; private ISqlSugarClient _sqlSugarClient; public Guid firmId => new Guid( "88B49967-D590-452C-93C6-0049A75FA5FF"); public OAServices ( IEzCoreNetRedisService ezCoreNetRedisService,ISqlSugarClient sqlSugarClient) { _redisService = ezCoreNetRedisService; _sqlSugarClient = sqlSugarClient; _OAsqlSugarClient = sqlSugarClient .AsTenant().GetConnection("ECTESTOADB"); } public async Task< ECTESTOAPermissions> GetOAPermissions() { var UserID = App.User?.FindFirstValue("UserID"); if(string.IsNullOrEmpty(UserID)) { throw Oops.Oh("没有登录信息,不可使用"); } var ret= _redisService.Get(ECTESTOAPermissionsKey + UserID); if(ret != null) { return ret; } else { string CaiwuKey = App.Configuration["EcTestOAMenuName:CaiWu"] ?? "没有"; var CaiWUMenuiId= await _OAsqlSugarClient.Queryable().Where(x => x.IsUsed == true && x.MenuName == CaiwuKey).Select(x=>x.Keyid).WithCache(600).FirstAsync(); int id = UserID?.toInt() ?? 0; if (id == 0) throw Oops.Oh("登录信息错误"); var user = await _sqlSugarClient.Queryable().Where(x => x.Id == id && x.IsEn == true && x.IsDeleted == false).WithCache(180).FirstAsync(); if (user==null) { throw Oops.Oh("登录信息错误,不是有效用户"); } //重新获取权限 ret = await _OAsqlSugarClient.Queryable().Includes(x => x.Department).Where(x => x.MobieNum == user.ItCode && x.FirmId == firmId).Select(x => new ECTESTOAPermissions { DepartmentName = x.Department.Name, DepartId=x.DepartmentId },true ).FirstAsync(); if (ret == null) { //不是用户,3分钟后重新查询 ret = new ECTESTOAPermissions(); } else { if (CaiWUMenuiId > 0&&ret.KeyId>0) { var Caiwu= await _OAsqlSugarClient.Queryable((sr,fr,spr)=>new JoinQueryInfos( JoinType.Left,sr.RoleId==fr.Keyid&&fr.FirmId== firmId&& sr.FirmId==firmId&&fr.IsUsed==true, JoinType.Left,fr.Keyid==spr.RoleId ) ).Where((sr, fr, spr)=>spr.MenuIdThree== CaiWUMenuiId&&sr.StaffId==ret.KeyId).Select((sr, fr, spr) => spr.MenuIdThree).FirstAsync(); if(Caiwu>0) { ret.BF_IsCaiWu = true; } } } _redisService.Add(ECTESTOAPermissionsKey + UserID, ret, 60); } return ret; } public Task GetWorkPlans() { throw new NotImplementedException(); } } }