You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

392 lines
15 KiB

2 years ago
2 years ago
  1. 
  2. using EasyBL.WebApi;
  3. using EasyBL.WebApi.Common;
  4. using EasyBL.WebApi.Message;
  5. using EasyNet;
  6. using Entity;
  7. using Entity.ShowEasyDtos;
  8. using Entity.Sugar;
  9. using Newtonsoft.Json;
  10. using SqlSugar;
  11. using SqlSugar.Base;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Net;
  15. using System.Net.Http;
  16. using System.Web;
  17. namespace EasyBL.WEBAPP.SYS
  18. {
  19. public class MembersService : ServiceBase
  20. {
  21. #region 用戶登錄
  22. public HttpResponseMessage Login(Login dto)
  23. {
  24. SuccessResponseMessage srm = null;
  25. string sError = null;
  26. var db = SugarBase.GetIntance();
  27. try
  28. {
  29. do
  30. {
  31. var sUserID = dto.Account;
  32. var sPassword = dto.Password;
  33. if (string.IsNullOrWhiteSpace(sUserID))
  34. {
  35. sError = @"帳號不能為空"; //帳號不能為空
  36. break;
  37. }
  38. if (string.IsNullOrWhiteSpace(sPassword))
  39. {
  40. sError = @"密碼不能為空"; //密碼不能為空
  41. break;
  42. }
  43. var sEncryptPwd = SecurityUtil.Encrypt(sPassword);//將輸入之密碼轉換驗證格式
  44. //string sPwd1 = SecurityUtil.Decrypt("wTBo6uXVBlVH8Ms76xiE4w==");
  45. //string sPwd1 = SecurityUtil.Decrypt("3EOyqH52VBUg3pj5Wy0rwQ==");
  46. var oUser = db.Queryable<SETB_CMS_Member>().Single(x => x.Account == sUserID && x.Password == sEncryptPwd);
  47. if (oUser == null)
  48. {
  49. sError = @"帳號或密碼不正確"; //帳號或密碼不正確
  50. break;
  51. }
  52. if (oUser.Status != @"1")
  53. {
  54. sError = @"該帳號未啓用"; //該帳號無效
  55. break;
  56. }
  57. var ticket = new OTB_SYS_TicketAuth
  58. {
  59. OrgID = oUser.OrgID,
  60. UserID = oUser.Account,
  61. UserName = oUser.FirstName,
  62. Token = SignExtension.CreateToken(),
  63. // LoginIp = i_crm.ClientIP,
  64. LoginTime = DateTime.Now
  65. };
  66. var iExpireTime = 240;
  67. var sExpireTime = Common.GetSystemSetting(db, oUser.OrgID, @"ExpireTime");
  68. if (!string.IsNullOrEmpty(sExpireTime))
  69. {
  70. iExpireTime = int.Parse(sExpireTime);
  71. }
  72. else
  73. {
  74. iExpireTime = int.Parse(Common.GetAppSettings(@"ExpireTime"));
  75. }
  76. ticket.ExpireTime = DateTime.Now.AddMinutes(iExpireTime); //30分钟过期
  77. ticket.IsVerify = @"Y";
  78. var oTicket = db.Queryable<OTB_SYS_TicketAuth>().Single(x => x.OrgID == oUser.OrgID && x.UserID == oUser.Account);
  79. if (oTicket != null)
  80. {
  81. db.Updateable(ticket).IgnoreColumns(x => x.OutlookId).Where(x => x.NO == oTicket.NO).ExecuteCommand();
  82. }
  83. else
  84. {
  85. ticket.CreateTime = DateTime.Now;
  86. db.Insertable(ticket).ExecuteCommand();
  87. }
  88. //記錄log日誌
  89. db.Insertable(new OTB_SYS_LoginLog
  90. {
  91. OrgId = ticket.OrgID,
  92. UserId = ticket.UserID,
  93. UserName = ticket.UserName,
  94. LoginIp = ticket.LoginIp,
  95. LoginTime = ticket.LoginTime
  96. }).ExecuteCommand();
  97. HttpRuntimeCache.Set(ticket.OrgID + ticket.UserID, ticket, iExpireTime * 60, true);
  98. HttpContext.Current.Session.Add(@"orgid", ticket.OrgID);
  99. HttpContext.Current.Session.Add(@"userid", ticket.UserID);
  100. HttpCookie cookie = new HttpCookie("EURO_COOKIE");//初始化並設置Cookie的名稱
  101. DateTime dt = DateTime.Now;
  102. TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0);//過期時間為1分鐘
  103. cookie.Expires = dt.Add(ts);//設置過期時間
  104. cookie.Values.Add("orgid", ticket.OrgID);
  105. cookie.Values.Add("userid", ticket.UserID);
  106. HttpContext.Current.Response.AppendCookie(cookie);
  107. var jo = new SetMap
  108. {
  109. { @"orgid", ticket.OrgID },
  110. { @"userid", ticket.UserID },
  111. { @"loginname", ticket.UserName },
  112. { @"token", ticket.Token }
  113. };
  114. srm = new SuccessResponseMessage(null, null);
  115. srm.DATA.Add(BLWording.REL, jo);
  116. } while (false);
  117. }
  118. catch (Exception ex)
  119. {
  120. sError = Util.GetLastExceptionMsg(ex);
  121. }
  122. finally
  123. {
  124. if (null != sError)
  125. {
  126. srm = new SuccessResponseMessage(null, null)
  127. {
  128. STATUSCODE = (int)StatusCodeEnum.Error,
  129. MSG = sError
  130. };
  131. }
  132. }
  133. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  134. }
  135. #endregion
  136. //會員個人訊息查詢
  137. public HttpResponseMessage GetMemberInfo(string OrgID, string Account)
  138. {
  139. SuccessResponseMessage srm = null;
  140. string sError = null;
  141. var db = SugarBase.GetIntance();
  142. try
  143. {
  144. do
  145. {
  146. MemberDTO member = new MemberDTO();
  147. var sLang = WebAppGlobalConstWord.DEFAULT_LANGUAGE;
  148. string requestUrl = Common.ConfigGetValue("", "ida:RedirectUri");
  149. var saUser = db.Queryable<SETB_CMS_Member>()
  150. //搜尋條件
  151. .Where(x => x.OrgID == OrgID && x.Account == Account)
  152. .Single();
  153. member.MemberID = saUser.MemberID;
  154. member.MemberPicture = saUser.MemberPicture;
  155. member.FirstName = saUser.FirstName;
  156. member.LastName = saUser.LastName;
  157. member.Title = saUser.Title;
  158. member.MemberType = saUser.MemberType;
  159. member.Account = Account;
  160. member.Password = saUser.Password;
  161. member.Email = saUser.Email;
  162. member.Phone = saUser.Phone;
  163. member.CountryID = saUser.CountryID;
  164. member.LanguageID = saUser.ArgumentID;
  165. member.BirthDate = saUser.BirthDate;
  166. member.Status = saUser.Status;
  167. member.Subscribe = saUser.Subscribe;
  168. member.OrgID = OrgID;
  169. member.PhoneCode = saUser.PhoneCode;
  170. if (!string.IsNullOrEmpty(member.MemberPicture)) {
  171. var sFilePath = db.Queryable<OTB_SYS_Files>()
  172. .Where(x => x.ParentID == member.MemberPicture)
  173. .Single();
  174. member.MemberPicture = requestUrl + "/" + sFilePath.FilePath.Replace("\\", "/");
  175. }
  176. if (!string.IsNullOrEmpty(member.CountryID))
  177. {
  178. var sCountry = db.Queryable<SETB_SYS_Country>()
  179. .Where(x => x.CountryID == member.CountryID && x.LangType == sLang)
  180. .Single();
  181. member.CountryName = sCountry.CountryName;
  182. member.Country_ENCode = sCountry.Country_ENCode;
  183. }
  184. //返回user信息
  185. srm = new SuccessResponseMessage(null, null);
  186. srm.DATA.Add(BLWording.REL, member);
  187. } while (false);
  188. }
  189. catch (Exception ex)
  190. {
  191. sError = Util.GetLastExceptionMsg(ex);
  192. srm = new SuccessResponseMessage(null, null)
  193. {
  194. STATUSCODE = (int)StatusCodeEnum.Error,
  195. MSG = StatusCodeEnum.Error.GetEnumText()
  196. };
  197. }
  198. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  199. }
  200. #region 修改會員個人信息
  201. /// <summary>
  202. /// 修改會員個人信息
  203. /// </summary>
  204. /// <param name="i_crm"></param>
  205. /// <returns></returns>
  206. public HttpResponseMessage Update(MemberDTO Member)
  207. {
  208. SuccessResponseMessage srm = null;
  209. string sError = null;
  210. var db = SugarBase.GetIntance();
  211. try
  212. {
  213. do
  214. {
  215. var iRel = db.Updateable(MemberDTOtoEntity(Member))
  216. .Where(t1 => t1.Account == Member.Account)
  217. .ExecuteCommand();
  218. srm = new SuccessResponseMessage(null, null);
  219. srm.DATA.Add(BLWording.REL, iRel);
  220. } while (false);
  221. }
  222. catch (Exception ex)
  223. {
  224. sError = Util.GetLastExceptionMsg(ex);
  225. srm = new SuccessResponseMessage(null, null)
  226. {
  227. STATUSCODE = (int)StatusCodeEnum.Error,
  228. MSG = StatusCodeEnum.Error.GetEnumText()
  229. };
  230. srm.DATA.Add(BLWording.REL, "");
  231. }
  232. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  233. }
  234. #endregion
  235. #region Upload 上傳文件
  236. public HttpResponseMessage UploadAvatar(string OrgID, string Account)
  237. {
  238. SuccessResponseMessage srm = null;
  239. string sError = null;
  240. try
  241. {
  242. var c = HttpContext.Current;
  243. var sGUID = Guid.NewGuid().ToString();
  244. SECommonService commonService = new SECommonService();
  245. // 文件上傳
  246. HttpResponseMessage ret = commonService.Upload(c, OrgID, Account);
  247. if (ret.StatusCode == HttpStatusCode.OK)
  248. {
  249. var db = SugarBase.DB;
  250. SETB_CMS_Member i_crm = new SETB_CMS_Member();
  251. string requestUrl = Common.ConfigGetValue("", "ida:RedirectUri");
  252. var sUser = db.Queryable<SETB_CMS_Member>()
  253. .Where(x => x.OrgID == OrgID && x.Account == Account)
  254. .Single();
  255. var sFilePath = db.Queryable<OTB_SYS_Files>()
  256. .Where(x => x.ParentID == sUser.MemberPicture)
  257. .Single();
  258. sUser.MemberPicture = requestUrl + "/" + sFilePath.FilePath.Replace("\\", "/");
  259. srm = new SuccessResponseMessage(null, null);
  260. srm.DATA.Add(BLWording.REL, sUser.MemberPicture);
  261. }
  262. }
  263. catch (Exception ex)
  264. {
  265. sError = Util.GetLastExceptionMsg(ex);
  266. srm = new SuccessResponseMessage(null, null)
  267. {
  268. STATUSCODE = (int)StatusCodeEnum.Error,
  269. MSG = StatusCodeEnum.Error.GetEnumText()
  270. };
  271. srm.DATA.Add(BLWording.REL, "");
  272. }
  273. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  274. }
  275. #endregion Upload 上傳文件
  276. //註銷帳號
  277. public HttpResponseMessage DeactivateAccount(string OrgID, string Account)
  278. {
  279. //string sMsg = null;
  280. SuccessResponseMessage srm = SugarBase.ExecTran(db =>
  281. {
  282. do
  283. {
  284. var sUser = db.Queryable<SETB_CMS_Member>().Single(x => x.OrgID == OrgID && x.Account == Account);
  285. sUser.Status = "2"; //會員狀態為刪除
  286. var iRel = db.Updateable(sUser).ExecuteCommand();
  287. srm = new SuccessResponseMessage(null, null);
  288. srm.DATA.Add(BLWording.REL, sUser.Status);
  289. } while (false);
  290. return srm;
  291. });
  292. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  293. }
  294. //重設密碼
  295. public HttpResponseMessage ResetNewPassword(string OrgID, string Account, string Password)
  296. {
  297. //string sMsg = null;
  298. SuccessResponseMessage srm = SugarBase.ExecTran(db =>
  299. {
  300. do
  301. {
  302. var sUser = db.Queryable<SETB_CMS_Member>().Single(x => x.OrgID == OrgID && x.Account == Account);
  303. sUser.Password = SecurityUtil.Encrypt(Password); //新密碼加密
  304. var iRel = db.Updateable(sUser).ExecuteCommand(); //將新密碼更新至資料庫
  305. srm = new SuccessResponseMessage(null, null);
  306. srm.DATA.Add(BLWording.REL, sUser.MemberID);
  307. } while (false);
  308. return srm;
  309. });
  310. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  311. }
  312. private SETB_CMS_Member MemberDTOtoEntity(MemberDTO Member)
  313. {
  314. SETB_CMS_Member rsMember = new SETB_CMS_Member();
  315. rsMember.MemberID = Member.MemberID;
  316. rsMember.MemberPicture = Member.MemberPicture;
  317. rsMember.FirstName = Member.FirstName;
  318. rsMember.LastName = Member.LastName;
  319. rsMember.Title = Member.Title;
  320. rsMember.MemberType = Member.MemberType;
  321. rsMember.Account = Member.Account;
  322. rsMember.Password = Member.Password;
  323. rsMember.Email = Member.Email;
  324. rsMember.Phone = Member.Phone;
  325. rsMember.CountryID = Member.CountryID;
  326. rsMember.ArgumentID = Member.LanguageID;
  327. rsMember.BirthDate = Member.BirthDate;
  328. rsMember.Status = Member.Status;
  329. rsMember.OrgID = Member.OrgID;
  330. rsMember.PhoneCode = Member.PhoneCode;
  331. return rsMember;
  332. }
  333. }
  334. }