LoginUserCheckBLL.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using SqlSugar;
  8. using WMS.Util;
  9. using WMS.Info;
  10. using WMS.BZUtil;
  11. namespace WMS.Core
  12. {
  13. public class LoginUserCheckBLL : IBLL
  14. {
  15. public string InJsonData { get; set; }
  16. public object OutObjData { get; set; }
  17. public string SuccessMsg { get; set; } = "登录成功。";
  18. public LoginUserInfo LoginUser { get; set; }
  19. public string BLLDesc { get; private set; } = "用户登录";
  20. public void Exec()
  21. {
  22. try
  23. {
  24. LoginInfo LoginData = InJsonData.ToObject<LoginInfo>();
  25. if (LoginData == null)
  26. {
  27. throw SysExCore.ThrowInEmpty();
  28. }
  29. if (LoginUser.AppType == EAppType.PC)
  30. {
  31. SessionCookieCore.CheckVerifyCode(LoginData.TextV);
  32. }
  33. void action(SqlSugarClient ctx)
  34. {
  35. LoginUser.UserNo = LoginData.TextU;
  36. LoginUser.WAreaNoList = LoginData.WAreaNoList;
  37. LoginUser.WarehouseNo = LoginData.WarehouseNo;
  38. var tmpuser = LoginBLLCore.CheckLoginUser(LoginData.TextU, LoginData.TextP, LoginUser.AppType, LoginData.WarehouseNo, LoginData.WAreaNoList, ctx);
  39. LoginUser.UserName = tmpuser.F_NAME;
  40. LoginUser.UserNo = tmpuser.F_NO;
  41. LoginUser.UserType = LoginBLLCore.GetUserType(tmpuser.F_NO);
  42. //判断用户是在离线,如果离线作业,其他不能登录。
  43. if (ctx.Queryable<ACL_USERTOKEN>().Where(it => it.F_USERNO == tmpuser.F_NO && it.F_APPTYPENUM == (int)EAppType.OffLineRF).Count() > 0)
  44. throw SysExCore.ThrowFailException("此用户已离线登录,无法再次登录。");
  45. if (LoginUser.AppType == EAppType.OffLineRF)
  46. {
  47. if (LoginBLLCore.CheckAdmin(tmpuser.F_NO))
  48. throw SysExCore.ThrowFailException("管理员用户无法进行离线操作。");
  49. //判断离线仓库和区域是否已经被锁定
  50. //var waslist = ctx.Queryable<ACL_USERTOKEN>().Where(it => it.F_WAREHOUSENO == LoginData.WarehouseNo && it.F_APPTYPENUM == (int)EAppType.OffLineRF).ToList();
  51. //if (waslist != null && waslist.Count > 0)
  52. //{
  53. // List<string> wlist = new List<string>();
  54. // foreach (var w in waslist)
  55. // {
  56. // if (string.IsNullOrWhiteSpace(w.F_WAREANOLIST))
  57. // continue;
  58. // wlist.AddRange((w.F_WAREANOLIST).ToObject<List<string>>());
  59. // }
  60. // if (LoginData.WAreaNoList.Any(it => wlist.Contains(it)))
  61. // throw SysExCore.ThrowFailException("区域已经被锁定。");
  62. //}
  63. }
  64. else
  65. {
  66. if (SysSetCore.GetSysSet().IsOnlyLogin)
  67. //删除以前登录信息
  68. ctx.Deleteable<ACL_USERTOKEN>().Where(it => it.F_USERNO == tmpuser.F_NO).ExecuteCommand();
  69. else
  70. //删除以前登录信息
  71. ctx.Deleteable<ACL_USERTOKEN>().Where(it => it.F_USERNO == tmpuser.F_NO && it.F_APPTYPENUM == (int)LoginUser.AppType).ExecuteCommand();
  72. }
  73. //初始化登录信息
  74. DateTime nowdt = DateTime.Now;
  75. string TokenNo = Guid.NewGuid().ToString();
  76. ACL_USERTOKEN tmpobj = new ACL_USERTOKEN
  77. {
  78. F_NO = TokenNo,
  79. F_APPTYPENUM = (int)LoginUser.AppType,
  80. F_BTIME = nowdt,
  81. F_ETIME = (LoginUser.AppType == EAppType.OffLineRF) ? DateTime.MaxValue : nowdt,
  82. F_IPADDRESS = LoginUser.IPAddress,
  83. F_USERNO = tmpuser.F_NO,
  84. F_WAREANOLIST = LoginUser.WAreaNoList.ToJson(),
  85. F_WAREHOUSENO = LoginUser.WarehouseNo,
  86. F_USERNAME = tmpuser.F_NAME,
  87. F_APPDEVICENO = LoginUser.AppDeviceNo
  88. };
  89. ctx.Updateable<ACL_USERITEM>().SetColumns(it => new ACL_USERITEM() { F_PWDERRQTY = 0, F_EDITTIME = DateTime.Now, F_EDITUSERNO = tmpuser.F_NO }).Where(it => it.F_NO == tmpuser.F_NO).ExecuteCommand();
  90. if (ctx.Insertable<ACL_USERTOKEN>(tmpobj).ExecuteCommand() <= 0)
  91. {
  92. throw SysExCore.ThrowFailException("记录登录信息失败,请重试。");
  93. }
  94. string EncryptTokenNo = SysSecurityCore.Aes256Encrypt(TokenNo);
  95. if (LoginUser.AppType == EAppType.PC)
  96. {
  97. SessionCookieCore.AddLoginToken(EncryptTokenNo);
  98. }
  99. LoginUser.LoginTime = nowdt;
  100. LoginUser.EncryptTokenNo = EncryptTokenNo;
  101. LoginUser.JWTToken = new Operator().EncodeToken(LoginUser.UserNo, LoginUser.UserName, LoginData.TextU,EncryptTokenNo,"");
  102. OutObjData = LoginUser;
  103. }
  104. SysDbCore.DbTranExec(action);
  105. }
  106. catch (Exception ex)
  107. {
  108. if (ex is SysExCore)
  109. {
  110. SysExCore exc = ex as SysExCore;
  111. if (exc != null && exc.SysExType == ESysExType.PwdError)
  112. {
  113. LoginBLLCore.UpdatePwdErr(LoginUser.UserNo);
  114. SessionCookieCore.LoginPwdErrAdd();
  115. }
  116. }
  117. OutObjData = SessionCookieCore.GetUserPwdErrorNum();
  118. throw ex;
  119. }
  120. }
  121. }
  122. }