using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ant.Service.Common;
using Central.Control.Domain;
using Ant.Service.Common.Enums;
using MES.Production.Service.IService;
using Ant.ORM;
using Ant.Data;
using MES.Production.Entity.Entity;
using MES.Production.Entity;
namespace MES.Production.Service.ServiceImp
{
///
/// Service层基本用户信息(登录)接口
/// add 作者: 季健国 QQ:181589805 by 2016-05-22
///
public class UserManage : RepositoryBase, IService.IUserManage
{
#region 引用容器
///
/// 用户档案
///
IUserInfoManage UserInfoManage { get; set; }
///
/// 用户角色
///
IUserRoleManage UserRoleManage { get; set; }
///
/// 用户权限
///
IUserPermissionManage UserPermissionManage { get; set; }
///
/// 用户岗位
///
IPostUserManage PostUserManage { get; set; }
///
/// 用户部门
///
IUserDepartmentManage UserDepartmentManage { get; set; }
///
/// 权限
///
IPermissionManage PermissionManage { get; set; }
///
/// 部门
///
IDepartmentManage DepartmentManage { get; set; }
#endregion
///
/// 登录验证
/// add 作者: 季健国 QQ:181589805 by 2016-05-10
///
/// 用户名
/// 加密密码(DES)
///
public SYS_USER UserLogin(string username, string password)
{
return this.Get(p => p.ACCOUNT == username && p.PASSWORD == password);
//SYS_USER mod = new SYS_USER();
//using (AntORM orm = new AntORM())
//{
// orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
// RequestModel request = new RequestModel
// {
// newSt = new SqlNote() { Author = "季健国", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "获取游客信息" }
// };
// var resluttourist = orm.Queryable().Where(p => p.PHONE == username && p.PASSWORD == password).FirstOrDefault(request);
// if (resluttourist.IsSuccess)
// {
// Ant.Common.LoggerHelper.Monitor("获取用户登录:" + resluttourist.StrSql);
// Ent_SYS_USER model = resluttourist.ResultModel;
// }
//}
//return mod;
}
///
/// 是否超级管理员
///
public bool IsAdmin(int userId)
{
//通过用户ID获取角色
SYS_USER entity = this.Get(p => p.ID == userId);
if (entity == null) return false;
var roles = entity.SYS_USER_ROLE.Select(p => new SYS_ROLE
{
ID = p.SYS_ROLE.ID
});
return roles.ToList().Any(item => item.ID == ClsDic.DicRole["超级管理员"]);
}
///
/// 根据用户ID获取用户名
///
/// 用户ID
///
public string GetUserName(int Id)
{
var query = this.LoadAll(c => c.ID == Id);
if (query == null || !query.Any())
{
return "";
}
return query.First().NAME;
}
///
/// 根据用户ID删除用户相关记录
/// 删除原则:1、删除用户档案
/// 2、删除用户角色关系
/// 3、删除用户权限关系
/// 4、删除用户岗位关系
/// 5、删除用户部门关系
/// 6、删除用户
///
public bool Remove(int userId)
{
try
{
//档案
if (this.UserInfoManage.IsExist(p => p.USERID == userId))
{
this.UserInfoManage.Delete(p => p.USERID == userId);
}
//用户角色
if (this.UserRoleManage.IsExist(p => p.FK_USERID == userId))
{
this.UserRoleManage.Delete(p => p.FK_USERID == userId);
}
//用户权限
if (this.UserPermissionManage.IsExist(p => p.FK_USERID == userId))
{
this.UserPermissionManage.Delete(p => p.FK_USERID == userId);
}
//用户岗位
if (this.PostUserManage.IsExist(p => p.FK_USERID == userId))
{
this.PostUserManage.Delete(p => p.FK_USERID == userId);
}
//用户部门
if (this.UserDepartmentManage.IsExist(p => p.USER_ID == userId))
{
this.UserDepartmentManage.Delete(p => p.USER_ID == userId);
}
//用户自身
if (this.IsExist(p => p.ID == userId))
{
this.Delete(p => p.ID == userId);
}
return true;
}
catch (Exception e) { throw e.InnerException; }
}
///
/// 从Cookie中获取用户信息
///
public Account GetAccountByCookie()
{
var cookie = CookieHelper.GetCookie("cookie_rememberme");
if (cookie != null)
{
//验证json的有效性
if (!string.IsNullOrEmpty(cookie.Value))
{
//解密
var cookievalue = Ant.Service.Common.CryptHelper.DESCrypt.Decrypt(cookie.Value);
//是否为json
if (!JsonSplit.IsJson(cookievalue)) return null;
try
{
var jsonFormat = JsonConverter.ConvertJson(cookievalue);
if (jsonFormat != null)
{
var users = UserLogin(jsonFormat.username, jsonFormat.password);
if (users != null)
return GetAccountByUser(users);
}
}
catch { return null; }
}
}
return null;
}
///
/// 根据用户构造用户基本信息
///
public Account GetAccountByUser(SYS_USER users)
{
if (users == null) return null;
//用户授权--->注意用户的授权是包括角色权限与自身权限的
var permission = GetPermissionByUser(users);
//用户角色
var role = users.SYS_USER_ROLE.Select(p => p.SYS_ROLE).ToList();
//用户部门
var dpt = users.SYS_USER_DEPARTMENT.Select(p => p.SYS_DISTRIBUTORS).ToList();
//用户岗位
var post = users.SYS_POST_USER.ToList();
//用户主部门
YM_School schoolMod = new YM_School();
using (AntORM orm = new AntORM())
{
orm.db = Ant.Data.DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel request = new RequestModel
{
newSt = new SqlNote() { Author = "季健国", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "查询菜单的单个实体方法" }
};
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
int num = (users.DPTID).ToInt32();
var resultSchool = orm.Queryable().Where(p => p.ID == num).FirstOrDefault(request);
if (resultSchool.IsSuccess)
{
schoolMod = resultSchool.ResultModel;
}
}
//var dptInfo = this.DepartmentManage.Get(p => p.ID == users.DPTID);
//用户模块
var module = permission.Select(p => p.SYS_MODULE).ToList().Distinct(new ModuleDistinct()).ToList();
Account account = new Account()
{
Id = users.ID,
Name = users.NAME,
LogName = users.ACCOUNT,
PassWord = users.PASSWORD,
IsAdmin = IsAdmin(users.ID),
DptInfo = schoolMod,
//Dpt = dpt,
Face_Img = users.FACE_IMG,
Permissions = permission,
Roles = role,
PostUser = post,
USERTYPE = users.USERTYPE.ToInt32(),
Modules = module
};
return account;
}
///
/// 根据用户信息获取用户所有的权限
///
private List GetPermissionByUser(SYS_USER users)
{
//1、超级管理员拥有所有权限
if (IsAdmin(users.ID))
return PermissionManage.LoadListAll(null);
//2、普通用户,合并当前用户权限与角色权限
var perlist = new List();
//2.1合并用户权限
perlist.AddRange(users.SYS_USER_PERMISSION.Select(p => p.SYS_PERMISSION).ToList());
//2.2合同角色权限
////todo:经典多对多的数据查询Linq方法
perlist.AddRange(users.SYS_USER_ROLE.Select(p => p.SYS_ROLE.SYS_ROLE_PERMISSION.Select(c => c.SYS_PERMISSION)).SelectMany(c => c.Select(e => e)).Cast().ToList());
//3、去重
////todo:通过重写IEqualityComparer实现对象去重
perlist = perlist.Distinct(new PermissionDistinct()).ToList();
return perlist;
}
///
/// 根据用户ID获取部门名称
///
public string GetUserDptName(int id)
{
if (id <= 0)
return "";
var dptid = this.Get(p => p.ID == id).DPTID;
return this.DepartmentManage.Get(p => p.ID == dptid).NAME;
}
}
///
/// 权限去重,非常重要
/// add 作者: 季健国 QQ:181589805 by 2016-08-03
///
public class PermissionDistinct : IEqualityComparer
{
public bool Equals(SYS_PERMISSION x, SYS_PERMISSION y)
{
return x.ID == y.ID;
}
public int GetHashCode(SYS_PERMISSION obj)
{
return obj.ToString().GetHashCode();
}
}
}