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.

442 lines
16 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. .IgnoreColumns(t1 => t1.MemberPicture)
  218. .ExecuteCommand();
  219. srm = new SuccessResponseMessage(null, null);
  220. srm.DATA.Add(BLWording.REL, iRel);
  221. } while (false);
  222. }
  223. catch (Exception ex)
  224. {
  225. sError = Util.GetLastExceptionMsg(ex);
  226. srm = new SuccessResponseMessage(null, null)
  227. {
  228. STATUSCODE = (int)StatusCodeEnum.Error,
  229. MSG = StatusCodeEnum.Error.GetEnumText()
  230. };
  231. srm.DATA.Add(BLWording.REL, "");
  232. }
  233. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  234. }
  235. #endregion
  236. #region Upload 上傳文件
  237. public HttpResponseMessage UploadAvatar(string OrgID, string Account)
  238. {
  239. SuccessResponseMessage srm = null;
  240. string sError = null;
  241. try
  242. {
  243. var c = HttpContext.Current;
  244. var sGUID = Guid.NewGuid().ToString();
  245. SECommonService commonService = new SECommonService();
  246. // 文件上傳
  247. HttpResponseMessage ret = commonService.Upload(c, OrgID, Account);
  248. if (ret.StatusCode == HttpStatusCode.OK)
  249. {
  250. var db = SugarBase.DB;
  251. SETB_CMS_Member i_crm = new SETB_CMS_Member();
  252. string requestUrl = Common.ConfigGetValue("", "ida:RedirectUri");
  253. var sUser = db.Queryable<SETB_CMS_Member>()
  254. .Where(x => x.OrgID == OrgID && x.Account == Account)
  255. .Single();
  256. var sFilePath = db.Queryable<OTB_SYS_Files>()
  257. .Where(x => x.ParentID == sUser.MemberPicture)
  258. .Single();
  259. sUser.MemberPicture = requestUrl + "/" + sFilePath.FilePath.Replace("\\", "/");
  260. srm = new SuccessResponseMessage(null, null);
  261. srm.DATA.Add(BLWording.REL, sUser.MemberPicture);
  262. }
  263. }
  264. catch (Exception ex)
  265. {
  266. sError = Util.GetLastExceptionMsg(ex);
  267. srm = new SuccessResponseMessage(null, null)
  268. {
  269. STATUSCODE = (int)StatusCodeEnum.Error,
  270. MSG = StatusCodeEnum.Error.GetEnumText()
  271. };
  272. srm.DATA.Add(BLWording.REL, "");
  273. }
  274. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  275. }
  276. #endregion Upload 上傳文件
  277. //註銷帳號
  278. public HttpResponseMessage DeactivateAccount(string OrgID, string Account)
  279. {
  280. //string sMsg = null;
  281. SuccessResponseMessage srm = SugarBase.ExecTran(db =>
  282. {
  283. do
  284. {
  285. var sUser = db.Queryable<SETB_CMS_Member>().Single(x => x.OrgID == OrgID && x.Account == Account);
  286. sUser.Status = "2"; //會員狀態為刪除
  287. var iRel = db.Updateable(sUser).ExecuteCommand();
  288. srm = new SuccessResponseMessage(null, null);
  289. srm.DATA.Add(BLWording.REL, sUser.Status);
  290. } while (false);
  291. return srm;
  292. });
  293. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  294. }
  295. //重設密碼
  296. public HttpResponseMessage ResetNewPassword(string OrgID, string Account, string Password)
  297. {
  298. //string sMsg = null;
  299. SuccessResponseMessage srm = SugarBase.ExecTran(db =>
  300. {
  301. do
  302. {
  303. var sUser = db.Queryable<SETB_CMS_Member>().Single(x => x.OrgID == OrgID && x.Account == Account);
  304. sUser.Password = SecurityUtil.Encrypt(Password); //新密碼加密
  305. var iRel = db.Updateable(sUser).ExecuteCommand(); //將新密碼更新至資料庫
  306. srm = new SuccessResponseMessage(null, null);
  307. srm.DATA.Add(BLWording.REL, sUser.MemberID);
  308. } while (false);
  309. return srm;
  310. });
  311. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  312. }
  313. private SETB_CMS_Member MemberDTOtoEntity(MemberDTO Member)
  314. {
  315. SETB_CMS_Member rsMember = new SETB_CMS_Member();
  316. rsMember.MemberID = Member.MemberID;
  317. rsMember.MemberPicture = Member.MemberPicture;
  318. rsMember.FirstName = Member.FirstName;
  319. rsMember.LastName = Member.LastName;
  320. rsMember.Title = Member.Title;
  321. rsMember.MemberType = Member.MemberType;
  322. rsMember.Account = Member.Account;
  323. rsMember.Password = Member.Password;
  324. rsMember.Email = Member.Email;
  325. rsMember.Phone = Member.Phone;
  326. rsMember.CountryID = Member.CountryID;
  327. rsMember.ArgumentID = Member.LanguageID;
  328. rsMember.BirthDate = Member.BirthDate;
  329. rsMember.Status = Member.Status;
  330. rsMember.OrgID = Member.OrgID;
  331. rsMember.PhoneCode = Member.PhoneCode;
  332. return rsMember;
  333. }
  334. //利用信箱重啟已註銷帳號
  335. public HttpResponseMessage ReactivateAccount(string Email)
  336. {
  337. //string sMsg = null;
  338. SuccessResponseMessage srm = SugarBase.ExecTran(db =>
  339. {
  340. do
  341. {
  342. var sUser = db.Queryable<SETB_CMS_Member>().Single(x => x.Email == Email);
  343. sUser.Status = "0"; //會員狀態重啟後為未認證狀態
  344. var iRel = db.Updateable(sUser).ExecuteCommand();
  345. srm = new SuccessResponseMessage(null, null);
  346. srm.DATA.Add(BLWording.REL, sUser);
  347. } while (false);
  348. return srm;
  349. });
  350. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  351. }
  352. //利用信箱重啟已註銷帳號
  353. public HttpResponseMessage ReactivateAccountByAcc(string Account)
  354. {
  355. //string sMsg = null;
  356. SuccessResponseMessage srm = SugarBase.ExecTran(db =>
  357. {
  358. do
  359. {
  360. var sUser = db.Queryable<SETB_CMS_Member>().Single(x => x.Account == Account);
  361. sUser.Status = "0"; //會員狀態重啟後為未認證狀態
  362. var iRel = db.Updateable(sUser).ExecuteCommand();
  363. srm = new SuccessResponseMessage(null, null);
  364. srm.DATA.Add(BLWording.REL, sUser);
  365. } while (false);
  366. return srm;
  367. });
  368. return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
  369. }
  370. }
  371. }