using Mapster; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.BZModels.Dto.UserCenterManager.UserInfoDtos; using WMS.BZModels.Models.UserCenterManager; using WMS.Info; using WMS.BZSqlSugar; using WMS.Util; namespace WMS.BZServices { public class BZLoginBLLCore { private static Repository _acluserInfoRepository => new Repository(); private static Repository _aclUsertokenRepository => new Repository(); /// /// 检测登录用户有效性 /// public static AclUserInfo CheckLoginUser(string UserNo, string UserPwd, EAppType AppType, string WarehouseNo, List WAreaNoList) { try { if (string.IsNullOrWhiteSpace(UserNo)) throw BZSysExCore.ThrowFailException("登录用户名为空!!!"); if (string.IsNullOrWhiteSpace(UserPwd)) throw BZSysExCore.ThrowFailException("登录密码为空!!!"); if (AppType == EAppType.TV || AppType == EAppType.Interface) throw BZSysExCore.ThrowFailException("登录APP类型不正确!!!"); //离线仓库登录 //if (AppType == EAppType.OffLineRF) //{ // if (string.IsNullOrWhiteSpace(WarehouseNo)) // throw BZSysExCore.ThrowFailException("仓库号为空!!!"); // //判断仓库 // var wh = Ctx.Queryable().Where(it => it.F_NO == WarehouseNo).First(); // if (wh == null) // throw BZSysExCore.ThrowFailException("输入参数中仓库号在仓库列表中不存在!!!"); // if (WAreaNoList == null || WAreaNoList.Count == 0) // throw BZSysExCore.ThrowFailException("仓库区域为空!!!"); // if (wh.F_TYPENUM != (int)EWarehouseType.OfflineRFWarehouse) // throw BZSysExCore.ThrowFailException("输入参数中仓库号不是离线仓库类型!!!"); // //判断区域与仓库有没有匹配 // var walist = Ctx.Queryable().Where(it => it.F_WAREHOUSENO == WarehouseNo).ToList(); // if (walist == null || walist.Count == 0) // throw BZSysExCore.ThrowFailException("输入参数中区域号在仓库区域列表中不存在!!!"); // if (WAreaNoList.Any(it => !walist.Any(b => it == b.F_NO))) // throw BZSysExCore.ThrowFailException("输入参数仓库号与区域号不匹配!!!"); //} //获取数据 var user = _acluserInfoRepository.Queryable().First(it => it.Code.ToUpper() == UserNo.ToUpper()); //var user = Ctx.Queryable().Where(it => it.F_NO.ToUpper() == UserNo.ToUpper()).First(); if (user == null) throw BZSysExCore.ThrowFailException("无法找到指定用户"); if (user.IsStop > 0) throw BZSysExCore.ThrowFailException("用户已停用!!!"); //if (user.PwdErrQty >= SysSetCore.GetSysSet().UserPwdErrQty) // throw BZSysExCore.ThrowFailException(string.Format("用户密码错误已超过{0}次,已被锁定。", SysSetCore.GetSysSet().UserPwdErrQty)); ////用户密码已过期 //if (DateTime.MaxValue != user.EditTime) //{ // if (user.EditTime.AddDays(SysSetCore.GetSysSet().UserPwdExpD) < DateTime.Now) // throw BZSysExCore.ThrowPwdExpiration(); //} //用户密码错误 if (user.Pwd != SysSecurityHelp.Aes256Encrypt(UserPwd, user.Secretkey)) { int qty = 5 - user.PwdErrQty; if (user.PwdErrQty > 0) throw new BZSysExCore(ESysExType.PwdError, string.Format("用户密码错误,您还有{0}次", qty > 0 ? qty : 0)); else throw new BZSysExCore(ESysExType.PwdError, "用户密码错误。"); } if (user.Pwd == SysSecurityHelp.Aes256Encrypt("000000", user.Secretkey)) { throw new BZSysExCore(ESysExType.PwdInit, "请将初始化密码进行修改。"); } return user; } catch (Exception ex) { throw ex; } } /// /// 是否是管理员 /// public static bool CheckAdmin(string UserNo) { bool IsAdmin = false; EUserType UserType = GetUserType(UserNo); if (UserType == EUserType.SuperAdmin || UserType == EUserType.Super || UserType == EUserType.System) { IsAdmin = true; } return IsAdmin; } /// /// 获取用户类型 /// public static EUserType GetUserType(string UserNo) { EUserType UserType = EUserType.User; try { if (UserNo.ToUpper() == EUserType.Super.ToString().ToUpper()) { UserType = EUserType.Super; } else if (UserNo.ToUpper() == EUserType.System.ToString().ToUpper()) { UserType = EUserType.System; } else if (UserNo.ToUpper() == EUserType.SuperAdmin.ToString().ToUpper()) { UserType = EUserType.SuperAdmin; } else { UserType = EUserType.User; } //权限管理员 } catch { } return UserType; } /// /// 更新用户密码错误次数 /// public static void UpdatePwdErr(string UserNo) { var result = _acluserInfoRepository.UpdateModelColumns(p => new AclUserInfo { EditWho = UserNo, EditTime = DateTime.Now, PwdErrQty = p.PwdErrQty + 1 }, it => it.Code.ToUpper() == UserNo.ToUpper()); //if (result) // throw BZSysExCore.ThrowFailException("更新用户密码登录错误次数失败!!!"); } /// /// 获取用户登录数据 /// public static LoginUserInfo GetLoginUser(string EncryptTokenNo) { try { LoginUserInfo LoginUser = new LoginUserInfo(); if (ConfigHelper.GetConfig().IsSSO) { if (string.IsNullOrWhiteSpace(EncryptTokenNo)) { throw BZSysExCore.ThrowFailException("登录凭证为空。"); } string TokenNo = SysSecurityHelp.Aes256Decrypt(EncryptTokenNo); var token = _aclUsertokenRepository.Queryable().Where(a => a.Code == TokenNo).First(); // ACL_USERTOKEN token = ctx.Queryable().Where(a => a.F_NO == TokenNo).First(); if (token == null || string.IsNullOrWhiteSpace(token.Code)) { throw BZSysExCore.ThrowFailException("无法找到登录用户信息。"); } LoginUser.UserNo = token.UserNo; LoginUser.UserName = token.UserName; LoginUser.UserType = GetUserType(token.UserNo); LoginUser.IPAddress = token.IPAddress; LoginUser.WAreaNoList = token.WareaNoList.ToObject>(); LoginUser.WarehouseNo = token.WarehouseNo; LoginUser.EncryptTokenNo = EncryptTokenNo; LoginUser.AppType = (EAppType)token.AppTypeNum; LoginUser.LoginTime = token.BTime; LoginUser.AppDeviceNo = token.AppDeviceNo; } else { var user = _acluserInfoRepository.Queryable().First(it => it.Code.ToUpper() == EncryptTokenNo.ToUpper()); LoginUser.UserNo = user.Code; LoginUser.UserName = user.Name; LoginUser.UserType = GetUserType(user.Code); //LoginUser.IPAddress = user.IPAddress; //LoginUser.WAreaNoList = token.WareaNoList.ToObject>(); LoginUser.WarehouseNo = user.WarehouseNo; //LoginUser.EncryptTokenNo = EncryptTokenNo; //LoginUser.AppType = (EAppType)user.AppTypeNum; LoginUser.LoginTime = user.EditTime; //LoginUser.AppDeviceNo = token.AppDeviceNo; } return LoginUser; } catch (Exception ex) { throw ex; } } /// /// 获取用户登录数据 /// public static LoginUserInfo GetLoginUser() { try { LoginUserInfo LoginUser = GetLoginUser(BZSessionCookieCore.GetLoginTokenNo()); //if (string.IsNullOrWhiteSpace(LoginUser.EncryptTokenNo)) //{ // throw BZSysExCore.ThrowFailException("登录凭证为空。"); //} //string TokenNo = SysSecurityHelp.Aes256Decrypt(LoginUser.EncryptTokenNo); //var token = _aclUsertokenRepository.Queryable().Where(a => a.Code == TokenNo).First(); //if (token == null || string.IsNullOrWhiteSpace(token.Code)) //{ // throw BZSysExCore.ThrowFailException("无法找到登录用户信息。"); //} //LoginUser.UserNo = token.UserNo; //LoginUser.UserName = token.UserName; //LoginUser.UserType = GetUserType(token.UserNo); //LoginUser.IPAddress = token.IPAddress; //LoginUser.WAreaNoList = token.WareaNoList.ToObject>(); //LoginUser.WarehouseNo = token.WarehouseNo; //LoginUser.EncryptTokenNo = LoginUser.EncryptTokenNo; //LoginUser.AppType = (EAppType)token.AppTypeNum; //LoginUser.LoginTime = token.BTime; //LoginUser.AppDeviceNo = token.AppDeviceNo; return LoginUser; } catch (Exception ex) { throw ex; } } /// /// 获取用户登录数据 /// public static LoginUserInfo GetLoginUser(ReqInfo ReqData) { try { if (ReqData == null) { throw BZSysExCore.ThrowInEmpty(); } return GetLoginUser(ReqData.EncryptTokenNo); } catch (Exception ex) { throw ex; } } public static byte[] GetVerifyCode() { try { string code = ""; var vcode = VerifyCodeUtil.GetVerifyCode(out code); BZSessionCookieCore.WriteSessionCookieValue(BZSessionCookieConst.LoginVerifyCodeKey, code); return vcode; } catch (Exception ex) { throw ex; } } } }