using Elight.Entity; using Elight.Logic; using Elight.Utility; using Elight.Utility.Code; using Elight.Utility.Extensions; using Elight.Utility.logs; using java.util; using jdk.nashorn.@internal.ir; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; using System.Drawing.Printing; using System.Security.AccessControl; using static com.sun.tools.@internal.xjc.reader.xmlschema.bindinfo.BIConversion; using User = Elight.Utility.User; namespace _24Hour.Controllers.Common { /// /// 通用接口 /// [Authorize] [ApiController] [Route("api/Common")] public class CommonController : Controller { #region Identity private readonly SqlSugarClient _db;//数据库 private readonly WriteSysLog _logs;//操作日志 private readonly WebSocketController _SocketCon;//WebSocket发送 App_Sys_UserModel _userdata = new App_Sys_UserModel();//当前用户 private readonly ILogger _logger;//日志 Result result = new Result(); public CommonController(ILogger logger, SqlSugarClient db, WriteSysLog logs, User user, WebSocketController SocketCon) { _logger = logger; _db = db; _logs = logs; _userdata = user.Userdata(); _SocketCon = SocketCon; } #endregion #region 最近待办--我的待办---我的预约 /// /// 系统---根据当前登录人单位获取所有预约信息 /// [HttpPost] [Route("queryreunit")] public async Task queryreunit(Commonpage Commondata) { try { var list = new List(); //获取工作台信息 var Stagingdata = await _db.Queryable().Where(q => q.IsDelete == 0).ToArrayAsync(); var Userdata = await _db.Queryable().Where(q => q.usertype == 0&&q.unitCode==_userdata.unitCode).ToArrayAsync(); //获取律师服务预约记录 var Lawyerdata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.unitId == _userdata.unitCode).ToListAsync(); Lawyerdata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); var userda=Userdata.Where(x => x.Id == q.receptionuser).FirstOrDefault(); list.Add(new { type = 0, Id = q.Id, title = da?.title, color = da?.color, icon = da?.icon, matter = q.matter, state = q.state, sttime = q.receptiontime, ettime = "", creationtime = q.creationtime, username = q.createusername, handleId = q.receptionuser, handleuser = userda?.name }); }); //获取远程会见预约记录 var Remotedata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.unitId == _userdata.unitCode).ToArrayAsync(); Remotedata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 1, Id = q.Id, title = da?.title, color = da?.color, icon = da?.icon, matter = q.name, sttime = q.sttime, ettime = q.ettime, state = q.state, creationtime = q.creationtime, username = q.createusername, handleId = q.meetwitId, handleuser = q.meetwitname }); }); //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.unitId == _userdata.unitCode).ToArrayAsync(); Receptiondata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 2, Id = q.Id, title = da?.title, color = da?.color, icon = da?.icon, matter = q.matter, sttime = q.sttime, ettime = q.ettime, state = q.state, creationtime = q.creationtime, username = q.createusername, handleId = q.meetwitId, handleuser = q.meetwitname }); }); list = list.Skip(Commondata.PageSize * (Commondata.PageIndex - 1)).Take(Commondata.PageSize).ToList(); result.IsSucceed = true; result.result = list.ToList().OrderByDescending(q => q.creationtime).ToList(); } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; } _logs.WriteSysLogadd("所有预约信息", "所有预约信息", result, _db); return result; } /// /// 系统---根据预约Id 查询预约信息 /// /// 预约Id /// 类型 /// [HttpGet] [Route("queryreunitId")] public async Task queryreunitId(string? Id,int type) { try { switch (type) { case 0: //获取律师服务预约记录 var list = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.Id == Id).ToListAsync(); result.result = list.FirstOrDefault(); break; case 1: //获取远程会见预约记录 var Remotedata = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.Id == Id).ToListAsync(); result.result = Remotedata.FirstOrDefault(); break; case 2: //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.Id == Id).ToListAsync(); result.result = Receptiondata.FirstOrDefault(); break; } result.IsSucceed = true; } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; } _logs.WriteSysLogadd("所有预约信息", "通过Id查询预约信息", result, _db); return result; } /// /// app---根据当前登录人获取所有预约信息--type类型为:0律师服务,1远程会见,2远程接待 /// [HttpPost] [Route("queryreservation")] public async Task queryreservation(Commonpage Commondata) { try { var list = new List(); //获取工作台信息 var Stagingdata = await _db.Queryable().Where(q => q.IsDelete == 0).ToArrayAsync(); var Userdata = await _db.Queryable().Where(q => q.IsDeleted == 0&&q.usertype==0).ToArrayAsync(); //获取律师服务预约记录 var Lawyerdata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.createuserId == _userdata.Id).ToArrayAsync(); Lawyerdata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); var userda=Userdata.Where(x => x.Id == q.receptionuser).FirstOrDefault(); list.Add(new { type = 0, Id = q.Id, daId = da?.Id, title = da?.title, color = da?.color, icon = da?.icon, name = q.name, phone = q.phone, matter = q.matter,//事由 objectstr = "",//访问对象(案件名称) state = q.state, reason = q.reason, sttime = q.receptiontime, ettime = "", creationtime = q.creationtime, receptionuser = q.receptionuser, username = userda?.name, notes = q.notes }); }); //获取远程会见预约记录 var Remotedata = await _db.Queryable() .WhereIF(Commondata.state != null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.createuserId == _userdata.Id).ToArrayAsync(); Remotedata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 1, Id = q.Id, daId = da?.Id, title = da?.title, color = da?.color, icon = da?.icon, name = q.name, phone = q.phone, matter = "",//事由 objectstr = "",//访问对象(案件名称) Code=q.Code, state = q.state,//状态 reason = q.reason,//原因 sttime = q.sttime, ettime = q.ettime, creationtime = q.creationtime, receptionuser = q.meetwitId, username = q.meetwitname, notes=q.notes, appurl=q.appurl }); }); //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.createuserId == _userdata.Id).ToArrayAsync(); Receptiondata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 2, Id = q.Id, daId = da?.Id, title = da?.title, color = da?.color, icon = da?.icon, name ="", phone = q.phone, matter = q.matter,//事由 objectstr = "",//访问对象(案件名称) Code = "", state = q.state,//状态 reason = q.reason,//原因 sttime = q.sttime, ettime = q.ettime, creationtime = q.creationtime, receptionuser = q.meetwitId, username = q.meetwitname, notes = q.notes, appurl = "" }); }); //分页查询--如有预约类型--reservationId可筛选预约类型,预约信息Id--可筛选预约信息 list = list.WhereIF(Commondata.reservationId.NotNull(),x=>x.daId== Commondata.reservationId) .WhereIF(Commondata.Id.NotNull(), x => x.Id == Commondata.Id) .Skip(Commondata.PageSize * (Commondata.PageIndex - 1)).Take(Commondata.PageSize).ToList(); result.IsSucceed = true; result.result = list.ToList().OrderByDescending(q => q.creationtime).ToList(); } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; } _logs.WriteSysLogadd("所有预约信息", "所有预约信息", result, _db); return result; } /// /// app---根据登录人获取所有预约办理信息 /// [HttpPost] [Route("queryreservationjc")] public async Task queryreservationjc(Commonpage Commondata) { try { var list = new List(); //获取工作台信息 var Stagingdata = await _db.Queryable().Where(q => q.IsDelete == 0).ToArrayAsync(); var Userdata = await _db.Queryable().Where(q => q.IsDeleted == 0 && q.usertype == 0).ToArrayAsync(); //获取律师服务预约记录 var Lawyerdata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.receptionuser == _userdata.Id).ToArrayAsync(); Lawyerdata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); var userda = Userdata.Where(x => x.Id == q.receptionuser).FirstOrDefault(); list.Add(new { type = 0, Id = q.Id, title = da?.title, color = da?.color, icon = da?.icon, name = q.name, phone = q.phone, matter = q.matter,//事由 objectstr = "",//访问对象(案件名称) state = q.state, reason = q.reason, sttime = q.receptiontime, ettime = "", creationtime = q.creationtime, receptionuser = q.receptionuser, username = userda?.name, notes = q.notes }); }); //获取远程会见预约记录 var Remotedata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.meetwitId == _userdata.Id).ToArrayAsync(); Remotedata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 1, Id = q.Id, title = da?.title, color = da?.color, icon = da?.icon, name = q.name, phone = q.phone, matter = "",//事由 objectstr = "",//访问对象(案件名称) Code = q.Code, state = q.state,//状态 reason = q.reason,//原因 sttime = q.sttime, ettime = q.ettime, creationtime = q.creationtime, receptionuser = q.meetwitId, username = q.meetwitname, notes = q.notes, appurl = q.appurl }); }); //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.meetwitId == _userdata.Id).ToArrayAsync(); Receptiondata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 2, Id = q.Id, title = da?.title, color = da?.color, icon = da?.icon, name = "", phone = q.phone, matter = q.matter,//事由 objectstr = "",//访问对象(案件名称) Code = "", state = q.state,//状态 reason = q.reason,//原因 sttime = q.sttime, ettime = q.ettime, creationtime = q.creationtime, receptionuser = q.meetwitId, username = q.meetwitname, notes = q.notes, appurl = "" }); }); //获取听证服务预约记录 //var Hearingdata = await _db.Queryable() // .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) // .Where(q => q.IsDeleted == 0 && q.receptionuser == _userdata.Id).ToArrayAsync(); //Hearingdata.ToList().ForEach(q => //{ // var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); // list.Add(new // { // Id = q.Id, // name = da?.title, // color = da?.color, // icon = da?.icon, // matter = q.casename, // sttime = q.reservationtime, // ettime = "", // state = q.state, // creationtime = q.creationtime, // username = q.createusername // }); //}); list = list.WhereIF(Commondata.matter.NotNull(), q => q.matter.Contains(Commondata.matter) || q.objectstr.Contains(Commondata.matter)).Skip(Commondata.PageSize * (Commondata.PageIndex - 1)).Take(Commondata.PageSize).ToList(); result.IsSucceed = true; result.result = list.ToList().OrderByDescending(q => q.creationtime).ToList(); } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; } _logs.WriteSysLogadd("所有预约信息", "所有预约信息", result, _db); return result; } /// /// 根据Id分配办理人 /// /// 预约信息Id /// 办理人Id /// 办理人 /// [HttpGet] [Route("Updateuser")] public async Task Updateuser(string? Id, string? userId,string? username) { try { //律师服务 var Lawyerbol = await _db.Queryable().Where(q => q.Id == Id).ToListAsync(); if (Lawyerbol.Count() > 0) { Lawyerbol.FirstOrDefault().receptionuser = userId; _db.BeginTran(); var num = await _db.Updateable(Lawyerbol.FirstOrDefault()).UpdateColumns(it => new { it.receptionuser }).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { _SocketCon.system(userId); result.IsSucceed = true; result.result = "修改成功"; } } //听证服务 var Hearingbol = await _db.Queryable().Where(q => q.Id == Id).ToListAsync(); if (Hearingbol.Count() > 0) { Hearingbol.FirstOrDefault().receptionuser = userId; _db.BeginTran(); var num = await _db.Updateable(Hearingbol.FirstOrDefault()).UpdateColumns(it => new { it.receptionuser }).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { result.IsSucceed = true; result.result = "修改成功"; } } //远程会见 var RemoteModelbol = await _db.Queryable().Where(q => q.Id == Id).ToListAsync(); if (RemoteModelbol.Count() > 0) { RemoteModelbol.FirstOrDefault().meetwitId = userId; RemoteModelbol.FirstOrDefault().meetwitname = username; _db.BeginTran(); var num = await _db.Updateable(RemoteModelbol.FirstOrDefault()).UpdateColumns(it => new { it.meetwitId, it.meetwitname }).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { result.IsSucceed = true; result.result = "修改成功"; } } //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .Where(q => q.Id== Id).ToArrayAsync(); if (Receptiondata.Count() > 0) { Receptiondata.FirstOrDefault().meetwitId = userId; Receptiondata.FirstOrDefault().meetwitname = username; _db.BeginTran(); var num = await _db.Updateable(Receptiondata.FirstOrDefault()).UpdateColumns(it => new { it.meetwitId, it.meetwitname }).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { result.IsSucceed = true; result.result = "修改成功"; } } } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; LogService.WriteLog(ex, "修改律师服务预约办理人"); } _logs.WriteSysLogadd("律师服务", "修改律师服务预约办理人", result, _db); return result; } #endregion #region 自主查询 /// /// app---根据当前登录人查询预约信息--自主查询 /// [HttpPost] [Route("querylist")] public async Task querylist(Commonpage Commondata) { try { var list = new List(); //获取工作台信息 var Stagingdata = await _db.Queryable().Where(q => q.IsDelete == 0).ToArrayAsync(); //获取律师服务预约记录 var Lawyerdata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.createuserId == _userdata.Id).ToArrayAsync(); Lawyerdata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { Id = q.Id, title = da?.title, path = da?.path, color = da?.color, icon = da?.icon, objectstr = q.objectstr, matter = q.matter, state = q.state, sttime = q.receptiontime, ettime = "", creationtime = q.creationtime }); }); //获取远程会见预约记录 var Remotedata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.createuserId == _userdata.Id).ToArrayAsync(); Remotedata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { Id = q.Id, title = da?.title, path = da?.path, color = da?.color, icon = da?.icon, matter = q.name, objectstr = "", sttime = q.sttime, ettime = q.ettime, state = q.state, creationtime = q.creationtime }); }); //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .WhereIF(Commondata.state!=null, x => x.state == Commondata.state) .Where(q => q.IsDeleted == 0 && q.createuserId == _userdata.Id).ToArrayAsync(); Receptiondata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { Id = q.Id, title = da?.title, path = da?.path, color = da?.color, icon = da?.icon, matter = q.matter, objectstr = "", sttime = q.sttime, ettime = q.ettime, state = q.state, creationtime = q.creationtime }); }); //查询 list=list.ToList().WhereIF(Commondata.matter.NotNull(), q => q.matter.Contains(Commondata.matter)|| q.objectstr.Contains(Commondata.matter)).ToList(); result.IsSucceed = true; result.result = list.ToList().OrderByDescending(q => q.creationtime).ToList(); } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; } _logs.WriteSysLogadd("所有预约信息", "所有预约信息", result, _db); return result; } #endregion #region 数据统计 /// /// 预约数据统计---GroupBy预约类型 ---datetme时间 ---satseGroupBy预约状态 /// [HttpPost] [Route("querystatistics")] public async Task querystatistics(Commonpage Commondata) { try { var list = new List(); //获取工作台信息 var Stagingdata = await _db.Queryable().Where(q => q.IsDelete == 0).ToArrayAsync(); var Userdata = await _db.Queryable().Where(q => q.usertype == 0).ToArrayAsync(); //获取律师服务预约记录 var Lawyerdata = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.unitId == _userdata.unitCode).ToArrayAsync(); Lawyerdata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); var userda = Userdata.Where(x => x.Id == q.receptionuser).FirstOrDefault(); list.Add(new { type = 0, Id = q.Id, daId = da?.Id, title = da?.title, color = da?.color, icon = da?.icon, name = q.name, phone = q.phone, matter = q.matter,//事由 objectstr = "",//访问对象(案件名称) statetype = $"{q.state}", reason = q.reason, sttime = q.receptiontime, ettime = "", creationtime = q.creationtime, receptionuser = q.receptionuser, username = userda?.name, notes = q.notes }); }); //获取远程会见预约记录 var Remotedata = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.unitId == _userdata.unitCode).ToArrayAsync(); Remotedata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 1, Id = q.Id, daId = da?.Id, title = da?.title, color = da?.color, icon = da?.icon, name = q.name, phone = q.phone, matter = "",//事由 objectstr = "",//访问对象(案件名称) Code = q.Code, statetype = $"{q.state}",//状态 reason = q.reason,//原因 sttime = q.sttime, ettime = q.ettime, creationtime = q.creationtime, receptionuser = q.meetwitId, username = q.meetwitname, notes = q.notes, appurl = q.appurl }); }); //获取远程接待预约记录 var Receptiondata = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.unitId == _userdata.unitCode).ToArrayAsync(); Receptiondata.ToList().ForEach(q => { var da = Stagingdata.Where(x => x.Id == q.reservationId).FirstOrDefault(); list.Add(new { type = 2, Id = q.Id, daId = da?.Id, title = da?.title, color = da?.color, icon = da?.icon, name = "", phone = q.phone, matter = q.matter,//事由 objectstr = "",//访问对象(案件名称) Code = "", statetype = $"{q.state}",//状态 reason = q.reason,//原因 sttime = q.sttime, ettime = q.ettime, creationtime = q.creationtime, receptionuser = q.meetwitId, username = q.meetwitname, notes = q.notes, appurl = "" }); }); list = list .WhereIF(Commondata.StartTime != null && Commondata.EndTime != null, q => q.sttime >= Commondata.StartTime && q.sttime < Commondata.EndTime.Value.AddDays(1)).ToList(); //预约类型分组统计 var GroupBy=list.ToList().GroupBy(q => new { q.daId, q.title }).Select(x => new { name = x.Key.title, value = x.ToList().Count()}); //日期分组统计 var datetme = list.ToList().GroupBy(q => DateTime.Parse($"{q.creationtime}").ToString("yyyy-MM-dd")).Select(x => new { time = x.Key, value = x.ToList().Count() }); //预约状态分组 var satselist = list.ToList().GroupBy(q => $"{q.statetype}").Select(x => new{ statetype = x.Key, value = x.ToList().Count() }).ToList(); var satseGroupBy = new List(); string[] strnum = new string[] { "0", "1", "2", "3" }; string[] str = new string[] { "待办理", "已受理", "拒绝", "结束" }; for (int i = 0; i < strnum.Length; i++) { var da = satselist.Where(q => q.statetype == strnum[i]).FirstOrDefault(); if (da != null) { satseGroupBy.Add(new { name = str[i], value = da.value }); }else { satseGroupBy.Add(new { name = str[i], value = 0 }); } } result.IsSucceed = true; result.result = new { GroupBy, datetme, satseGroupBy }; } catch (System.Exception ex) { _db.RollbackTran(); result.IsSucceed = false; result.Message = ex.Message; } _logs.WriteSysLogadd("数据统计", "统计信息", result, _db); return result; } #endregion #region 文件上传 /// /// 文件上传--附件 /// /// [HttpPost] [Route("Upload_Files")] public async Task Upload_Files(IFormFile file) { Result outParm = new Result(); return await Task.Run(() => { if (file.Length <= 0) { outParm.IsSucceed = false; outParm.Message = "请上传文件!"; return Json(outParm); } try { var size = Request.Form.Files.Sum(f => f.Length); IFormFile file = Request.Form.Files.FirstOrDefault(); var fname = $@"{file.FileName}"; var hzname = $"{Path.GetExtension(fname)}"; var _path = "/CaseFile/video"; var dic = Path.Combine(Environment.CurrentDirectory, "wwwroot"); if (!string.IsNullOrEmpty(_path)) dic += _path; if (!System.IO.Directory.Exists(dic)) Directory.CreateDirectory(dic); var filename = $"{DateTime.Now:yyyyMMddHHmmssfff}{Path.GetExtension(fname)}"; var filepath = Path.Combine(_path, $"{filename}"); var path = Path.Combine(dic, $"{filename}"); using (var stream = new FileStream(path, FileMode.OpenOrCreate)) { file.CopyToAsync(stream).Wait(); } var __path = $"{_path}/{filename}"; outParm.IsSucceed = true; outParm.result = new { hzname = hzname, url = __path, tile = Path.GetFileNameWithoutExtension(file.FileName), size, DataPath = path, filePath = dic }; } catch (Exception e) { outParm.IsSucceed = false; outParm.Message = $"文件上传失败!{e.Message}"; } return Json(outParm); }); } #endregion } }