UserRankWhiteController.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. /*
  2. * 创客预设职级
  3. */
  4. using System;
  5. using System.Web;
  6. using System.Collections.Generic;
  7. using System.Diagnostics;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Microsoft.AspNetCore.Http;
  12. using Microsoft.Extensions.Logging;
  13. using Microsoft.Extensions.Options;
  14. using MySystem.Models;
  15. using Library;
  16. using LitJson;
  17. using MySystemLib;
  18. namespace MySystem.Areas.Admin.Controllers
  19. {
  20. [Area("Admin")]
  21. [Route("Admin/[controller]/[action]")]
  22. public class UserRankWhiteController : BaseController
  23. {
  24. public UserRankWhiteController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  25. {
  26. OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  27. }
  28. #region 创客预设职级列表
  29. /// <summary>
  30. /// 根据条件查询创客预设职级列表
  31. /// </summary>
  32. /// <returns></returns>
  33. public IActionResult Index(UserRankWhite data, string right)
  34. {
  35. ViewBag.RightInfo = RightInfo;
  36. ViewBag.right = right;
  37. return View();
  38. }
  39. #endregion
  40. #region 根据条件查询创客预设职级列表
  41. /// <summary>
  42. /// 创客预设职级列表
  43. /// </summary>
  44. /// <returns></returns>
  45. public JsonResult IndexData(UserRankWhite data, string MakerCode, string RealName, string StatusSelect, string TopMakerCode, string UpdateDateData, int page = 1, int limit = 30)
  46. {
  47. Dictionary<string, string> Fields = new Dictionary<string, string>();
  48. string condition = " and Status>-1";
  49. //创客编号
  50. if (!string.IsNullOrEmpty(MakerCode))
  51. {
  52. condition += " and UserId in (select UserId from UserForMakerCode where MakerCode='" + MakerCode + "')";
  53. }
  54. //创客名称
  55. if (!string.IsNullOrEmpty(RealName))
  56. {
  57. condition += " and UserId in (select UserId from UserForRealName where RealName='" + RealName + "')";
  58. }
  59. //状态
  60. if (!string.IsNullOrEmpty(StatusSelect))
  61. {
  62. condition += " and Status=" + StatusSelect;
  63. }
  64. //顶级创客编号
  65. if (!string.IsNullOrEmpty(TopMakerCode))
  66. {
  67. var topUser = db.Users.FirstOrDefault(m => m.MakerCode == TopMakerCode) ?? new Users();
  68. var childIds = "";
  69. // if (!string.IsNullOrEmpty(topUser.ParentNav))
  70. // {
  71. // string[] ParentNavList = topUser.ParentNav.Trim(',').Replace(",,", ",").Split(',');
  72. // var topUserId = "," + topUser.Id + ",";
  73. // if (ParentNavList.Length > 1)
  74. // {
  75. // var childUser = db.Users.Where(m => m.ParentNav.Contains(topUserId)).ToList();
  76. // foreach (var item in childUser)
  77. // {
  78. // childIds = item.Id + ",";
  79. // }
  80. // childIds = childIds.TrimEnd(',');
  81. // }
  82. // }
  83. var topUserId = "," + topUser.Id + ",";
  84. var childUser = db.Users.Where(m => m.ParentNav.Contains(topUserId)).ToList();
  85. foreach (var item in childUser)
  86. {
  87. childIds += item.Id + ",";
  88. }
  89. childIds = childIds.TrimEnd(',');
  90. condition += " and UserId in (" + childIds + ")";
  91. }
  92. //到期时间
  93. if (!string.IsNullOrEmpty(UpdateDateData))
  94. {
  95. string[] datelist = UpdateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
  96. string start = datelist[0];
  97. string end = datelist[1];
  98. condition += " and UpdateDate>='" + start + " 00:00:00' and UpdateDate<='" + end + " 23:59:59'";
  99. }
  100. Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("UserRankWhite", Fields, "Id desc", "0", page, limit, condition);
  101. List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
  102. foreach (Dictionary<string, object> dic in diclist)
  103. {
  104. dic["Rank"] = RelationClass.GetUserLevelSetInfo(int.Parse(dic["Rank"].ToString()));
  105. int UserId = int.Parse(dic["UserId"].ToString());
  106. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  107. dic["MakerCode"] = user.MakerCode;
  108. dic["RealName"] = user.RealName;
  109. if (user.ParentUserId > 0)
  110. {
  111. Users puser = db.Users.FirstOrDefault(m => m.Id == user.ParentUserId) ?? new Users();
  112. dic["ParentMakerCode"] = puser.MakerCode;
  113. dic["ParentRealName"] = puser.RealName;
  114. }
  115. if (!string.IsNullOrEmpty(user.ParentNav))
  116. {
  117. string[] ParentNavList = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
  118. if (ParentNavList.Length > 1)
  119. {
  120. int TopId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[1]);
  121. Users tuser = db.Users.FirstOrDefault(m => m.Id == TopId) ?? new Users();
  122. dic["TopMakerCode"] = tuser.MakerCode;
  123. dic["TopRealName"] = tuser.RealName;
  124. }
  125. else
  126. {
  127. int TopId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  128. Users tuser = db.Users.FirstOrDefault(m => m.Id == TopId) ?? new Users();
  129. dic["TopMakerCode"] = tuser.MakerCode;
  130. dic["TopRealName"] = tuser.RealName;
  131. }
  132. }
  133. dic["Status"] = dic["Status"].ToString() == "1" ? "有效" : "无效";
  134. }
  135. return Json(obj);
  136. }
  137. #endregion
  138. #region 增加创客预设职级
  139. /// <summary>
  140. /// 增加或修改创客预设职级信息
  141. /// </summary>
  142. /// <returns></returns>
  143. public IActionResult Add(string right)
  144. {
  145. ViewBag.RightInfo = RightInfo;
  146. ViewBag.right = right;
  147. return View();
  148. }
  149. #endregion
  150. #region 增加创客预设职级
  151. /// <summary>
  152. /// 增加或修改创客预设职级信息
  153. /// </summary>
  154. /// <returns></returns>
  155. [HttpPost]
  156. public string Add(UserRankWhite data, string MakerCode)
  157. {
  158. bool check = db.UserForMakerCode.Any(m => m.MakerCode == MakerCode);
  159. if (!check)
  160. {
  161. return "创客编号不存在";
  162. }
  163. Dictionary<string, object> Fields = new Dictionary<string, object>();
  164. UserForMakerCode user = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
  165. check = db.UserRankWhite.Any(m => m.UserId == user.UserId);
  166. if (check)
  167. {
  168. return "已添加过此创客编号,请勿重复添加";
  169. }
  170. Fields.Add("UserId", user.UserId);
  171. Fields.Add("Rank", data.Rank);
  172. Fields.Add("Status", data.Status);
  173. Fields.Add("SeoTitle", data.SeoTitle);
  174. Fields.Add("SeoKeyword", data.SeoKeyword);
  175. Fields.Add("SeoDescription", data.SeoDescription);
  176. int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("UserRankWhite", Fields, 0);
  177. AddSysLog(data.Id.ToString(), "UserRankWhite", "add");
  178. db.SaveChanges();
  179. UserRank rank = RedisDbconn.Instance.Get<UserRank>("UserRank:" + user.UserId);
  180. if (rank != null)
  181. {
  182. rank.WhiteRank = data.Rank;
  183. RedisDbconn.Instance.Set("UserRank:" + user.UserId, rank);
  184. }
  185. return "success";
  186. }
  187. #endregion
  188. #region 修改创客预设职级
  189. /// <summary>
  190. /// 增加或修改创客预设职级信息
  191. /// </summary>
  192. /// <returns></returns>
  193. public IActionResult Edit(string right, int Id = 0)
  194. {
  195. ViewBag.RightInfo = RightInfo;
  196. ViewBag.right = right;
  197. UserRankWhite editData = db.UserRankWhite.FirstOrDefault(m => m.Id == Id) ?? new UserRankWhite();
  198. ViewBag.data = editData;
  199. Users user = db.Users.FirstOrDefault(m => m.Id == editData.UserId) ?? new Users();
  200. ViewBag.MakerCode = user.MakerCode;
  201. ViewBag.RealName = user.RealName;
  202. return View();
  203. }
  204. #endregion
  205. #region 修改创客预设职级
  206. /// <summary>
  207. /// 增加或修改创客预设职级信息
  208. /// </summary>
  209. /// <returns></returns>
  210. [HttpPost]
  211. public string Edit(UserRankWhite data, string MakerCode)
  212. {
  213. Dictionary<string, object> Fields = new Dictionary<string, object>();
  214. Fields.Add("Rank", data.Rank);
  215. Fields.Add("Status", data.Status);
  216. new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("UserRankWhite", Fields, data.Id);
  217. AddSysLog(data.Id.ToString(), "UserRankWhite", "update");
  218. db.SaveChanges();
  219. UserRankWhite white = db.UserRankWhite.FirstOrDefault(m => m.Id == data.Id);
  220. if (white != null)
  221. {
  222. UserRank rank = RedisDbconn.Instance.Get<UserRank>("UserRank:" + white.UserId);
  223. if (rank != null)
  224. {
  225. rank.WhiteRank = data.Rank;
  226. RedisDbconn.Instance.Set("UserRank:" + white.UserId, rank);
  227. }
  228. }
  229. return "success";
  230. }
  231. #endregion
  232. #region 删除创客预设职级信息
  233. /// <summary>
  234. /// 删除创客预设职级信息
  235. /// </summary>
  236. /// <returns></returns>
  237. public string Delete(string Id)
  238. {
  239. string[] idlist = Id.Split(new char[] { ',' });
  240. AddSysLog(Id, "UserRankWhite", "del");
  241. foreach (string subid in idlist)
  242. {
  243. int id = int.Parse(subid);
  244. Dictionary<string, object> Fields = new Dictionary<string, object>();
  245. Fields.Add("Status", -1);
  246. new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("UserRankWhite", Fields, id);
  247. }
  248. db.SaveChanges();
  249. return "success";
  250. }
  251. #endregion
  252. #region 开启
  253. /// <summary>
  254. /// 开启
  255. /// </summary>
  256. /// <returns></returns>
  257. public string Open(string Id)
  258. {
  259. string[] idlist = Id.Split(new char[] { ',' });
  260. AddSysLog(Id, "UserRankWhite", "open");
  261. foreach (string subid in idlist)
  262. {
  263. int id = int.Parse(subid);
  264. Dictionary<string, object> Fields = new Dictionary<string, object>();
  265. Fields.Add("Status", 1);
  266. new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("UserRankWhite", Fields, id);
  267. }
  268. db.SaveChanges();
  269. return "success";
  270. }
  271. #endregion
  272. #region 关闭
  273. /// <summary>
  274. /// 关闭
  275. /// </summary>
  276. /// <returns></returns>
  277. public string Close(string Id)
  278. {
  279. string[] idlist = Id.Split(new char[] { ',' });
  280. AddSysLog(Id, "UserRankWhite", "close");
  281. foreach (string subid in idlist)
  282. {
  283. int id = int.Parse(subid);
  284. Dictionary<string, object> Fields = new Dictionary<string, object>();
  285. Fields.Add("Status", 0);
  286. new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("UserRankWhite", Fields, id);
  287. }
  288. db.SaveChanges();
  289. return "success";
  290. }
  291. #endregion
  292. #region 排序
  293. /// <summary>
  294. /// 排序
  295. /// </summary>
  296. /// <param name="Id"></param>
  297. public string Sort(int Id, int Sort)
  298. {
  299. new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("UserRankWhite", Sort, Id);
  300. AddSysLog(Id.ToString(), "UserRankWhite", "sort");
  301. return "success";
  302. }
  303. #endregion
  304. #region 导入数据
  305. /// <summary>
  306. /// 导入数据
  307. /// </summary>
  308. /// <param name="ExcelData"></param>
  309. public string Import(string ExcelData)
  310. {
  311. ExcelData = HttpUtility.UrlDecode(ExcelData);
  312. JsonData list = JsonMapper.ToObject(ExcelData);
  313. for (int i = 1; i < list.Count; i++)
  314. {
  315. JsonData dr = list[i];
  316. db.UserRankWhite.Add(new UserRankWhite()
  317. {
  318. CreateDate = DateTime.Now,
  319. UpdateDate = DateTime.Now,
  320. });
  321. db.SaveChanges();
  322. }
  323. AddSysLog("0", "UserRankWhite", "Import");
  324. return "success";
  325. }
  326. #endregion
  327. #region 导出Excel
  328. /// <summary>
  329. /// 导出Excel
  330. /// </summary>
  331. /// <returns></returns>
  332. public JsonResult ExportExcel(UserRankWhite data, string MakerCode, string RealName, string StatusSelect, string TopMakerCode, string UpdateDateData)
  333. {
  334. Dictionary<string, string> Fields = new Dictionary<string, string>();
  335. string condition = " and Status>-1";
  336. //创客编号
  337. if (!string.IsNullOrEmpty(MakerCode))
  338. {
  339. condition += " and UserId in (select UserId from UserForMakerCode where MakerCode='" + MakerCode + "')";
  340. }
  341. //创客名称
  342. if (!string.IsNullOrEmpty(RealName))
  343. {
  344. condition += " and UserId in (select UserId from UserForRealName where RealName='" + RealName + "')";
  345. }
  346. //状态
  347. if (!string.IsNullOrEmpty(StatusSelect))
  348. {
  349. condition += " and Status=" + StatusSelect;
  350. }
  351. //顶级创客编号
  352. if (!string.IsNullOrEmpty(TopMakerCode))
  353. {
  354. var topUser = db.Users.FirstOrDefault(m => m.MakerCode == TopMakerCode) ?? new Users();
  355. var childIds = "";
  356. // if (!string.IsNullOrEmpty(topUser.ParentNav))
  357. // {
  358. // string[] ParentNavList = topUser.ParentNav.Trim(',').Replace(",,", ",").Split(',');
  359. // var topUserId = "," + topUser.Id + ",";
  360. // if (ParentNavList.Length > 1)
  361. // {
  362. // var childUser = db.Users.Where(m => m.ParentNav.Contains(topUserId)).ToList();
  363. // foreach (var item in childUser)
  364. // {
  365. // childIds = item.Id + ",";
  366. // }
  367. // childIds = childIds.TrimEnd(',');
  368. // }
  369. // }
  370. var topUserId = "," + topUser.Id + ",";
  371. var childUser = db.Users.Where(m => m.ParentNav.Contains(topUserId)).ToList();
  372. foreach (var item in childUser)
  373. {
  374. childIds += item.Id + ",";
  375. }
  376. childIds = childIds.TrimEnd(',');
  377. condition += " and UserId in (" + childIds + ")";
  378. }
  379. //到期时间
  380. if (!string.IsNullOrEmpty(UpdateDateData))
  381. {
  382. string[] datelist = UpdateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
  383. string start = datelist[0];
  384. string end = datelist[1];
  385. condition += " and UpdateDate>='" + start + " 00:00:00' and UpdateDate<='" + end + " 23:59:59'";
  386. }
  387. Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("UserRankWhite", Fields, "Id desc", "0", 1, 20000, condition, "UserId,Rank,Status,CreateDate", false);
  388. List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
  389. foreach (Dictionary<string, object> dic in diclist)
  390. {
  391. dic["Rank"] = RelationClass.GetUserLevelSetInfo(int.Parse(dic["Rank"].ToString()));
  392. int UserId = int.Parse(dic["UserId"].ToString());
  393. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  394. dic["MakerCode"] = user.MakerCode;
  395. dic["RealName"] = user.RealName;
  396. if (user.ParentUserId > 0)
  397. {
  398. Users puser = db.Users.FirstOrDefault(m => m.Id == user.ParentUserId) ?? new Users();
  399. dic["ParentMakerCode"] = puser.MakerCode;
  400. dic["ParentRealName"] = puser.RealName;
  401. }
  402. if (!string.IsNullOrEmpty(user.ParentNav))
  403. {
  404. int TopId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  405. Users tuser = db.Users.FirstOrDefault(m => m.Id == TopId) ?? new Users();
  406. dic["TopMakerCode"] = tuser.MakerCode;
  407. dic["TopRealName"] = tuser.RealName;
  408. }
  409. dic["Status"] = dic["Status"].ToString() == "1" ? "有效" : "无效";
  410. dic.Remove("UserId");
  411. }
  412. Dictionary<string, object> result = new Dictionary<string, object>();
  413. result.Add("Status", "1");
  414. result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
  415. result.Add("Obj", diclist);
  416. Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
  417. ReturnFields.Add("MakerCode", "创客编号");
  418. ReturnFields.Add("RealName", "创客姓名");
  419. ReturnFields.Add("ParentMakerCode", "上级创客编号");
  420. ReturnFields.Add("ParentRealName", "上级创客名称");
  421. ReturnFields.Add("TopMakerCode", "顶级创客编号");
  422. ReturnFields.Add("TopRealName", "顶级创客名称");
  423. ReturnFields.Add("Rank", "等级名称");
  424. ReturnFields.Add("Status", "有效状态");
  425. ReturnFields.Add("CreateDate", "创建时间");
  426. ReturnFields.Add("UpdateDate", "过期时间");
  427. result.Add("Fields", ReturnFields);
  428. AddSysLog("0", "UserRankWhite", "ExportExcel");
  429. return Json(result);
  430. }
  431. #endregion
  432. #region 快捷导出Excel
  433. public IActionResult QuickExportExcel(string right)
  434. {
  435. ViewBag.RightInfo = RightInfo;
  436. ViewBag.right = right;
  437. return View();
  438. }
  439. [HttpPost]
  440. public string QuickExportExcelDo(string MakerCode, string RealName, string StatusSelect, string TopMakerCode, string UpdateDateData)
  441. {
  442. string condition = " where 1=1 and a.Status>-1";
  443. //创客编号
  444. if (!string.IsNullOrEmpty(MakerCode))
  445. {
  446. condition += " and a.UserId in (select UserId from UserForMakerCode where MakerCode='" + MakerCode + "')";
  447. }
  448. //创客名称
  449. if (!string.IsNullOrEmpty(RealName))
  450. {
  451. condition += " and a.UserId in (select UserId from UserForRealName where RealName='" + RealName + "')";
  452. }
  453. //状态
  454. if (!string.IsNullOrEmpty(StatusSelect))
  455. {
  456. condition += " and a.Status=" + StatusSelect;
  457. }
  458. //顶级创客编号
  459. if (!string.IsNullOrEmpty(TopMakerCode))
  460. {
  461. var topUser = db.Users.FirstOrDefault(m => m.MakerCode == TopMakerCode) ?? new Users();
  462. var childIds = "";
  463. // if (!string.IsNullOrEmpty(topUser.ParentNav))
  464. // {
  465. // string[] ParentNavList = topUser.ParentNav.Trim(',').Replace(",,", ",").Split(',');
  466. // var topUserId = "," + topUser.Id + ",";
  467. // if (ParentNavList.Length > 1)
  468. // {
  469. // var childUser = db.Users.Where(m => m.ParentNav.Contains(topUserId)).ToList();
  470. // foreach (var item in childUser)
  471. // {
  472. // childIds = item.Id + ",";
  473. // }
  474. // childIds = childIds.TrimEnd(',');
  475. // }
  476. // }
  477. var topUserId = "," + topUser.Id + ",";
  478. var childUser = db.Users.Where(m => m.ParentNav.Contains(topUserId)).ToList();
  479. foreach (var item in childUser)
  480. {
  481. childIds += item.Id + ",";
  482. }
  483. childIds = childIds.TrimEnd(',');
  484. condition += " and a.UserId in (" + childIds + ")";
  485. }
  486. //到期时间
  487. if (!string.IsNullOrEmpty(UpdateDateData))
  488. {
  489. string[] datelist = UpdateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
  490. string start = datelist[0];
  491. string end = datelist[1];
  492. condition += " and a.UpdateDate>='" + start + " 00:00:00' and a.UpdateDate<='" + end + " 23:59:59'";
  493. }
  494. var Sql = "SELECT b.MakerCode '创客编号',b.RealName '创客姓名',b.UserLevel '创客职级',c.MakerCode '上级创客编号',c.RealName ' 上级创客姓名',d.MakerCode '顶级创客编号',d.RealName '顶级创客姓名',DATE_FORMAT(a.CreateDate,'%Y-%m-%d %H:%i:%s') '创建时间',DATE_FORMAT(a.UpdateDate,'%Y-%m-%d %H:%i:%s') '到期时间',a.Rank '预设职级' FROM UserRankWhite a LEFT JOIN Users b ON a.UserId=b.Id LEFT JOIN Users c ON b.ParentUserId=c.Id LEFT JOIN Users d ON SUBSTRING_INDEX(SUBSTRING_INDEX(b.ParentNav,',',4),',',-1)=d.Id" + condition;
  495. var sysAdmin = bsdb.SysAdmin.FirstOrDefault(m => m.AdminName == SysUserName && m.Status > -1);
  496. var FileName = "创客预设职级记录" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  497. string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + Sql + "\",\"FileName\":\"" + FileName + "\",\"MaxCount\":\"0\"}";
  498. RedisDbconn.Instance.AddList("ExportQueue", SendData);
  499. return "success";
  500. }
  501. #endregion
  502. }
  503. }