using Learun.Cache.Base;
using Learun.Cache.Factory;
using Learun.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using Learun.Application.WeChat;
using System.Web;
using System.ComponentModel.Design;
namespace Learun.Application.Organization
{
///
/// 版 本 PIT-ADMS V7.0.3 敏捷开发框架
/// Copyright (c) 2013-2018 Hexagon PPM
/// 创建人:研发部
/// 日 期:2017.03.06
/// 描 述:用户模块业务类
///
public class UserBLL : UserIBLL
{
#region 属性
private UserService userService = new UserService();
private DepartmentIBLL departmentIBLL = new DepartmentBLL();
#endregion
#region 缓存定义
private ICache cache = CacheFactory.CaChe();
private string cacheKeyAll = "_lr_base_user_";
private string cacheKey = "learun_adms_user_"; // +公司主键
private string cacheKeyAccount = "learun_adms_user_account_";// +用户账号(账号不允许改动)
private string cacheKeyId = "learun_adms_user_Id_";// +用户账号(账号不允许改动)
private static string LoginUserMarkKeyNew = "Learun_ADMS_V7_MarkNew_";
#endregion
#region 获取数据
///
/// 用户列表(根据公司主键)
///
/// 公司主键
///
public List GetList(string companyId)
{
try
{
if (string.IsNullOrEmpty(companyId))
{
return new List();
}
List list = cache.Read>(cacheKey + companyId, CacheId.user);
if (list == null)
{
list = userService.GetList(companyId);
cache.Write>(cacheKey + companyId, list, CacheId.user);
}
return list;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 用户列表(根据公司主键,部门主键)
///
/// 公司主键
/// 部门主键
/// 查询关键词
///
public List GetList(string companyId, string departmentId, string keyword)
{
try
{
List list = GetList(companyId);
if (!string.IsNullOrEmpty(departmentId))
{
list = list.FindAll(t => t.F_DepartmentId.ContainsEx(departmentId));
}
if (!string.IsNullOrEmpty(keyword))
{
list = list.FindAll(t => t.F_RealName.ContainsEx(keyword) || t.F_Account.ContainsEx(keyword));
}
return list;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 用户列表(全部)
///
///
public List GetAllList()
{
try
{
var list = cache.GetRedisOrDBData(cacheKeyAll, "", () => userService.GetAllList());
return list;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 用户列表(根据部门主键)
///
/// 部门主键
///
public List GetListByDepartmentId(string departmentId)
{
try
{
if (string.IsNullOrEmpty(departmentId))
{
return new List();
}
DepartmentEntity departmentEntity = departmentIBLL.GetEntity(departmentId);
if (departmentEntity == null)
{
return new List();
}
return GetList(departmentEntity.F_CompanyId, departmentId, "");
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取分页数据
///
/// 公司主键
/// 部门主键
/// 分页参数
/// 查询关键词
///
public List GetPageList(string companyId, string departmentId, Pagination pagination, string keyword)
{
try
{
return userService.GetPageList(companyId, departmentId, pagination, keyword);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 用户列表(导出Excel)
///
///
public void GetExportList()
{
try
{
//取出数据源
DataTable exportTable = userService.GetExportList();
//设置导出格式
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.Title = "用户导出";
excelconfig.TitleFont = "微软雅黑";
excelconfig.TitlePoint = 25;
excelconfig.FileName = "用户导出.xls";
excelconfig.IsAllSizeColumn = true;
//每一列的设置,没有设置的列信息,系统将按datatable中的列名导出
excelconfig.ColumnEntity = new List();
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_account", ExcelColumn = "账户" });
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_realname", ExcelColumn = "姓名" });
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_gender", ExcelColumn = "性别" });
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_mobile", ExcelColumn = "手机" });
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_description", ExcelColumn = "说明" });
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_createdate", ExcelColumn = "创建日期" });
excelconfig.ColumnEntity.Add(new ColumnModel() { Column = "f_createusername", ExcelColumn = "创建人" });
//调用导出方法
ExcelHelper.ExcelDownload(exportTable, excelconfig);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取实体,通过用户账号。redis介入
///
/// 用户账号
///
public UserEntity GetEntityByAccount(string account)
{
try
{
string userId = cache.Read(cacheKeyAccount + account, CacheId.user);
UserEntity userEntity;
if (string.IsNullOrEmpty(userId))
{
userEntity = userService.GetEntityByAccount(account);
if (userEntity != null)
{
cache.Write(cacheKeyAccount + userEntity.F_Account, userEntity.F_UserId, CacheId.user);
cache.Write(cacheKeyId + userEntity.F_UserId, userEntity, CacheId.user);//redis没有,就写入redis
}
}
else
{
userEntity = cache.Read(cacheKeyId + userId, CacheId.user);//redis中有,就直接拿,不从数据库拿
if (userEntity == null)
{
userEntity = userService.GetEntityByAccount(account);
if (userEntity != null)
{
cache.Write(cacheKeyId + userEntity.F_UserId, userEntity, CacheId.user);
}
}
}
return userEntity;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取用户数据
///
/// 用户主键
///
public UserEntity GetEntityByUserId(string userId)
{
try
{
UserEntity userEntity = userEntity = userService.GetEntity(userId);
return userEntity;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取用户列表数据
///
/// 用户主键串
///
public List GetListByUserIds(string userIds)
{
try
{
if (string.IsNullOrEmpty(userIds))
{
return null;
}
List list = new List();
string[] userList = userIds.Split(',');
foreach (string userId in userList)
{
UserEntity userEntity = userService.GetEntity(userId);
if (userEntity != null)
{
list.Add(userEntity);
}
}
return list;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取映射数据
///
///
public Dictionary GetModelMap()
{
try
{
Dictionary dic = cache.Read>(cacheKey + "dic", CacheId.user);
if (dic == null)
{
dic = new Dictionary();
var list = userService.GetAllList();
foreach (var item in list)
{
UserModel model = new UserModel()
{
companyId = item.F_CompanyId,
departmentId = item.F_DepartmentId,
name = item.F_RealName,
};
string img = "";
if (!string.IsNullOrEmpty(item.F_HeadIcon))
{
string fileHeadImg = Config.GetValue("fileHeadImg");
string fileImg = string.Format("{0}/{1}{2}", fileHeadImg, item.F_UserId, item.F_HeadIcon);
if (DirFileHelper.IsExistFile(fileImg))
{
img = item.F_HeadIcon;
}
}
if (string.IsNullOrEmpty(img))
{
if (item.F_Gender == 0)
{
img = "0";
}
else
{
img = "1";
}
}
model.img = img;
dic.Add(item.F_UserId, model);
}
cache.Write(cacheKey + "dic", dic, CacheId.user);
}
return dic;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取超级管理员用户列表
///
///
public IEnumerable GetAdminList()
{
try
{
return userService.GetAdminList();
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 用户实体
///
/// 主键值
///
public UserEntity GetEntity(string keyValue)
{
try
{
return userService.GetEntity(keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
#endregion
#region 提交数据
///
/// 虚拟删除
///
/// 主键
public void Delete(string keyValue)
{
try
{
UserEntity userEntity = GetEntityByUserId(keyValue);
cache.Remove(cacheKey + userEntity.F_CompanyId, CacheId.user);
cache.Remove(cacheKeyId + keyValue, CacheId.user);
cache.Remove(cacheKeyAccount + userEntity.F_Account, CacheId.user);
cache.Remove(cacheKeyAll);
Dictionary dic = GetModelMap();
dic.Remove(keyValue);
cache.Write(cacheKey + "dic", dic, CacheId.department);
userService.DeleteUser(keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 保存用户表单(新增、修改)
///
/// 主键值
/// 用户实体
///
public void SaveEntity(string keyValue, UserEntity userEntity)
{
try
{
if (string.IsNullOrEmpty(keyValue))
{
userEntity.F_Password = Md5Helper.Encrypt(GetInitPassword(userEntity), 32).ToLower(); //新建用户时,给配置文件里的默认密码
}
cache.Remove(cacheKey + userEntity.F_CompanyId, CacheId.user);
cache.Remove(cacheKeyId + keyValue, CacheId.user);
cache.Remove(cacheKeyAccount + userEntity.F_Account, CacheId.user);
cache.Remove(cacheKey + "dic", CacheId.user);
cache.Remove(cacheKeyAll);
// 账号不允许改动
//if (!string.IsNullOrEmpty(keyValue))
//{
// userEntity.F_Account = null;
//}
#region 前端来的时候,没有密码相关的字段
if (string.IsNullOrEmpty(keyValue))
{
userService.SaveEntity(keyValue, userEntity);
}
else
{
var existObj = userService.GetEntity(keyValue);
if (existObj == null)
{
throw new Exception("数据库中找不到该用户。请联系管理员。");
}
else
{
existObj.F_Account = userEntity.F_Account;
existObj.F_CompanyId = userEntity.F_CompanyId;
existObj.F_Description = userEntity.F_Description;
existObj.F_Gender = userEntity.F_Gender;
existObj.F_Mobile = userEntity.F_Mobile;
existObj.F_RealName = userEntity.F_RealName;
existObj.F_NickName = userEntity.F_NickName;
existObj.Modify(existObj.F_UserId);
userService.SaveEntity(keyValue, existObj);
}
}
#endregion
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 修改用户登录密码
///
/// 新密码(MD5 小写)
/// 旧密码(MD5 小写)
public bool RevisePassword(string newPassword, string oldPassword)
{
try
{
UserInfo userInfo = LoginUserInfo.Get();
cache.Remove(cacheKeyId + userInfo.userId, CacheId.user);
cache.Remove(cacheKeyAccount + userInfo.account, CacheId.user);
string oldPasswordByEncrypt = Md5Helper.Encrypt(DESEncrypt.Encrypt(oldPassword, userInfo.secretkey).ToLower(), 32).ToLower();
if (oldPasswordByEncrypt == userInfo.password)
{
//update by chenkai 20210322
userService.RevisePassword(userInfo.userId, newPassword, false);
}
else
{
return false;
}
return true;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 重置密码(000000)
///
/// 账号主键
public void ResetPassword(string keyValue)
{
//update by chenkai 20210322
try
{
UserEntity userEntity = GetEntityByUserId(keyValue);
cache.Remove(cacheKeyId + keyValue, CacheId.user);
cache.Remove("loginerrortime" + LoginUserMarkKeyNew + userEntity.F_Account.ToUpper(), CacheId.loginInfo);
string password = Md5Helper.Encrypt(GetInitPassword(userEntity), 32).ToLower();
userService.RevisePassword(keyValue, password, true);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
public string GetInitPassword(UserEntity user)
{
var initPasswordInXml = Config.GetValue("InitialPassword", "000000").ToString();
return initPasswordInXml;
}
///
/// 修改用户状态
///
/// 主键值
/// 状态:1-启动;0-禁用
public void UpdateState(string keyValue, int state)
{
try
{
UserEntity userEntity = GetEntityByUserId(keyValue);
cache.Remove(cacheKey + userEntity.F_CompanyId, CacheId.user);
cache.Remove(cacheKeyId + keyValue, CacheId.user);
cache.Remove(cacheKeyAccount + userEntity.F_Account, CacheId.user);
cache.Remove(cacheKey + "dic", CacheId.user);
cache.Remove("loginerrortime" + LoginUserMarkKeyNew + userEntity.F_Account.ToUpper(), CacheId.loginInfo);
userService.UpdateState(keyValue, state);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 修改用户登录密码
///
///用户实体对象
/// 新密码(MD5 小写)
/// 旧密码(MD5 小写)
public bool RevisePasswordByUserId(UserEntity entity, string newPassword, string oldPassword)
{
try
{
cache.Remove(cacheKeyId + entity.F_UserId, CacheId.user);
cache.Remove(cacheKeyAccount + entity.F_Account, CacheId.user);
string passwordMd5 = Md5Helper.Encrypt(oldPassword, 32);
string oldPasswordByEncrypt = Md5Helper.Encrypt(DESEncrypt.Encrypt(oldPassword, entity.F_Secretkey).ToLower(), 32).ToLower();
if (oldPasswordByEncrypt == entity.F_Password)
{
userService.RevisePassword(entity.F_UserId, newPassword, false);
}
else
{
return false;
}
return true;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 修改用户OpenId
///
/// 主键值
/// openId
public void UpdateOpenId(string keyValue, string openId)
{
try
{
UserEntity userEntity = GetEntityByUserId(keyValue);
cache.Remove(cacheKey + userEntity.F_CompanyId, CacheId.user);
cache.Remove(cacheKeyId + keyValue, CacheId.user);
cache.Remove(cacheKeyAccount + userEntity.F_Account, CacheId.user);
cache.Remove(cacheKey + "dic", CacheId.user);
cache.Remove("loginerrortime" + LoginUserMarkKeyNew + userEntity.F_Account.ToUpper(), CacheId.loginInfo);
userService.UpdateOpenId(keyValue, openId);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
#endregion
#region 验证数据
///
/// 账户不能重复
///
/// 账户值
/// 主键
///
public bool ExistAccount(string account, string keyValue)
{
try
{
return userService.ExistAccount(account, keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
#endregion
#region 扩展方法
///
/// 验证登录
///
/// 账号
/// 密码 MD5 32位 小写
///
public UserEntity CheckLogin(string account, string password)
{
try
{
UserEntity userEntity = GetEntityByAccount(account);
if (userEntity == null)
{
userEntity = new UserEntity()
{
LoginMsg = "密码或账户名错误!",
LoginOk = false
};
return userEntity;
}
userEntity.LoginOk = false;
if (userEntity.F_EnabledMark == 1)
{
string dbPassword = Md5Helper.Encrypt(DESEncrypt.Encrypt(password.ToLower(), userEntity.F_Secretkey).ToLower(), 32).ToLower();
if (dbPassword == userEntity.F_Password)
{
userEntity.LoginOk = true;
}
else
{
userEntity.LoginMsg = "密码或账户名错误!";
}
}
else
{
userEntity.LoginMsg = "账户被系统锁定,请联系管理员!";
}
return userEntity;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
///
/// 获取用户头像
///
/// 用户ID
public void GetImg(string userId)
{
UserEntity entity = GetEntityByUserId(userId);
string img = "";
string fileHeadImg = Config.GetValue("fileHeadImg");
if (entity != null)
{
if (!string.IsNullOrEmpty(entity.F_HeadIcon))
{
string fileImg = string.Format("{0}/{1}{2}", fileHeadImg, entity.F_UserId, entity.F_HeadIcon);
if (DirFileHelper.IsExistFile(fileImg))
{
img = fileImg;
}
}
}
else
{
img = string.Format("{0}Content/images/head/{1}", System.AppDomain.CurrentDomain.BaseDirectory, "on-boy.jpg");
}
if (string.IsNullOrEmpty(img))
{
if (entity.F_Gender == 0)
{
img = string.Format("{0}Content/images/head/{1}", System.AppDomain.CurrentDomain.BaseDirectory, "on-girl.jpg");
}
else
{
img = string.Format("{0}Content/images/head/{1}", System.AppDomain.CurrentDomain.BaseDirectory, "on-boy.jpg");
}
}
FileDownHelper.DownLoadnew(img);
}
///
/// 获取通用的人员选择
///
///
public IEnumerable GetCommonSelectUsers(Pagination pagination, string queryJson)
{
return userService.GetCommonSelectUsers(pagination, queryJson);
}
///
/// 验证登录OpenId
///
/// OpenId
///
public UserEntity CheckLoginByOpenId(string openId)
{
try
{
UserEntity userEntity = null;
if (string.IsNullOrEmpty(openId))
{
userEntity = new UserEntity()
{
LoginMsg = "openId参数异常!",
LoginOk = false
};
return userEntity;
}
userEntity = userService.GetEntityByOpenId(openId);
if (userEntity == null)
{
userEntity = new UserEntity()
{
LoginMsg = "用户未绑定微信",
LoginOk = false
};
return userEntity;
}
userEntity.LoginOk = false;
if (userEntity.F_EnabledMark == 1)
{
userEntity.LoginOk = true;
}
else
{
userEntity.LoginMsg = "账户被系统锁定,请联系管理员!";
}
return userEntity;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}
#endregion
}
}