using Microsoft.AspNetCore.Http ;
using System ;
using System.Collections.Generic ;
using System.Text ;
using VOL.Core.Const ;
using VOL.Core.Enums ;
using VOL.Core.ManageUser ;
using VOL.Core.UserManager ;
namespace VOL.Core.Infrastructure
{
public static class DictionaryHandler
{
/*2020.05.01增加根据用户信息加载字典数据源sql*/
/// <summary>
/// 获取自定义数据源sql
/// </summary>
/// <param name="dicNo"></param>
/// <param name="originalSql"></param>
/// <returns></returns>
public static string GetCustomDBSql ( string dicNo , string originalSql , string CompanyField )
{
switch ( dicNo )
{
case "roles" :
originalSql = GetRolesSql ( originalSql ) ;
break ;
//2020.05.24增加绑定table表时, 获取所有的角色列表
//注意, 如果是2020.05.24之前获取的数据库脚本
//请在菜单【下拉框绑定设置】添加一个字典编号【t_roles】,除了字典编号,其他内容随便填写
case "t_roles" :
originalSql = GetRolesSql ( ) ;
break ;
case "company" :
if ( string . IsNullOrEmpty ( CompanyField ) )
return originalSql ;
break ;
default :
break ;
}
var curruserinfo = UserContext . Current . UserInfo ;
if ( ( CompanyField ! = "" & & ! string . IsNullOrWhiteSpace ( originalSql ) ) | | ( ! string . IsNullOrWhiteSpace ( originalSql ) & & ( originalSql . IndexOf ( "##useridfield" ) > = 0 | | originalSql . IndexOf ( "##companyfield" ) > = 0 | | originalSql . IndexOf ( "##STOREHOUSEField" ) > = 0 ) ) )
{
originalSql = originalSql . Replace ( Convert . ToChar ( 10 ) , ' ' ) ;
var corpid = curruserinfo . CompanyId ;
if ( curruserinfo . LimitInCompany )
originalSql = originalSql . Replace ( "##companyfield" , CompanyField )
. Replace ( "##companyvalue" , corpid ) ;
else
originalSql = originalSql . Replace ( "##companyfield" , "'1'" )
. Replace ( "##companyvalue" , "1" ) ;
if ( curruserinfo . LimitInCompany )
{
originalSql = originalSql . Replace ( "##useridfield" , "USERID" )
. Replace ( "##useridvalue" , curruserinfo . User_Id . ToString ( ) ) ;
}
else
originalSql = originalSql . Replace ( "##useridfield" , "'1'" )
. Replace ( "##useridvalue" , "1" ) ;
if ( curruserinfo . LimitBySTORAGE )
{
originalSql = originalSql . Replace ( "##STOREHOUSEfield" , "STOREHOUSE" )
. Replace ( "##STOREHOUSEvalue" , $"select AREACODE from OP_WMS_STOREHOUSE where id in (select pid from OP_WMS_STOREHOUSE_USERLIMIT where userid = '{curruserinfo.User_Id}')" ) ;
}
else
originalSql = originalSql . Replace ( "##STOREHOUSEfield" , "'1'" )
. Replace ( "##STOREHOUSEvalue" , "'1'" ) ;
}
if ( ! string . IsNullOrWhiteSpace ( originalSql ) & & ( originalSql . IndexOf ( "##useridfield" ) > 0 | | originalSql . IndexOf ( "##useridvalue" ) > 0 ) ) {
if ( originalSql . IndexOf ( "##useridfield" ) > 0 )
originalSql = originalSql . Replace ( "##useridfield" , "USERID" ) ;
if ( originalSql . IndexOf ( "##useridvalue" ) > 0 )
originalSql = originalSql . Replace ( "##useridvalue" , $"{curruserinfo.User_Id}" ) ;
}
return originalSql ;
}
/// <summary>
/// 2020.05.24增加绑定table表时, 获取所有的角色列表
/// </summary>
/// <param name="context"></param>
/// <param name="originalSql"></param>
/// <returns></returns>
public static string GetRolesSql ( )
{
if ( DBType . Name = = DbCurrentType . PgSql . ToString ( ) )
{
return "SELECT \"Role_Id\" as key,\"RoleName\" as value from Sys_Role_Core" ;
}
return $ @ "SELECT Role_Id as 'key',RoleName as 'value' FROM Sys_Role_Core
WHERE Enable = 1 ";
}
/// <summary>
/// 获取解决的数据源,只能看到自己与下级所有角色
/// </summary>
/// <param name="context"></param>
/// <param name="originalSql"></param>
/// <returns></returns>
public static string GetRolesSql ( string originalSql )
{
if ( UserContext . Current . IsSuperAdmin )
{
return originalSql ;
}
string currnetRoleId = UserContext . Current . RoleId ;
List < string > roleIds = RoleContext . GetAllChildrenIds ( currnetRoleId ) ;
roleIds . Add ( currnetRoleId ) ;
string sql = $ @ "SELECT Role_Id as 'key',RoleName as 'value' FROM Sys_Role_Core
WHERE Enable = 1 and Role_Id in ( ' { string . Join ( "','" , roleIds ) } ' ) ";
return sql ;
}
}
}