using EasyBL.WebApi; using EasyBL.WebApi.Common; using EasyBL.WebApi.Message; using EasyNet; using Entity; using Entity.ShowEasyDtos; using Entity.Sugar; using Entity.ViewModels; using Newtonsoft.Json; using SqlSugar; using SqlSugar.Base; using System; using System.Collections.Generic; using System.Net.Http; using System.Web; namespace EasyBL.WEBAPP.SYS { public class SystemService : ServiceBase { public HttpResponseMessage GetToken(string orgId, string userId, string pasWd) { SuccessResponseMessage srm = null; string sError = null; var db = SugarBase.GetIntance(); try { do { //判断参数是否合法 if (string.IsNullOrEmpty(orgId) || string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(pasWd)) { srm = new SuccessResponseMessage(null, null) { STATUSCODE = (int)StatusCodeEnum.ParameterError, MSG = StatusCodeEnum.ParameterError.GetEnumText() }; srm.DATA.Add("token", ""); return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm)); } var oTicket = (OTB_SYS_TicketAuth)HttpRuntimeCache.Get(orgId + userId); if (oTicket == null || oTicket.ExpireTime < DateTime.Now) { var sEncryptPwd = SecurityUtil.Encrypt(pasWd);//將輸入之密碼轉換驗證格式 var oUser = db.Queryable().Single(it => it.OrgID == orgId && it.Account == userId && it.Password == sEncryptPwd); if (oUser != null) { oTicket = db.Queryable().Single(it => it.OrgID == orgId && it.UserID == userId); if (oTicket == null) { oTicket = new OTB_SYS_TicketAuth(); } //oTicket.Token = SignExtension.CreateToken(); //var iExpireTime = 240; //var sExpireTime = Common.GetSystemSetting(db, orgId, "ExpireTime"); //if (!string.IsNullOrEmpty(sExpireTime)) //{ // iExpireTime = int.Parse(sExpireTime); //} //else //{ // iExpireTime = int.Parse(WebSettingsConfig.ExpireTime); //} //oTicket.ExpireTime = DateTime.Now.AddMinutes(iExpireTime); //30分钟过期 //if (oTicket.UserID != null && oTicket.OrgID != null) //{ // var iRel = db.Updateable(oTicket).IgnoreColumns(it => new { it.NO }) // .Where(it => it.NO == oTicket.NO).ExecuteCommand(); //} //else //{ // oTicket.OrgID = orgId; // oTicket.UserID = userId; // oTicket.UserName = ""; // oTicket.LoginIp = ""; // oTicket.LoginTime = DateTime.Now; // oTicket.CreateTime = DateTime.Now; // db.Insertable(oTicket).ExecuteCommand(); //} // HttpRuntimeCache.Set(oTicket.OrgID + oTicket.UserID, oTicket, iExpireTime * 60, true); } else { oTicket = new OTB_SYS_TicketAuth(); } } //返回token信息 srm = new SuccessResponseMessage(null, null); srm.DATA.Add("token", oTicket.Token); } while (false); } catch (Exception ex) { sError = Util.GetLastExceptionMsg(ex); srm = new SuccessResponseMessage(null, null) { STATUSCODE = (int)StatusCodeEnum.Error, MSG = StatusCodeEnum.Error.GetEnumText() }; srm.DATA.Add("token", ""); LogAndSendEmail(sError + " Param:" + orgId + "|" + userId + "|" + pasWd, ex, orgId, userId, "TestService", nameof(GetToken), "GetToken(获取token)", "", "", ""); } return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm)); } #region 用戶登錄 public HttpResponseMessage Login(Login dto) { SuccessResponseMessage srm = null; string sError = null; var db = SugarBase.GetIntance(); int errorStaus = 500; try { do { var sUserID = dto.Account; var sPassword = dto.Password; if (string.IsNullOrWhiteSpace(sUserID)) { errorStaus = (int)StatusCodeEnum.ParameterError; sError = @"帳號不能為空"; //帳號不能為空 break; } if (string.IsNullOrWhiteSpace(sPassword)) { errorStaus = (int)StatusCodeEnum.ParameterError; sError = @"密碼不能為空"; //密碼不能為空 break; } var sEncryptPwd = SecurityUtil.Encrypt(sPassword);//將輸入之密碼轉換驗證格式 //string sPwd1 = SecurityUtil.Decrypt("wTBo6uXVBlVH8Ms76xiE4w=="); //string sPwd1 = SecurityUtil.Decrypt("3EOyqH52VBUg3pj5Wy0rwQ=="); var oUser = db.Queryable().Single(x => x.Account == sUserID && x.Password == sEncryptPwd); if (oUser == null) { sError = @"帳號或密碼不正確"; //帳號或密碼不正確 errorStaus = (int)StatusCodeEnum.Unauthorized; break; } if (oUser.Status != @"1") { errorStaus = (int)StatusCodeEnum.Unauthorized; sError = oUser.Status; //該帳號無效 break; } var ticket = new OTB_SYS_TicketAuth { OrgID = oUser.OrgID, UserID = oUser.Account, UserName = oUser.FirstName, Token = SignExtension.CreateToken(), // LoginIp = i_crm.ClientIP, LoginTime = DateTime.Now }; var iExpireTime = 240; var sExpireTime = Common.GetSystemSetting(db, oUser.OrgID, @"SEexpireTime"); if (!string.IsNullOrEmpty(sExpireTime)) { iExpireTime = int.Parse(sExpireTime); } else { iExpireTime = int.Parse(Common.GetAppSettings(@"SEexpireTime")); } ticket.ExpireTime = DateTime.Now.AddMinutes(iExpireTime); //30天過期 ticket.IsVerify = @"Y"; var oTicket = db.Queryable().Single(x => x.OrgID == oUser.OrgID && x.UserID == oUser.Account); if (oTicket != null) { db.Updateable(ticket).IgnoreColumns(x => x.OutlookId).Where(x => x.NO == oTicket.NO).ExecuteCommand(); } else { ticket.CreateTime = DateTime.Now; db.Insertable(ticket).ExecuteCommand(); } //記錄log日誌 db.Insertable(new OTB_SYS_LoginLog { OrgId = ticket.OrgID, UserId = ticket.UserID, UserName = ticket.UserName, LoginIp = ticket.LoginIp, LoginTime = ticket.LoginTime }).ExecuteCommand(); HttpRuntimeCache.Set(ticket.OrgID + ticket.UserID, ticket, iExpireTime * 60, true); HttpContext.Current.Session.Add(@"orgid", ticket.OrgID); HttpContext.Current.Session.Add(@"userid", ticket.UserID); HttpCookie cookie = new HttpCookie("EURO_COOKIE");//初始化並設置Cookie的名稱 DateTime dt = DateTime.Now; TimeSpan ts = new TimeSpan(30, 0, 0, 0, 0);//過期時間為1分鐘 cookie.Expires = dt.Add(ts);//設置過期時間 cookie.Values.Add("orgid", ticket.OrgID); cookie.Values.Add("userid", ticket.UserID); HttpContext.Current.Response.AppendCookie(cookie); var strtoken = string.Format(@"orgid:{0},userid:{1},token:{2}", ticket.OrgID, ticket.UserID, ticket.Token); srm = new SuccessResponseMessage(null, null); srm.DATA.Add("authtoken", SecurityUtil.Encrypt(strtoken)); } while (false); } catch (Exception ex) { sError = Util.GetLastExceptionMsg(ex); System.Diagnostics.Debug.WriteLine(sError); } finally { if (null != sError) { srm = new SuccessResponseMessage(null, null) { STATUSCODE = errorStaus, MSG = sError }; } } return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm)); } #endregion #region RememberMe public HttpResponseMessage RememberMe(string Account) { SuccessResponseMessage srm = null; string sError = null; var db = SugarBase.GetIntance(); int errorStaus = 500; try { do { var UserLogin = db.Queryable() .Where(x => x.UserID == Account) .Single(); if (UserLogin == null) { sError = @"帳號或密碼不正確"; //帳號或密碼不正確 errorStaus = (int)StatusCodeEnum.Unauthorized; break; } srm = new SuccessResponseMessage(null, null); srm.DATA.Add("authtoken", UserLogin); } while (false); } catch (Exception ex) { sError = Util.GetLastExceptionMsg(ex); System.Diagnostics.Debug.WriteLine(sError); } finally { if (null != sError) { srm = new SuccessResponseMessage(null, null) { STATUSCODE = errorStaus, MSG = sError }; } } return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm)); } #endregion RememberMe } }