using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WMS.BZModels.Models.UserCenterManager; using WMS.BZUtil; using WMS.Info; using WMS.BZSqlSugar; using WMS.Util; namespace WMS.BZServices { public class BZLoginUserCheckBLL : IBLL { private static Repository _aclUsertokenRepository => new Repository(); private static Repository _acluserInfoRepository => new Repository(); public string InJsonData { get; set; } public object OutObjData { get; set; } public string SuccessMsg { get; set; } = "登录成功。"; public LoginUserInfo LoginUser { get; set; } public string BLLDesc { get; private set; } = "用户登录"; public void Exec() { try { LoginInfo LoginData = JsonConvert.DeserializeObject(InJsonData); if (LoginData == null) { throw BZSysExCore.ThrowInEmpty(); } if (LoginUser.AppType == EAppType.PC) { BZSessionCookieCore.CheckVerifyCode(LoginData.TextV); } void action() { LoginUser.UserNo = LoginData.TextU; LoginUser.WAreaNoList = LoginData.WAreaNoList; //LoginUser.WarehouseNo = LoginData.WarehouseNo; var tmpuser = BZLoginBLLCore.CheckLoginUser(LoginData.TextU, LoginData.TextP, LoginUser.AppType, LoginData.WarehouseNo, LoginData.WAreaNoList); LoginUser.UserName = tmpuser.Name; LoginUser.UserNo = tmpuser.Code; LoginUser.WarehouseNo = tmpuser.WarehouseNo; LoginUser.UserType = BZLoginBLLCore.GetUserType(tmpuser.Code); //判断用户是在离线,如果离线作业,其他不能登录。 if (ConfigHelper.GetConfig().IsSSO) { if (_aclUsertokenRepository.Queryable().Count(it => it.UserNo == tmpuser.Code && it.AppTypeNum == (int)EAppType.OffLineRF) > 0) throw BZSysExCore.ThrowFailException("此用户已离线登录,无法再次登录。"); } if (LoginUser.AppType == EAppType.OffLineRF) { if (BZLoginBLLCore.CheckAdmin(tmpuser.Code)) throw BZSysExCore.ThrowFailException("管理员用户无法进行离线操作。"); //判断离线仓库和区域是否已经被锁定 //var waslist = ctx.Queryable().Where(it => it.F_WAREHOUSENO == LoginData.WarehouseNo && it.F_APPTYPENUM == (int)EAppType.OffLineRF).ToList(); //if (waslist != null && waslist.Count > 0) //{ // List wlist = new List(); // foreach (var w in waslist) // { // if (string.IsNullOrWhiteSpace(w.F_WAREANOLIST)) // continue; // wlist.AddRange((w.F_WAREANOLIST).ToObject>()); // } // if (LoginData.WAreaNoList.Any(it => wlist.Contains(it))) // throw BZSysExCore.ThrowFailException("区域已经被锁定。"); //} } else { //if (SysSetCore.GetSysSet().IsOnlyLogin) // //删除以前登录信息 // _aclUsertokenRepository.Deleteable().Where(it => it.UserNo == tmpuser.Code).ExecuteCommand(); //else //删除以前登录信息 if (ConfigHelper.GetConfig().IsSSO) { _aclUsertokenRepository.Deleteable().Where(it => it.UserNo == tmpuser.Code && it.AppTypeNum == (int)LoginUser.AppType).ExecuteCommand(); } } _acluserInfoRepository.UpdateModelColumns(p => new AclUserInfo { EditWho = tmpuser.Code, EditTime = DateTime.Now, PwdErrQty = 0 }, it => it.Code.ToUpper() == tmpuser.Code.ToUpper()); //初始化登录信息 DateTime nowdt = DateTime.Now; string TokenNo = Guid.NewGuid().ToString(); if (ConfigHelper.GetConfig().IsSSO) { var tmpobj = new AclUsertoken { Code = TokenNo, AppTypeNum = (int)LoginUser.AppType, BTime = nowdt, ETime = (LoginUser.AppType == EAppType.OffLineRF) ? DateTime.MaxValue : nowdt, IPAddress = LoginUser.IPAddress, UserNo = tmpuser.Code, //WareaNoList = LoginUser.WAreaNoList.ToJson(), WarehouseNo = LoginUser.WarehouseNo, UserName = tmpuser.Name, AppDeviceNo = LoginUser.AppDeviceNo }; if (_aclUsertokenRepository.Insert(tmpobj) <= 0) { throw BZSysExCore.ThrowFailException("记录登录信息失败,请重试。"); } } string EncryptTokenNo = SysSecurityHelp.Aes256Encrypt(TokenNo); if (LoginUser.AppType == EAppType.PC) { BZSessionCookieCore.AddLoginToken(EncryptTokenNo); } LoginUser.LoginTime = nowdt; LoginUser.EncryptTokenNo = EncryptTokenNo; LoginUser.JWTToken = new Operator().EncodeToken(LoginUser.UserNo, LoginUser.UserName, LoginData.TextU, EncryptTokenNo, LoginUser.WarehouseNo); OutObjData = LoginUser; } _acluserInfoRepository.LoginUseTran(action); } catch (Exception ex) { if (ex is BZSysExCore) { BZSysExCore exc = ex as BZSysExCore; if (exc != null && exc.SysExType == ESysExType.PwdError) { BZLoginBLLCore.UpdatePwdErr(LoginUser.UserNo); BZSessionCookieCore.LoginPwdErrAdd(); } } OutObjData = BZSessionCookieCore.GetUserPwdErrorNum(); throw ex; } } } }