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 LoginAdmin(string loginName, string loginPwd) { //loginPwd = Md5Tools.CalcMd5(loginPwd); var modUser = await Db.Queryable().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; } } /// /// 获取用户角色信息 /// /// public async Task> GetUserRoleList(string UserName, string DepartmentNo, string RoleNo, string Status) { var modUser = await Db.Queryable().FirstAsync(s => s.Id == _userManager.UserId); return await Db.Queryable() .LeftJoin((a, b) => a.CreateUser == b.Id) .LeftJoin((a, b, c) => a.DepartmentNo == c.DepartmentNo) .LeftJoin((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((a, b, c, d) => new UserInfoDto() { RealName = a.RealName, CreateUserName = b.RealName, DepartmentName = c.DepartmentName, RoleName = d.RoleName, }, true) .ToListAsync(); } /// /// 根据编号获取用户信息列表 /// /// 用户编号 /// 用户登录名 /// 用户ID /// public async Task GetUserInfoByNo(string userNo, string userName, int id) { return await Db.Queryable() .Where(s => s.IsDel == "0") .Where(s => s.UserNo == userNo || s.UserName == userName) .WhereIF(id != 0, a => a.Id != id) .CountAsync(); } /// /// 新增用户信息 /// /// 用户视图模型 /// /// 异常 public async Task InsertUserInfo(UserInfoDto UserInfoDto) { //数据模型映射 SysUserInfor userinfo = _mapper.Map(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; } /// /// 删除用户信息 /// /// 用户实体模型 /// /// 异常 public async Task DeleteUserinfo(SysUserInfor user) { await Db.Updateable() .Where(s => s.Id == user.Id) .SetColumns(s => s.IsDel == "1") .SetColumns(s => s.UpdateTime == DateTime.Now) .SetColumns(s => s.UpdateUser == _userManager.UserId) .ExecuteCommandAsync(); } /// /// 编辑用户信息 /// /// 用户Dto /// /// 异常exception> public async Task UpdateUserinfo(UserInfoDto userdto) { //映射数据模型 SysUserInfor userlist = _mapper.Map(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; } /// /// 根据id获取用户信息列表 /// /// 用户id /// public async Task GetUserInfoById(int userid) { return await Db.Queryable().FirstAsync(s => s.Id == userid && s.IsDel == "0"); } /// /// 修改用户密码 /// /// 新密码 /// 用户id /// /// 捕获异常 public async Task UptUserPassWord(string pwdNew,string pwdNewTwo, int userId) { var funSet = Db.Queryable().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() .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(); } /// /// x天后提醒用户修改密码 /// /// /// public async Task IsPassWordTime(int userId) { SysFunSetting funSettings = await Db.Queryable().FirstAsync(a => a.IsDel == "0" && a.FunSetNo == "Fun026"); if (funSettings != null && funSettings.IsEnable == "NO") { SysUserInfor userinfo = await Db.Queryable().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; } } }