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