You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

305 lines
9.4 KiB
C#

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Reflection;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Common.DJYModel;
using Common.Extensions;
using Common.Tools;
using djy.IService.Djy;
using Common;
namespace djy_AmsApi.Controllers
{
/// <summary>
/// api接口基类
/// </summary>
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class ApiBase : Controller
{
#region http数据获取
/// <summary>
/// 创建日志
/// </summary>
/// <param name="Message">内容</param>
/// <param name="GroupName"></param>
/// <param name="DataJson"></param>
/// <param name="ObjGid"></param>
/// <param name="ResultJson"></param>
protected void _LogsAdd(string Message, string GroupName = null, object DataJson = null, string ObjGid = null, object ResultJson = null)
{
var toolsserver = IOC.AddServer<IToolsService>();
toolsserver.LogsAdd(Message, GroupName, DataJson, ObjGid, ResultJson);
}
/// <summary>
/// 获取大简云设置权限
/// </summary>
/// <param name="KeyName">keyname标识</param>
/// <returns></returns>
protected DJyUserAuthorityDto GetDJyUserAuthority(string KeyName) {
var _djyserver = IOC.AddServer<IDjyUserService>();
var rs= _djyserver.GetUserAuthority(GetLoginId,KeyName);
if (rs.Status)
{
return rs.Data;
}
else {
return null;
}
}
/// <summary>
/// 获取登录详情信息
/// </summary>
/// <param name="UserGid"></param>
protected User GetUserInfo(Guid? UserGid = null)
{
var _suser = IOC.AddServer<IDjyUserService>();
if (UserGid == null)
{ UserGid = GetLoginId; }
var rs = _suser.GetUserInfo(UserGid.ToString());
if (rs.Status)
{
return rs.Data;
}
else
{ return null; }
}
/// <summary>
/// 统一获取大简云权限查询权限的userid companyid 没有权限则指定userid和companyid 为不存的guid值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="BindData"></param>
/// <param name="KeyName">模块keyname标识</param>
/// <param name="type">0 查询查看权限 1 操作更新权限 默认 0</param>
/// <returns></returns>
protected UserAuthorityDto GetUserAuthorityToFormDto(string KeyName,int type=0 ) {
//本人的绑定UserId 全部 userid 和 compayid不做绑定 注册公司的 绑定 companyid 没有权限则指定userid和companyid 为不存的guid值
var RetrunData = new UserAuthorityDto();
var _djyserver = IOC.AddServer<IDjyUserService>();
User User;
User = null;
var uuid = GetLoginId.ToString();
var userrs = _djyserver.GetUserInfo(GetLoginId.ToString());
var notguid = Guid.Parse("00000000-0000-0000-0000-000000000001");
RetrunData.CompayId = null;
if (userrs.Status)
{
User = userrs.Data;
RetrunData.CompayId = Guid.Parse(User.CompId);
}
if (User == null)
{
RetrunData.UserId = notguid;
RetrunData.CompayId = notguid;
}
var aut = GetDJyUserAuthority(KeyName);
if (aut != null)
{//根据权限处理 _userid 和 _companyid 值
RetrunData.IsPower = true;
var _useraut= aut.Visiblerange;
if (type == 1) {
_useraut = aut.Operaterange;
}
switch (_useraut) {
case 0://全部
RetrunData.UserId = null;
RetrunData.CompayId = null;
break;
case 1://本公司
RetrunData.UserId = null;
RetrunData.CompayId = Guid.Parse(User.CompId);
break;
case 3://本人
RetrunData.UserId = GetLoginId;
RetrunData.CompayId = null;
break;
case 4://无权限或或默认权限
//_uerid = notguid;
//_companyid = notguid;
RetrunData.UserId = null;
RetrunData.CompayId = null;
break;
case 7://注册公司
RetrunData.UserId = null;
RetrunData.CompayId = Guid.Parse( User.CompId);
break;
default:
RetrunData.UserId = notguid;
RetrunData.CompayId = notguid;
break;
}
}
else
{
RetrunData.UserId = GetLoginId;
RetrunData.CompayId = null;
RetrunData.IsPower = true;
}
//if (sysOptionConfig.Webconfig.IsDev)
//{
// RetrunData.UserId = null;
// RetrunData.CompayId =null;
// RetrunData.IsPower = true;
//}
return RetrunData;
}
/// <summary>
/// 获取登录Id
/// </summary>
protected Guid? GetLoginId { get { return Guid.Parse(GetClaimsValue("loginid")); } }
/// <summary>
/// 获取登录类型
/// </summary>
protected EnumUser.UserType GetLoginType
{
get
{
var type = GetClaimsValue("logintype");
if (type.Isint())
{
return (EnumUser.UserType)int.Parse(type);
}
else { return EnumUser.UserType.All; }
}
}
/// <summary>
/// 根据key获取claims值 没有则返回null
/// </summary>
/// <param name="Key"></param>
/// <param name="IsDecrtypt">是否是加密</param>
/// <returns></returns>
protected string GetClaimsValue(string Key, bool IsDecrtypt = true)
{
try
{
var claims = HttpContext.User.Claims;
var id = claims.SingleOrDefault(s => s.Type == Key);
if (id == null)
{
return "0";
}
return IsDecrtypt ? _DecryptDES(id.Value) : id.Value;
}
catch {
return null;
}
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
protected static string _DecryptDES(string value)
{
return SafeTools.DecryptDES(value, sysOptionConfig.Webconfig.DesKey);
}
#endregion
}
/// <summary>
///api接口基类
/// </summary>
/// <typeparam name="IS">接口类型比如 Iservice</typeparam>
public class ApiBase<IS> : ApiBase
{
/// <summary>
///
/// </summary>
protected IS _server = IOC.AddServer<IS>();
/// <summary>
/// 执行指定的方法
/// </summary>
/// <param name="methodName">方法名称</param>
/// <param name="parameters">参数对象队列</param>
/// <returns></returns>
protected object _InvokeServer(string methodName, object[] parameters)
{
return _server.GetType().GetMethod(methodName).Invoke(_server, parameters);
}
}
/// <summary>
/// api接口基类
/// </summary>
/// <typeparam name="IS">接口类型比如 Iservice</typeparam>
/// <typeparam name="D">Dto Model</typeparam>
/// <typeparam name="T">Tables数据表model</typeparam>
public class ApiBase<IS, D, T> : ApiBase<IS>
{
/// <summary>
/// 根据Id获取实体
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
protected virtual object _GetId(long Id)
{
return _InvokeServer("GetId", new object[] { Id });
}
/// <summary>
///基础的创建接口 提交创建对象
/// </summary>
/// <param name="Dto"></param>
/// <returns></returns>
protected virtual object _Add(T Dto)
{
return _InvokeServer("Add", new object[] { Dto });
}
/// <summary>
/// 最基础的更新接口 传递要更新的数据对象 必须有Id
/// </summary>
/// <param name="Dto"></param>
/// <returns></returns>
protected virtual object _Up(T Dto)
{
return _InvokeServer("Up", new object[] { Dto, null, null });
}
/// <summary>
/// 最基础的删除接口 [1,2,3]
/// </summary>
/// <param name="Idlist"></param>
/// <returns></returns>
protected virtual object _Del(long[] Idlist)
{
return _InvokeServer("Del", new object[] { Idlist });
}
}
}