123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Linq.Expressions;
- using System.Transactions;
- using Bowin.Common.Linq;
- using Bowin.Common.Data;
- using Bowin.Common.JSON;
- using Bowin.Common.Linq.Entity;
- using EMIS.Entities;
- using EMIS.ViewModel;
- using EMIS.ViewModel.EvaluationManage.StudentEvaluation;
- using EMIS.DataLogic.EvaluationManage.StudentEvaluation;
- using EMIS.CommonLogic.EvaluationManage.EvaluationSetting;
- using EMIS.CommonLogic.EvaluationManage.EvaluationManage;
- using EMIS.CommonLogic.SystemServices;
- namespace EMIS.CommonLogic.StudentWeb.Evaluation
- {
- public class StudentEvaluationEnterServices : BaseServices, IStudentEvaluationEnterServices
- {
- public EvaluationStudentDAL EvaluationStudentDAL { get; set; }
- public Lazy<IEvaluationControlServices> EvaluationControlServices { get; set; }
- public Lazy<IEvaluationStudentScoreServices> EvaluationStudentScoreServices { get; set; }
- public Lazy<IParameterServices> ParameterServices { get; set; }
- /// <summary>
- /// 查询对应的学生评价信息View
- /// </summary>
- /// <param name="configuretView"></param>
- /// <param name="userID"></param>
- /// <param name="pageIndex"></param>
- /// <param name="pageSize"></param>
- /// <returns></returns>
- public IGridResultSet<EvaluationStudentView> GetStudentEvaluationEnterViewGrid(ConfiguretView configuretView, Guid? userID, int pageIndex, int pageSize)
- {
- Expression<Func<CF_Student, bool>> expStudent = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expStudent = expStudent.And(x => x.UserID == userID);
- Expression<Func<EM_EvaluationStudentSetting, bool>> expEvaluationStudentSetting = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.OpenState == true);
- var query = EvaluationStudentDAL.GetStudentEvaluationEnterViewQueryable(expStudent, expEvaluationStudentSetting);
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- query = query.Where(x => false);
- }
- else
- {
- query = query.Where(x => x.SchoolyearValue <= evaluationControlView.SchoolyearValue);
- query = query.Where(x => x.StartTime <= DateTime.Now);
- query = query.Where(x => x.EndTime >= DateTime.Now);
- query = query.Where(x => x.Number > x.Numbered);
- }
- //查询条件
- if (!string.IsNullOrEmpty(configuretView.ConditionValue))
- {
- query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
- }
- return query.OrderBy(x => x.SchoolyearValue).ThenBy(x => x.CourseCode.Length).ThenBy(x => x.CourseCode).ThenBy(x => x.CourseTypeID).ThenBy(x => x.Numbered).ToGridResultSet<EvaluationStudentView>(pageIndex, pageSize);
- }
- /// <summary>
- /// 查询对应的学生评价信息List
- /// </summary>
- /// <param name="configuretView"></param>
- /// <param name="userID"></param>
- /// <returns></returns>
- public IList<EvaluationStudentView> GetStudentEvaluationEnterViewList(ConfiguretView configuretView, Guid? userID)
- {
- Expression<Func<CF_Student, bool>> expStudent = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expStudent = expStudent.And(x => x.UserID == userID);
- Expression<Func<EM_EvaluationStudentSetting, bool>> expEvaluationStudentSetting = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.OpenState == true);
- var query = EvaluationStudentDAL.GetStudentEvaluationEnterViewQueryable(expStudent, expEvaluationStudentSetting);
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- query = query.Where(x => false);
- }
- else
- {
- query = query.Where(x => x.SchoolyearValue <= evaluationControlView.SchoolyearValue);
- query = query.Where(x => x.StartTime <= DateTime.Now);
- query = query.Where(x => x.EndTime >= DateTime.Now);
- query = query.Where(x => x.Number > x.Numbered);
- }
- //查询条件
- if (!string.IsNullOrEmpty(configuretView.ConditionValue))
- {
- query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
- }
- return query.OrderBy(x => x.SchoolyearValue).ThenBy(x => x.CourseCode.Length).ThenBy(x => x.CourseCode).ThenBy(x => x.CourseTypeID).ThenBy(x => x.Numbered).ToList();
- }
- /// <summary>
- /// 查询对应的学生未评价信息List
- /// </summary>
- /// <param name="userID"></param>
- /// <returns></returns>
- public IList<EvaluationStudentView> GetStudentNoEvaluationViewList(Guid? userID)
- {
- Expression<Func<CF_Student, bool>> expStudent = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expStudent = expStudent.And(x => x.UserID == userID);
- Expression<Func<EM_EvaluationStudentSetting, bool>> expEvaluationStudentSetting = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.OpenState == true);
- var query = EvaluationStudentDAL.GetStudentEvaluationEnterViewQueryable(expStudent, expEvaluationStudentSetting);
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- query = query.Where(x => false);
- }
- else
- {
- query = query.Where(x => x.SchoolyearValue <= evaluationControlView.SchoolyearValue);
- query = query.Where(x => x.StartTime <= DateTime.Now);
- query = query.Where(x => x.EndTime >= DateTime.Now);
- query = query.Where(x => x.Numbered == 0);
- query = query.Where(x => x.Number > 0);
- }
- return query.OrderBy(x => x.SchoolyearValue).ThenBy(x => x.CourseCode.Length).ThenBy(x => x.CourseCode).ThenBy(x => x.CourseTypeID).ThenBy(x => x.Numbered).ToList();
- }
- /// <summary>
- /// 查询对应的学生评价信息EvaluationStudentView
- /// </summary>
- /// <param name="userID"></param>
- /// <param name="evaluationStudentSettingID"></param>
- /// <returns></returns>
- public EvaluationStudentView GetStudentEvaluationEnterView(Guid? userID, Guid? evaluationStudentSettingID)
- {
- try
- {
- Expression<Func<CF_Student, bool>> expStudent = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expStudent = expStudent.And(x => x.UserID == userID);
- Expression<Func<EM_EvaluationStudentSetting, bool>> expEvaluationStudentSetting = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.OpenState == true);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.EvaluationStudentSettingID == evaluationStudentSettingID);
- var query = EvaluationStudentDAL.GetStudentEvaluationEnterViewQueryable(expStudent, expEvaluationStudentSetting).SingleOrDefault();
- return query;
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 编辑
- /// </summary>
- /// <param name="evaluationStudentView"></param>
- public void StudentEvaluationEnterEdit(EvaluationStudentView evaluationStudentView)
- {
- try
- {
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- throw new Exception("当前教学质量评价活动对应的评价学年学期已结束。");
- }
- else
- {
- if (evaluationStudentView.SchoolyearValue > evaluationControlView.SchoolyearValue)
- {
- throw new Exception("当前教学质量评价活动对应的评价学年学期已结束。");
- }
- }
- var evaluationParticipateType = EvaluationStudentDAL.EvaluationParticipateTypeRepository.GetList(x => x.ParticipateTypeID == (int)EM_ParticipateType.Student).SingleOrDefault();
- if (evaluationParticipateType == null)
- {
- throw new Exception("当前教学质量评价活动对应的评价时间已结束。");
- }
- else
- {
- if (evaluationParticipateType.StartTime == null || evaluationParticipateType.EndTime == null)
- {
- throw new Exception("当前教学质量评价活动对应的评价时间未开始。");
- }
- if (DateTime.Now < evaluationParticipateType.StartTime)
- {
- throw new Exception("当前教学质量评价活动对应的评价时间未开始。");
- }
- if (DateTime.Now > evaluationParticipateType.EndTime)
- {
- throw new Exception("当前教学质量评价活动对应的评价时间已结束。");
- }
- }
- if (((evaluationStudentView.Numbered ?? 0) + 1) > (evaluationParticipateType.Number ?? 0))
- {
- throw new Exception("当前教学质量评价活动对应的已评次数已评完。");
- }
- if (!evaluationStudentView.EvaluationStudentSettingID.HasValue || evaluationStudentView.EvaluationStudentSettingID == Guid.Empty)
- {
- throw new Exception("评价超时,请刷新页面再次尝试。");
- }
- Expression<Func<EM_EvaluationStudentSetting, bool>> expEvaluationStudentSetting = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.OpenState == true);
- expEvaluationStudentSetting = expEvaluationStudentSetting.And(x => x.EvaluationStudentSettingID == evaluationStudentView.EvaluationStudentSettingID);
- var evaluationStudentSetting = EvaluationStudentDAL.EvaluationStudentSettingRepository.GetList(expEvaluationStudentSetting, (x => x.CF_Student)).SingleOrDefault();
- if (evaluationStudentSetting == null)
- {
- throw new Exception("当前教学质量评价活动已关闭,请刷新页面再次尝试。");
- }
- else
- {
- var evaluationStudentSettingStudent = evaluationStudentSetting.CF_Student.Where(x => x.UserID == evaluationStudentView.UserID).SingleOrDefault();
- if (evaluationStudentSettingStudent == null)
- {
- throw new Exception("当前教学质量评价活动已关闭,请刷新页面再次尝试。");
- }
- }
- Expression<Func<EM_EvaluationStudent, bool>> expEvaluationStudent = (x => x.EvaluationStudentID != evaluationStudentView.EvaluationStudentID);
- expEvaluationStudent = expEvaluationStudent.And(x => x.UserID == evaluationStudentView.UserID);
- expEvaluationStudent = expEvaluationStudent.And(x => x.EvaluationStudentSettingID == evaluationStudentView.EvaluationStudentSettingID);
- var evaluationStudentVerify = EvaluationStudentDAL.EvaluationStudentRepository.GetList(expEvaluationStudent).SingleOrDefault();
- if (evaluationStudentVerify == null)
- {
- Expression<Func<EM_EvaluationStudentScore, bool>> expEvaluationStudentScore = (x => x.SchoolyearID == evaluationStudentView.SchoolyearID);
- expEvaluationStudentScore = expEvaluationStudentScore.And(x => x.UserID == evaluationStudentView.UserID);
- expEvaluationStudentScore = expEvaluationStudentScore.And(x => x.CoursematerialID == evaluationStudentView.CoursematerialID);
- expEvaluationStudentScore = expEvaluationStudentScore.And(x => x.DepartmentID == evaluationStudentView.DepartmentID);
- var evaluationStudentScore = EvaluationStudentDAL.EvaluationStudentScoreRepository.GetList(expEvaluationStudentScore).SingleOrDefault();
- var isEvaluationControlForSchoolyear = ParameterServices.Value.GetParameterValue<bool>(CF_ParameterType.IsEvaluationControlForSchoolyear);
- if (evaluationStudentScore == null)
- {
- if (evaluationStudentView.SchoolyearValue < evaluationControlView.SchoolyearValue)
- {
- evaluationStudentView.IsValidity = isEvaluationControlForSchoolyear ?? false;
- }
- else
- {
- evaluationStudentView.IsValidity = true;
- }
- }
- else
- {
- var startStatusID = EvaluationStudentScoreServices.Value.GetStartStatus();
- if (startStatusID == null)
- {
- throw new Exception("评价数据有误,请联系辅导员或教学评价负责老师。");
- }
- if (evaluationStudentScore.ApprovalStatus == startStatusID)
- {
- if (evaluationStudentView.SchoolyearValue < evaluationControlView.SchoolyearValue)
- {
- evaluationStudentView.IsValidity = isEvaluationControlForSchoolyear ?? false;
- }
- else
- {
- evaluationStudentView.IsValidity = true;
- }
- }
- else
- {
- evaluationStudentView.IsValidity = false;
- }
- }
- var evaluationProjectJsonDataList = evaluationStudentView.JsonDataStr.ToString().JsonToObject<List<EvaluationStudentDetailView>>();
- if (evaluationProjectJsonDataList == null || evaluationProjectJsonDataList.Count() < 0)
- {
- throw new Exception("当前教学质量评价活动,评价项目中对应的评分标准未评分,请进行评分。");
- }
- var evaluationStudentInList = new List<EM_EvaluationStudent>();
- var evaluationStudentUpList = new List<EM_EvaluationStudent>();
- var evaluationStudentDetailInList = new List<EM_EvaluationStudentDetail>();
- var evaluationStudentIDDelList = new List<Guid?>();
- if (evaluationStudentView.EvaluationStudentID != Guid.Empty)
- {
- var evaluationStudent = EvaluationStudentDAL.EvaluationStudentRepository.GetList(x => x.EvaluationStudentID == evaluationStudentView.EvaluationStudentID).SingleOrDefault();
- if (evaluationStudent == null)
- {
- throw new Exception("评价超时,请刷新页面再次尝试。");
- }
- else
- {
- //表示修改
- if (evaluationStudentView.IsValidity)
- {
- evaluationStudent.Numbered = (evaluationStudentView.Numbered ?? 0) + 1;
- evaluationStudent.IsValidity = evaluationStudentView.IsValidity;
- evaluationStudent.TotalScore = evaluationStudentView.TotalScore;
- evaluationStudent.Advice = evaluationStudentView.Advice;
- SetModifyStatus(evaluationStudent);
- evaluationStudentUpList.Add(evaluationStudent);
- evaluationStudentIDDelList.Add(evaluationStudent.EvaluationStudentID);
- foreach (var evaluationProjectJsonData in evaluationProjectJsonDataList)
- {
- var newEvaluationStudentDetail = new EM_EvaluationStudentDetail();
- newEvaluationStudentDetail.EvaluationStudentDetailID = Guid.NewGuid();
- newEvaluationStudentDetail.EvaluationStudentID = evaluationStudent.EvaluationStudentID;
- newEvaluationStudentDetail.EvaluationProjectID = evaluationProjectJsonData.EvaluationProjectID;
- newEvaluationStudentDetail.Score = evaluationProjectJsonData.Score;
- newEvaluationStudentDetail.Remark = null;
- SetNewStatus(newEvaluationStudentDetail);
- evaluationStudentDetailInList.Add(newEvaluationStudentDetail);
- }
- }
- else
- {
- throw new Exception("当前教学质量评价活动已结束。");
- }
- }
- }
- else
- {
- //表示新增
- var newEvaluationStudent = new EM_EvaluationStudent();
- newEvaluationStudent.EvaluationStudentID = Guid.NewGuid();
- newEvaluationStudent.UserID = evaluationStudentView.UserID;
- newEvaluationStudent.EvaluationStudentSettingID = evaluationStudentView.EvaluationStudentSettingID;
- newEvaluationStudent.Numbered = (evaluationStudentView.Numbered ?? 0) + 1;
- newEvaluationStudent.IsValidity = evaluationStudentView.IsValidity;
- newEvaluationStudent.TotalScore = evaluationStudentView.TotalScore;
- newEvaluationStudent.Advice = evaluationStudentView.Advice;
- newEvaluationStudent.Remark = evaluationStudentView.Remark;
- SetNewStatus(newEvaluationStudent);
- evaluationStudentInList.Add(newEvaluationStudent);
- foreach (var evaluationProjectJsonData in evaluationProjectJsonDataList)
- {
- var newEvaluationStudentDetail = new EM_EvaluationStudentDetail();
- newEvaluationStudentDetail.EvaluationStudentDetailID = Guid.NewGuid();
- newEvaluationStudentDetail.EvaluationStudentID = newEvaluationStudent.EvaluationStudentID;
- newEvaluationStudentDetail.EvaluationProjectID = evaluationProjectJsonData.EvaluationProjectID;
- newEvaluationStudentDetail.Score = evaluationProjectJsonData.Score;
- newEvaluationStudentDetail.Remark = null;
- SetNewStatus(newEvaluationStudentDetail);
- evaluationStudentDetailInList.Add(newEvaluationStudentDetail);
- }
- }
- using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
- {
- UnitOfWork.Delete<EM_EvaluationStudentDetail>(x => evaluationStudentIDDelList.Contains(x.EvaluationStudentID));
- UnitOfWork.BulkInsert(evaluationStudentInList);
- UnitOfWork.BulkInsert(evaluationStudentDetailInList);
- if (evaluationStudentUpList != null && evaluationStudentUpList.Count() > 0)
- {
- UnitOfWork.BatchUpdate(evaluationStudentUpList);
- }
- ts.Complete();
- }
- }
- else
- {
- throw new Exception("同学,您当前参与的教学质量评价活动,评价信息已存在,如需再次评价,请刷新页面再次尝试,感谢您的参与。");
- }
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 查询对应的学评学生明细信息List
- /// </summary>
- /// <param name="evaluationStudentID"></param>
- /// <returns></returns>
- public IList<EM_EvaluationStudentDetail> GetEvaluationStudentDetailList(Guid? evaluationStudentID)
- {
- Expression<Func<EM_EvaluationStudentDetail, bool>> exp = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
- exp = exp.And(x => x.EvaluationStudentID == evaluationStudentID);
- var query = EvaluationStudentDAL.EvaluationStudentDetailRepository.GetList(exp);
- return query.OrderBy(x => x.EvaluationStudentID).ThenBy(x => x.Score).ToList();
- }
- /// <summary>
- /// 教学评价登录控制
- /// </summary>
- /// <param name="userID"></param>
- /// <returns></returns>
- public bool LoginControl(Guid? userID)
- {
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- return true;
- }
- else
- {
- if (evaluationControlView.IsLoginLock)
- {
- var evaluationStudentViewList = this.GetStudentNoEvaluationViewList(userID).ToList();
- if (evaluationStudentViewList == null || evaluationStudentViewList.Count() <= 0)
- {
- return true;
- }
- else
- {
- if (evaluationStudentViewList.Count() <= (evaluationControlView.NoNumber ?? 0))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- return true;
- }
- }
- }
- /// <summary>
- /// 教学评价网上选课控制
- /// </summary>
- /// <param name="userID"></param>
- /// <returns></returns>
- public bool SelectCourseControl(Guid? userID)
- {
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- return true;
- }
- else
- {
- if (evaluationControlView.IsSelectCourseLock)
- {
- var evaluationStudentViewList = this.GetStudentNoEvaluationViewList(userID).ToList();
- if (evaluationStudentViewList == null || evaluationStudentViewList.Count() <= 0)
- {
- return true;
- }
- else
- {
- if (evaluationStudentViewList.Count() <= (evaluationControlView.NoNumber ?? 0))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- return true;
- }
- }
- }
- /// <summary>
- /// 教学评价考试报名控制
- /// </summary>
- /// <param name="userID"></param>
- /// <returns></returns>
- public bool ExaminationApplyControl(Guid? userID)
- {
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- return true;
- }
- else
- {
- if (evaluationControlView.IsExaminationApplyLock)
- {
- var evaluationStudentViewList = this.GetStudentNoEvaluationViewList(userID).ToList();
- if (evaluationStudentViewList == null || evaluationStudentViewList.Count() <= 0)
- {
- return true;
- }
- else
- {
- if (evaluationStudentViewList.Count() <= (evaluationControlView.NoNumber ?? 0))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- return true;
- }
- }
- }
- /// <summary>
- /// 教学评价课程成绩查询控制
- /// </summary>
- /// <param name="userID"></param>
- /// <returns></returns>
- public bool CourseScoreControl(Guid? userID)
- {
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- return true;
- }
- else
- {
- if (evaluationControlView.IsCourseScoreLock)
- {
- var evaluationStudentViewList = this.GetStudentNoEvaluationViewList(userID).ToList();
- if (evaluationStudentViewList == null || evaluationStudentViewList.Count() <= 0)
- {
- return true;
- }
- else
- {
- if (evaluationStudentViewList.Count() <= (evaluationControlView.NoNumber ?? 0))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- return true;
- }
- }
- }
- /// <summary>
- /// 教学评价等级成绩查询控制
- /// </summary>
- /// <param name="userID"></param>
- /// <returns></returns>
- public bool LevelScoreControl(Guid? userID)
- {
- var evaluationControlView = EvaluationControlServices.Value.GetEvaluationControlView();
- if (evaluationControlView == null)
- {
- return true;
- }
- else
- {
- if (evaluationControlView.IsLevelScoreLock)
- {
- var evaluationStudentViewList = this.GetStudentNoEvaluationViewList(userID).ToList();
- if (evaluationStudentViewList == null || evaluationStudentViewList.Count() <= 0)
- {
- return true;
- }
- else
- {
- if (evaluationStudentViewList.Count() <= (evaluationControlView.NoNumber ?? 0))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- return true;
- }
- }
- }
- }
- }
|