632 lines
22 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Learun.Util;
using Learun.Util.SqlSugar;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Data;
using System.Linq;
using System.Text;
using DbType = System.Data.DbType;
namespace Learun.Application.Organization
{
/// <summary>
/// 版 本 PIT-ADMS V7.0.3 敏捷开发框架
/// Copyright (c) 2013-2018 Hexagon PPM
/// 创建人:研发部
/// 日 期2017.03.04
/// 描 述:用户模块数据操作服务类
/// </summary>
public class UserService
{
#region
Repository<UserEntity> _userRepository => new Repository<UserEntity>();
#endregion
#region
private string fieldSql;
public UserService()
{
fieldSql = @"
t.F_UserId,
t.F_EnCode,
t.F_Account,
t.F_Password,
t.F_Secretkey,
t.F_RealName,
t.F_NickName,
t.F_HeadIcon,
t.F_QuickQuery,
t.F_SimpleSpelling,
t.F_Gender,
t.F_Birthday,
t.F_Mobile,
t.F_Telephone,
t.F_Email,
t.F_OICQ,
t.F_WeChat,
t.F_MSN,
t.F_CompanyId,
t.F_DepartmentId,
t.F_SecurityLevel,
t.F_OpenId,
t.F_Question,
t.F_AnswerQuestion,
t.F_CheckOnLine,
t.F_AllowStartTime,
t.F_AllowEndTime,
t.F_LockStartDate,
t.F_LockEndDate,
t.F_SortCode,
t.F_DeleteMark,
t.F_EnabledMark,
t.F_Description,
t.F_CreateDate,
t.F_CreateUserId,
t.F_CreateUserName,
t.F_ModifyDate,
t.F_ModifyUserId,
t.F_ModifyUserName,
t.PasswordUpdateTime,
t.WX_OpenId
";//update by chenkai 20210322
}
#endregion
#region
/// <summary>
/// 获取实体,通过用户账号
/// </summary>
/// <param name="account">用户账号</param>
/// <returns></returns>
public UserEntity GetEntityByAccount(string account)
{
try
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append(fieldSql);
strSql.Append(" FROM LR_Base_User t ");
strSql.Append(" WHERE t.F_Account = @account AND t.F_DeleteMark = 0 ");
//return this.BaseRepository().FindEntity<UserEntity>(strSql.ToString(), new { account = account });
var x = SqlSugarHelper.Db.Queryable<UserEntity>().ToList();
return SqlSugarHelper.Db.Ado.SqlQuerySingle<UserEntity>(strSql.ToString(), new { account = account });
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 用户列表(根据公司主键)
/// </summary>
/// <param name="companyId">公司主键</param>
/// <returns></returns>
public List<UserEntity> GetList(string companyId)
{
try
{
var List = this.GetAllList();
return List.Where(t => t.F_CompanyId == companyId).
OrderBy(t => t.F_DepartmentId).OrderBy(x => x.F_RealName).ToList();
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 用户列表(根据公司主键)(分页)
/// </summary>
/// <param name="companyId"></param>
/// <param name="departmentId"></param>
/// <param name="pagination"></param>
/// <param name="keyword"></param>
/// <returns></returns>
public List<UserEntity> GetPageList(string companyId, string departmentId, Pagination pagination, string keyword)
{
try
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append(fieldSql.Replace("t.F_Password,", "").Replace("t.F_Secretkey,", ""));
strSql.Append($" FROM LR_Base_User t WHERE t.F_DeleteMark = 0 AND t.F_CompanyId = '{companyId}' ");
if (!string.IsNullOrEmpty(departmentId))
{
strSql.Append($" AND t.F_DepartmentId = '{departmentId}' ");
}
if (!string.IsNullOrEmpty(keyword))
{
keyword = "%" + keyword + "%";
strSql.Append($" AND( t.F_Account like '{keyword}' or t.F_RealName like '{keyword}' or t.F_Mobile like '{keyword}' ) ");
}
//return this.BaseRepository().FindList<UserEntity>(strSql.ToString(), new { companyId, departmentId, keyword }, pagination);
var AllUsers = SqlSugarHelper.Db.Queryable<UserEntity>().Where(x => x.F_DeleteMark == 0 && x.F_CompanyId == companyId);
if (!string.IsNullOrEmpty(departmentId))
{
AllUsers = AllUsers.Where(x => x.F_DepartmentId == departmentId);
}
if (!string.IsNullOrEmpty(keyword))
{
AllUsers = AllUsers.Where(x => x.F_Account.Contains(keyword) || x.F_RealName.Contains(keyword) || x.F_Mobile.Contains(keyword));
}
return AllUsers.ToPageList(pagination.page, pagination.rows);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 用户列表,全部
/// </summary>
/// <returns></returns>
public List<UserEntity> GetAllList()
{
try
{
var List = _userRepository.GetList();
foreach (var user in List)
{
user.F_Password = ""; user.F_Secretkey = "";
}
return List.Where(t => t.F_DeleteMark == 0).
OrderBy(t => t.F_DepartmentId).OrderBy(x => x.F_RealName).ToList();
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 用户列表导出Excel
/// </summary>
/// <returns></returns>
public DataTable GetExportList()
{
try
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT u.F_Account
,u.F_RealName
,CASE WHEN u.F_Gender=1 THEN '男' WHEN u.F_Gender=0 THEN '女' ELSE '' END AS F_Gender
,u.F_Birthday
,u.F_Mobile
,u.F_Telephone
,u.F_Email
,u.F_WeChat
,u.F_MSN
,o.F_FullName AS F_Company
,d.F_FullName AS F_Department
,u.F_Description
,u.F_CreateDate
,u.F_CreateUserName
FROM LR_Base_User u
LEFT JOIN LR_Base_Department d ON u.F_DepartmentId=d.F_DepartmentId
INNER JOIN LR_Base_Company o ON u.F_CompanyId=o.F_CompanyId WHERE u.F_DeleteMark = 0 ");
return SqlSugarHelper.Db.Ado.GetDataTable(strSql.ToString());
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 用户实体
/// </summary>
/// <param name="keyValue">主键值</param>
/// <returns></returns>
public UserEntity GetEntity(string keyValue)
{
try
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("t.*,t2.F_FullName ");
strSql.Append(" FROM LR_Base_User t LEFT JOIN lr_base_company t2 on t.F_CompanyId=t2.F_CompanyId");
strSql.Append(" WHERE t.F_UserId = @F_UserId AND t.F_DeleteMark = 0 ");
return SqlSugarHelper.Db.Ado.SqlQuerySingle<UserEntity>(strSql.ToString(), new { F_UserId = keyValue });
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 获取超级管理员用户列表
/// </summary>
/// <returns></returns>
public IEnumerable<UserEntity> GetAdminList()
{
try
{
return _userRepository.GetList(t => t.F_SecurityLevel == 1);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 根据OpenId获取用户
/// </summary>
/// <param name="account">用户账号</param>
/// <returns></returns>
public UserEntity GetEntityByOpenId(string openId)
{
try
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append(fieldSql);
strSql.Append(" FROM LR_Base_User t ");
strSql.Append(" WHERE t.WX_OpenId = @openId AND t.F_DeleteMark = 0 ");
return SqlSugarHelper.Db.Ado.SqlQuerySingle<UserEntity>(strSql.ToString(), new { openId = openId });
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
#endregion
#region
/// <summary>
/// 账户不能重复
/// </summary>
/// <param name="account">账户值</param>
/// <param name="keyValue">主键</param>
/// <returns></returns>
public bool ExistAccount(string account, string keyValue)
{
try
{
//var expression = LinqExtensions.True<UserEntity>();
//expression = expression.And(t => t.F_Account == account);
//if (!string.IsNullOrEmpty(keyValue))
//{
// expression = expression.And(t => t.F_UserId != keyValue);
//}
//return this.BaseRepository().IQueryable(expression).Count() == 0 ? true : false;
UserEntity userEntity = _userRepository.GetFirst(t => t.F_Account == account && t.F_DeleteMark == 0);
return userEntity == null ? false : true;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
#endregion
#region
/// <summary>
/// 删除
/// </summary>
/// <param name="keyValue">主键</param>
public void DeleteUser(string keyValue)
{
try
{
_userRepository.DeleteById(keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 虚拟删除
/// </summary>
/// <param name="keyValue">主键</param>
public void VirtualDelete(string keyValue)
{
try
{
//UserEntity entity = new UserEntity()
//{
// F_UserId = keyValue,
// F_DeleteMark = 1
//};
UserEntity entity = _userRepository.GetById(keyValue);
entity.F_DeleteMark = 1;
_userRepository.Update(entity);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 保存用户表单(新增、修改)
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="userEntity">用户实体</param>
/// <returns></returns>
public void SaveEntity(string keyValue, UserEntity userEntity)
{
try
{
if (string.IsNullOrEmpty(keyValue))
{
userEntity.Create();
userEntity.F_Secretkey = Md5Helper.Encrypt(CommonHelper.CreateNo(), 16).ToLower();
userEntity.F_Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(userEntity.F_Password, userEntity.F_Secretkey).ToLower(), 32).ToLower();
_userRepository.Insert(userEntity);
}
else
{
userEntity.Modify(keyValue);
//userEntity.F_Secretkey = null;
//userEntity.F_Password = null;
_userRepository.Update(userEntity);
}
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 修改用户登录密码
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="password">新密码MD5 小写)</param>
public void RevisePassword(string keyValue, string password, bool reset)
{
//update by chenkai 20210322
try
{
//UserEntity userEntity = new UserEntity();
UserEntity userEntity = _userRepository.GetById(keyValue);
userEntity.Modify(keyValue);
userEntity.F_Secretkey = Md5Helper.Encrypt(CommonHelper.CreateNo(), 16).ToLower();
userEntity.PasswordUpdateTime = DateTime.Now;
userEntity.F_Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(password, userEntity.F_Secretkey).ToLower(), 32).ToLower();
//重置密码时需要清空
if (reset)
{
//日期需要为NULL时设置为最小日期
userEntity.PasswordUpdateTime = DateTime.Parse("0001-01-01 00:00:00");
}
_userRepository.Update(userEntity);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 修改用户状态
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="state">状态1-启动0-禁用</param>
public void UpdateState(string keyValue, int state)
{
try
{
//UserEntity userEntity = new UserEntity();
UserEntity userEntity = _userRepository.GetById(keyValue);
userEntity.Modify(keyValue);
userEntity.F_EnabledMark = state;
_userRepository.Update(userEntity);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="userEntity">实体对象</param>
public void UpdateEntity(UserEntity userEntity)
{
try
{
_userRepository.Update(userEntity);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
/// <summary>
/// 修改用户OpenId
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="openId">openId</param>
public void UpdateOpenId(string keyValue, string openId)
{
try
{
string sql = string.Format("Update lr_base_user set WX_OpenId='{1}' where F_UserId='{0}'", keyValue, openId);
//this.BaseRepository().ExecuteBySql(sql);
SqlSugarHelper.Db.Ado.ExecuteCommand(sql);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
#endregion
#region
/// <summary>
/// 获取通用的人员选择
/// </summary>
/// <param name="queryJson">查询参数</param>
/// <returns></returns>
public List<UserEntity> GetCommonSelectUsers(Pagination pagination, string queryJson)
{
var queryParam = queryJson.ToJObject();
StringBuilder strSql = new StringBuilder();
//var dp = new DynamicParameters(new { });
var dp = new List<SugarParameter>();
strSql.Append(@"SELECT
t.*
FROM lr_base_user t
WHERE t.F_DeleteMark = 0 AND t.F_EnabledMark = 1 AND t.F_SecurityLevel IS NULL ");
if (!queryParam["keyword"].IsEmpty())
{
dp.Add(new SugarParameter("keyword", "%" + queryParam["keyword"].ToString() + "%", DbType.String));
strSql.Append(" AND (t.F_Account LIKE @keyword OR t.F_RealName LIKE @keyword)");
}
if (!queryParam["companyId"].IsEmpty())
{
dp.Add(new SugarParameter("F_CompanyId", queryParam["companyId"].ToString(), DbType.String));
strSql.Append(" AND t.F_CompanyId = @F_CompanyId");
}
if (!queryParam["postId"].IsEmpty() && !queryParam["ProjectId"].IsEmpty())
{
dp.Add(new SugarParameter("F_ObjectId", queryParam["postId"].ToString(), DbType.String));
dp.Add(new SugarParameter("ProjectId", queryParam["ProjectId"].ToString(), DbType.String));
strSql.Append(" AND t.F_UserId IN (SELECT F_UserId FROM lr_base_userrelation WHERE F_ObjectId = @F_ObjectId AND ProjectId = @ProjectId) ");
}
else if (!queryParam["postId"].IsEmpty())
{
dp.Add(new SugarParameter("F_ObjectId", queryParam["postId"].ToString(), DbType.String));
strSql.Append(" AND t.F_UserId IN (SELECT F_UserId FROM lr_base_userrelation WHERE F_ObjectId = @F_ObjectId) ");
}
else if (!queryParam["ProjectId"].IsEmpty() && queryParam["ProjectId"].ToString() != "00000000-0000-0000-0000-000000000001")
{
dp.Add(new SugarParameter("ProjectId", queryParam["ProjectId"].ToString(), DbType.String));
strSql.Append(" AND t.F_UserId IN (SELECT F_UserId FROM lr_base_userrelation WHERE F_Category = 2 AND ProjectId = @ProjectId) ");
}
if (pagination == null)
{
//return this.BaseRepository().FindList<UserEntity>(strSql.ToString(), dp);
return SqlSugarHelper.Db.SqlQueryable<UserEntity>(strSql.ToString()).AddParameters(dp).ToList();
}
else
{
//return this.BaseRepository().FindList<UserEntity>(strSql.ToString(), dp, pagination);
return SqlSugarHelper.Db.SqlQueryable<UserEntity>(strSql.ToString()).AddParameters(dp).ToPageList(pagination.page, pagination.rows);
}
}
#endregion
}
}