using AutoMapper;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Model.ModelDto.SysDto;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.ISysServer;
|
using WMS.IDAL.ISysInterface;
|
using System.Security.Cryptography;
|
using OracleInternal.Secure.Network;
|
using Utility.Tools;
|
using System.Linq;
|
using SqlSugar;
|
using WMS.Entity.Context;
|
using WMS.Entity.BllTaskEntity;
|
using WMS.DAL;
|
using Utility;
|
using System.Text.RegularExpressions;
|
|
namespace WMS.BLL.SysServer
|
{
|
public class UserInforServer : IUserInforServer
|
{
|
readonly IMapper _mapper;
|
private readonly IFunSettingServer _setting;
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
private readonly UserManager _userManager;
|
public UserInforServer(IMapper mapper, IFunSettingServer setting, UserManager userManager)
|
{
|
_mapper = mapper;
|
_setting = setting;
|
_userManager = userManager;
|
}
|
|
public async Task<int> LoginAdmin(string loginName, string loginPwd)
|
{
|
//loginPwd = Md5Tools.CalcMd5(loginPwd);
|
var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(m => m.UserName == loginName && m.PassWord == loginPwd &&m.IsDel=="0");
|
if (modUser != null) //账号密码是否正确
|
{
|
if (modUser.Status == "0") //当前账号是否正常启用
|
{
|
//最后登陆时间
|
await Db.Updateable(modUser).UpdateColumns(s => s.LoginTime == DateTime.Now).ExecuteCommandAsync();
|
return modUser.Id;
|
}
|
else //当前账号被禁用
|
{
|
return 0;
|
}
|
}
|
else //账号密码不正确或没有此账号
|
{
|
return -1;
|
}
|
}
|
|
/// <summary>
|
/// 获取用户角色信息
|
/// </summary>
|
/// <returns></returns>
|
public async Task<List<UserInfoDto>> GetUserRoleList(string UserName, string DepartmentNo, string RoleNo, string Status)
|
{
|
var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(s => s.Id == _userManager.UserId);
|
return await Db.Queryable<SysUserInfor>()
|
.LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysDepartment>((a, b, c) => a.DepartmentNo == c.DepartmentNo)
|
.LeftJoin<SysRoles>((a, b, c, d) => a.RoleNo == d.RoleNo)
|
.Where((a,b,c,d)=>d.IsDel == "0")
|
.WhereIF(!string.IsNullOrEmpty(UserName), a => a.UserName.Contains(UserName))
|
.WhereIF(!string.IsNullOrEmpty(DepartmentNo), a => a.DepartmentNo == DepartmentNo)
|
.WhereIF(!string.IsNullOrEmpty(RoleNo), a => a.RoleNo == RoleNo)
|
.WhereIF(!string.IsNullOrEmpty(Status), a => a.Status == Status)
|
//.WhereIF(modUser.UserName.ToUpper() != "ADMIN", a => a.CreateUser == _userManager.UserId)
|
.Where(a => a.IsDel == "0")
|
.Select<UserInfoDto>((a, b, c, d) => new UserInfoDto()
|
{
|
RealName = a.RealName,
|
CreateUserName = b.RealName,
|
DepartmentName = c.DepartmentName,
|
RoleName = d.RoleName,
|
}, true)
|
.ToListAsync();
|
}
|
|
/// <summary>
|
/// 根据编号获取用户信息列表
|
/// </summary>
|
/// <param name="UserNo">用户编号</param>
|
/// <param name="userName">用户登录名</param>
|
/// <param name="id">用户ID</param>
|
/// <returns></returns>
|
public async Task<int> GetUserInfoByNo(string userNo, string userName, int id)
|
{
|
return await Db.Queryable<SysUserInfor>()
|
.Where(s => s.IsDel == "0")
|
.Where(s => s.UserNo == userNo || s.UserName == userName)
|
.WhereIF(id != 0, a => a.Id != id)
|
.CountAsync();
|
}
|
|
/// <summary>
|
/// 新增用户信息
|
/// </summary>
|
/// <param name="UserInfoDto">用户视图模型</param>
|
/// <returns></returns>
|
/// <exception cref="Exception">异常</exception>
|
public async Task<int> InsertUserInfo(UserInfoDto UserInfoDto)
|
{
|
//数据模型映射
|
SysUserInfor userinfo = _mapper.Map<SysUserInfor>(UserInfoDto);
|
//判断用户号是否唯一
|
int count = await GetUserInfoByNo(userinfo.UserNo, userinfo.UserName, 0);
|
int i = 0;
|
if (count > 0)
|
{
|
throw Oops.Bah("用户名或登录名重复");
|
}
|
else if (count == 0)
|
{
|
userinfo.PassWord = Md5Tools.CalcMd5("boxline");
|
userinfo.SetPasswordTime = DateTime.Now;
|
userinfo.CreateTime = DateTime.Now;
|
userinfo.CreateUser = _userManager.UserId;
|
i = await Db.Insertable(userinfo).ExecuteCommandAsync();
|
if (i <= 0)
|
throw Oops.Bah("新增用户信息失败");
|
}
|
return i;
|
|
}
|
|
/// <summary>
|
/// 删除用户信息
|
/// </summary>
|
/// <param name="user">用户实体模型</param>
|
/// <returns></returns>
|
/// <exception cref="Exception">异常</exception>
|
public async Task DeleteUserinfo(SysUserInfor user)
|
{
|
await Db.Updateable<SysUserInfor>()
|
.Where(s => s.Id == user.Id)
|
.SetColumns(s => s.IsDel == "1")
|
.SetColumns(s => s.UpdateTime == DateTime.Now)
|
.SetColumns(s => s.UpdateUser == _userManager.UserId)
|
.ExecuteCommandAsync();
|
|
}
|
|
/// <summary>
|
/// 编辑用户信息
|
/// </summary>
|
/// <param name="userdto">用户Dto</param>
|
/// <returns></returns>
|
/// <exception cref="Exception">异常exception>
|
public async Task<int> UpdateUserinfo(UserInfoDto userdto)
|
{
|
//映射数据模型
|
SysUserInfor userlist = _mapper.Map<SysUserInfor>(userdto);
|
//判断用户号是否唯一
|
int count = await GetUserInfoByNo(userdto.UserNo, userdto.UserName, userdto.Id);
|
int i = 0;
|
if (count > 0)
|
{
|
throw Oops.Bah("用户名或登录名重复");
|
}
|
else if (count == 0)
|
{
|
userdto.UpdateUser = _userManager.UserId;
|
userdto.UpdateTime = DateTime.Now;
|
i = await Db.Updateable(userlist)
|
.UpdateColumns(s => new { s.UserName, s.UserNo, s.Sex, s.RoleNo, s.RealName, s.Phone, s.Paper, s.Nationality, s.JobNo, s.Email, s.Demo, s.Addres, s.UpdateUser, s.UpdateTime })
|
.ExecuteCommandAsync();
|
if (i <= 0)
|
throw Oops.Bah("编辑用户信息失败");
|
}
|
return i;
|
}
|
|
/// <summary>
|
/// 根据id获取用户信息列表
|
/// </summary>
|
/// <param name="userids">用户id</param>
|
/// <returns></returns>
|
public async Task<SysUserInfor> GetUserInfoById(int userid)
|
{
|
return await Db.Queryable<SysUserInfor>().FirstAsync(s => s.Id == userid && s.IsDel == "0");
|
}
|
|
/// <summary>
|
/// 修改用户密码
|
/// </summary>
|
/// <param name="pwdNew">新密码</param>
|
/// <param name="userId">用户id</param>
|
/// <returns></returns>
|
/// <exception cref="Exception">捕获异常</exception>
|
public async Task<int> UptUserPassWord(string pwdNew,string pwdNewTwo, int userId)
|
{
|
var funSet = Db.Queryable<SysFunSetting>().Where(m => m.IsDel == "0" && m.FunSetName == "密码规则" && m.IsEnable == "NO").ToList().FirstOrDefault();
|
if (funSet != null)
|
{
|
bool t = false;
|
switch (funSet.FunSetNo)
|
{
|
case "Fun052": //数字,字母,符号
|
t = Regex.IsMatch(pwdNewTwo, @"^(?:(?=.*[0-9].*)(?=.*[A-Za-z].*)(?=.*[^0-9A-Za-z].*)).{3,}");
|
break;
|
case "Fun053": //字母,数字
|
t = Regex.IsMatch(pwdNewTwo, @"^(?:(?=.*[0-9].*)(?=.*[A-Za-z].*)).{2,}");
|
break;
|
case "Fun051": //数字,字母,符号,长度
|
t = Regex.IsMatch(pwdNewTwo, @"^(?=.*[0-9])(?=.*[a-zA-Z])(?=([\x21-\x7e]+)[^a-zA-Z0-9]).{8,30}");
|
break;
|
default:
|
break;
|
}
|
if (!t)
|
{
|
throw Oops.Bah("输入密码不符合密码规则");
|
}
|
}
|
return await Db.Updateable<SysUserInfor>()
|
.Where(s => s.Id == userId)
|
.SetColumns(s => s.UpdateTime == DateTime.Now)
|
.SetColumns(s => s.UpdateUser == _userManager.UserId)
|
.SetColumns(s => s.PassWord == pwdNew)
|
.SetColumns(s => s.SetPasswordTime == DateTime.Now)
|
.ExecuteCommandAsync();
|
|
}
|
/// <summary>
|
/// x天后提醒用户修改密码
|
/// </summary>
|
/// <param name="userId"></param>
|
/// <returns></returns>
|
public async Task<int> IsPassWordTime(int userId)
|
{
|
SysFunSetting funSettings = await Db.Queryable<SysFunSetting>().FirstAsync(a => a.IsDel == "0" && a.FunSetNo == "Fun026");
|
if (funSettings != null && funSettings.IsEnable == "NO")
|
{
|
SysUserInfor userinfo = await Db.Queryable<SysUserInfor>().FirstAsync(s => s.Id == userId && s.IsDel == "0");
|
if (userinfo.SetPasswordTime != null)
|
{
|
int days = string.IsNullOrEmpty(funSettings.SetValue) ? 30 : Convert.ToInt32(funSettings.SetValue);
|
bool isTime = userinfo.SetPasswordTime.Value.AddDays(days) < DateTime.Now;
|
if (isTime)
|
{
|
return 1;
|
}
|
}
|
}
|
return 0;
|
}
|
}
|
}
|