using Edu.Common.API; using Edu.Common.Plugin; using Edu.Model.CacheModel; using Edu.Model.Entity.User; using Edu.Model.Public; using Edu.Model.ViewModel.User; using Edu.Repository.User; using System; using System.Collections.Generic; using System.Linq; using System.Text; using VT.FW.DB; namespace Edu.Module.User { /// /// 公告处理类 /// public class NoticeModule { /// /// 公告处理类对象 /// private readonly RB_NoticeRepository noticeRepository = new RB_NoticeRepository(); /// /// 公告基础 /// private readonly RB_Notice_BaseRepository notice_BaseRepository = new RB_Notice_BaseRepository(); /// /// 公告阅读 /// private readonly RB_Notice_ReadRepository notice_ReadRepository = new RB_Notice_ReadRepository(); /// /// 公告部门 /// private readonly RB_Notice_DeptRepository notice_DeptRepository = new RB_Notice_DeptRepository(); /// /// 部门 /// private readonly RB_DepartmentRepository departmentRepository = new RB_DepartmentRepository(); /// /// 账号 /// private readonly RB_AccountRepository accountRepository = new RB_AccountRepository(); /// /// 获取公告配置信息 /// /// /// public object GetNoticeBaseInfo(int group_Id) { var model = notice_BaseRepository.GetList(new RB_Notice_Base_ViewModel() { Group_Id = group_Id }).FirstOrDefault(); return new { model?.Id, model?.Image, model?.From, model?.NumberRule, NumberRuleName = model?.NumberRule.ToName(), model?.CopyPeople }; } /// /// 新增修改 公告配置信息 /// /// /// public string SetNoticeBaseInfo(RB_Notice_Base_ViewModel dmodel) { bool flag; if (dmodel.Id > 0) { Dictionary keyValues = new Dictionary() { { nameof(RB_Notice_Base.Image),dmodel.Image}, { nameof(RB_Notice_Base.CopyPeople),dmodel.CopyPeople}, { nameof(RB_Notice_Base.From),dmodel.From}, { nameof(RB_Notice_Base.NumberRule),dmodel.NumberRule}, { nameof(RB_Notice_Base.UpdateBy),dmodel.UpdateBy}, { nameof(RB_Notice_Base.UpdateTime),DateTime.Now}, }; List whereHelpers = new List() { new WhereHelper(){ FiledName=nameof(RB_Notice_Base.Id), FiledValue=dmodel.Id, OperatorEnum=OperatorEnum.Equal } }; flag = notice_BaseRepository.Update(keyValues, whereHelpers); } else { var model = notice_BaseRepository.GetList(new RB_Notice_Base_ViewModel() { Group_Id = dmodel.Group_Id }).FirstOrDefault(); if (model == null) { flag = notice_BaseRepository.Insert(dmodel) > 0; } else { return "已存在配置,无法新增"; } } return flag ? "" : "出错了,请联系管理员"; } /// /// 获取公告分页列表 /// /// /// /// /// /// public List GetNoticePageList(int pageIndex, int pageSize, out long rowsCount, RB_Notice_ViewModel dmodel) { var list = noticeRepository.GetPageList(pageIndex, pageSize, out rowsCount, dmodel); if (list.Any()) { //查询阅读人数 string NoticeIds = string.Join(",", list.Select(x => x.Id)); var readList = notice_ReadRepository.GetNoticeReadNumList(NoticeIds); //var dList = notice_DeptRepository.GetList(new RB_Notice_Dept() { }, NoticeIds); foreach (var item in list) { item.ReadNum = readList.Where(x => x.NoticeId == item.Id).FirstOrDefault()?.ReadNum ?? 0; //var idList = dList.Where(x => x.NoticeId == item.Id).ToList(); //if (idList.Any()) //{ // item.To = string.Join(",", idList.Select(x => x.DeptId)); //} //else //{ // item.To = "-1"; //} } } return list; } /// /// 获取我的公告分页列表 /// /// /// /// /// /// public List GetMyNoticePageList(int pageIndex, int pageSize, out long rowsCount, RB_Notice_ViewModel dmodel) { #region 我的上级部门 var dlist = departmentRepository.GetAllSuperiorDepartmentListRepository(dmodel.DeptId); if (dlist.Any()) { dmodel.To = string.Join(",", dlist.Select(x => x.DeptId)); } #endregion var list = noticeRepository.GetMyPageList(pageIndex, pageSize, out rowsCount, dmodel); if (list.Any()) { //查询阅读人数 string NoticeIds = string.Join(",", list.Select(x => x.Id)); var readList = notice_ReadRepository.GetNoticeReadNumList(NoticeIds); //var dList = notice_DeptRepository.GetList(new RB_Notice_Dept() { }, NoticeIds); foreach (var item in list) { item.ReadNum = readList.Where(x => x.NoticeId == item.Id).FirstOrDefault()?.ReadNum ?? 0; //var idList = dList.Where(x => x.NoticeId == item.Id).ToList(); //if (idList.Any()) //{ // item.To = string.Join(",", idList.Select(x => x.DeptId)); //} //else { // item.To = "-1"; //} } } return list; } /// /// 获取公告信息 /// /// /// public ApiResult GetNoticeInfo(int noticeId) { var model = noticeRepository.GetEntity(noticeId); if (model == null) { return ApiResult.ParamIsNull(); } var dList = notice_DeptRepository.GetList(new RB_Notice_Dept() { NoticeId = noticeId }, ""); model.To = "-1"; if (dList.Any()) { model.To = string.Join(",", dList.Select(x => x.DeptId)); } List DepartmentList = new List() { new { DepartmentId = -1, DeptName = "全公司" } }; if (!string.IsNullOrEmpty(model.To) && model.To != "-1") { //查询所有的部门 var dlist = departmentRepository.GetDepartmentListRepository(new RB_Department_ViewModel() { Group_Id = model.Group_Id, QDeptIds = model.To }); DepartmentList = new List(); foreach (var item in dlist) { DepartmentList.Add(new { DepartmentId = item.DeptId, item.DeptName }); } } List CopyPeopleList = new List(); if (!string.IsNullOrEmpty(model.CopyPeople) && model.CopyPeople != "-1") { //查询所有人 var elist = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = model.Group_Id, QIds = model.CopyPeople }); foreach (var item in elist) { CopyPeopleList.Add(new { EmployeeId = item.Id, EmName = item.EmployeeName }); } } //转换文件列表 model.FileList = new List(); if (!string.IsNullOrEmpty(model.File)) { model.FileList = JsonHelper.DeserializeObject>(model.File); } return ApiResult.Success("", new { model.Id, model.From, model.To, DepartmentList, model.CopyPeople, CopyPeopleList, model.Number, model.Title, model.Content, FileList = model.FileList.Select(x => new { x.FileName, x.FileUrl }), model.NoticeState, NoticeStateName = model.NoticeState.ToName(), model.Is_Top, model.UpdateBy, UpdateTime = model.UpdateTime.HasValue ? model.UpdateTime.Value.ToString("yyyy年MM月dd日") : "" }); } /// /// 公告操作 /// /// /// 类型 1置顶 2取消置顶 3撤回 4删除 /// /// public bool SetNoticeOperation(int noticeId, int type, UserInfo userInfo) { if (type == 5) { //公告阅读 //查询该人是否已阅读 var readModel = notice_ReadRepository.GetList(new RB_Notice_Read_ViewModel() { NoticeId = noticeId, AccountId = userInfo.Id }).FirstOrDefault(); if (readModel == null) { return notice_ReadRepository.Insert(new RB_Notice_Read() { Id = 0, AccountId = userInfo.Id, NoticeId = noticeId, ReadTime = DateTime.Now }) > 0; } else { return true; } } else { var model = noticeRepository.GetEntity(noticeId); if (type == 3) { if (model.NoticeState != Common.Enum.User.NoticeStateEnum.Publish) { return false; } } if (type == 4) { if (model.NoticeState == Common.Enum.User.NoticeStateEnum.Publish) { return false; } } Dictionary keyValues = new Dictionary() { { nameof(RB_Notice.UpdateBy),userInfo.Id}, { nameof(RB_Notice.UpdateTime),DateTime.Now}, }; if (type == 1) { keyValues.Add(nameof(RB_Notice.Is_Top), 1); } else if (type == 2) { keyValues.Add(nameof(RB_Notice.Is_Top), 2); } else if (type == 3) { keyValues.Add(nameof(RB_Notice.NoticeState), Common.Enum.User.NoticeStateEnum.Cancel); } else if (type == 4) { keyValues.Add(nameof(RB_Notice.Status), Common.Enum.DateStateEnum.Delete); } List wheres = new List() { new WhereHelper(){ FiledName=nameof(RB_Notice.Id), FiledValue=noticeId, OperatorEnum=OperatorEnum.Equal } }; return noticeRepository.Update(keyValues, wheres); } } /// /// 新增修改公告 /// /// /// public bool SetNoticeInfo(RB_Notice_ViewModel demodel) { if (demodel.Id > 0) { var oldModel = noticeRepository.GetEntity(demodel.Id); Dictionary keyValues = new Dictionary() { { nameof(RB_Notice.From),demodel.From}, { nameof(RB_Notice.To),demodel.To}, { nameof(RB_Notice.CopyPeople),demodel.CopyPeople}, { nameof(RB_Notice.Title),demodel.Title}, { nameof(RB_Notice.Content),demodel.Content}, { nameof(RB_Notice.File),demodel.File}, { nameof(RB_Notice.NoticeState),demodel.NoticeState}, { nameof(RB_Notice.Is_Top),demodel.Is_Top}, { nameof(RB_Notice.UpdateBy),demodel.UpdateBy}, { nameof(RB_Notice.UpdateTime),demodel.UpdateTime} }; List wheres = new List() { new WhereHelper(){ FiledName=nameof(RB_Notice.Id), FiledValue=demodel.Id, OperatorEnum=OperatorEnum.Equal } }; bool flag = noticeRepository.Update(keyValues, wheres); if (flag) { //更新部门 var dList = notice_DeptRepository.GetList(new RB_Notice_Dept() { NoticeId = demodel.Id }, ""); if (demodel.To != "-1") { List ToList = JsonHelper.DeserializeObject>("[" + demodel.To + "]"); var insertList = ToList.Where(x => !dList.Select(z => z.DeptId).Contains(x)).ToList(); var delList = dList.Where(x => !ToList.Contains(x.DeptId)).ToList(); foreach (var item in insertList) { notice_DeptRepository.Insert(new RB_Notice_Dept() { Id = 0, DeptId = item, NoticeId = demodel.Id }); } foreach (var item in delList) { notice_DeptRepository.Delete(item); } } else { //删除部门关联 foreach (var item in dList) { notice_DeptRepository.Delete(item); } } } if (flag && oldModel.NoticeState == Common.Enum.User.NoticeStateEnum.Draft && demodel.NoticeState == Common.Enum.User.NoticeStateEnum.Publish) { //推送消息 } return flag; } else { //查询生成规则 var model = notice_BaseRepository.GetList(new RB_Notice_Base_ViewModel() { Group_Id = demodel.Group_Id }).FirstOrDefault(); if (model == null) { return false; } demodel.Number = ""; demodel.NumberRule = model.NumberRule; if (model.NumberRule == Common.Enum.User.NoticeRuleEnum.One) { //求出当前规则的最大一个 string MaxNumber = noticeRepository.GetNoticeNumberMax(model.NumberRule, demodel.Group_Id); if (!string.IsNullOrEmpty(MaxNumber)) { string[] NumberArr = MaxNumber.Split('-'); string Letter = NumberArr[1]; int Num = Convert.ToInt32(NumberArr[2]); if (Num >= 999) { string LetterStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int Index = LetterStr.IndexOf(LetterStr); Letter = LetterStr.Substring(Index, Index + 1); Num = 1; } else { Num++; } demodel.Number = DateTime.Now.ToString("yyyy") + "-" + Letter + "-" + Num.ToString().PadLeft(3, '0'); } else { demodel.Number = DateTime.Now.ToString("yyyy") + "-A-001"; } } int Id = noticeRepository.Insert(demodel); bool flag = Id > 0; if (flag) { //更新部门 if (demodel.To != "-1") { List ToList = JsonHelper.DeserializeObject>("[" + demodel.To + "]"); foreach (var item in ToList) { notice_DeptRepository.Insert(new RB_Notice_Dept() { Id = 0, DeptId = item, NoticeId = Id }); } } } if (flag && demodel.NoticeState == Common.Enum.User.NoticeStateEnum.Publish) { //推送消息 } return flag; } } } }