123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- using System;
- using System.Threading.Tasks;
- using System.Transactions;
- using GxPress.Common.Exceptions;
- using GxPress.Entity;
- using GxPress.Request.App.Middle;
- using GxPress.Request.Notice;
- using GxPress.EnumConst;
- using System.Linq;
- using System.Collections.Generic;
- using Datory;
- namespace GxPress.Service.Implement.Notice
- {
- public partial class NoticeService
- {
- public async Task<bool> InsertAsync(NoticeInRequest request)
- {
- if (string.IsNullOrEmpty(request.Content))
- throw new BusinessException("内容必填");
- if ((request.AddresseeUserMiddles.Count == 0 && request.NoticeType == NoticeTypeConst.Send))
- throw new BusinessException("收件人未选择");
- try
- {
- using (TransactionScope transactionScope = new TransactionScope())
- {
- var userEntity = await _userRepository.GetAsync(request.UserId);
- if (userEntity == null)
- throw new BusinessException("用户不存在");
- //获取简单标题
- request.SimplenessTitle = request.Title;
- request.Title = _contentJsonService.GetTitile(request.Title, request.Content);
- var noticeId = 0;
- var middleId = 0;
- var addresseeUsers = new List<User>();
- var ccUsers = new List<User>();
- //添加通知
- if (request.Id == 0)
- {
- noticeId = await _noticeRepository.InsertAsync(request);
- if (noticeId == 0) return false;
- var middleInsertTypes = new MiddleInsertTypeRequest
- {
- FolderId = request.FolderId,
- MiddleId = noticeId,
- FolderType = GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode(),
- UserId = request.UserId,
- MiddleSonId = 0,
- NoticeAddresseeType = request.NoticeType,
- AttributeValue = 1,
- IsAdmin = true
- };
- //添加自己
- middleId = await _middleService.InsertAsync(middleInsertTypes);
- }
- else
- {
- noticeId = request.Id;
- var notice = await _noticeRepository.GetAsync(noticeId);
- notice.NoticeType = request.NoticeType;
- notice.Content = request.Content;
- notice.Title = request.Title;
- notice.HtmlContent = request.HtmlContent;
- notice.SourceId = request.SoureId;
- notice.SimplenessTtile = request.SimplenessTitle;
- await _noticeRepository.UpdateNoticeAsync(notice);
- //删除middle
- await _middleRepository.DeleteAsync(Q.Where(nameof(Entity.Middle.Middle.MiddleId), noticeId).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode()).Where(nameof(Entity.Middle.Middle.IsAdmin), false));
- //删除收件人
- await _addresseeRepository.DeleteAsync(noticeId, GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode(), 2);
- //删除抄送人
- await _ccRepository.DeleteAsync(noticeId, GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode());
- //删除userMiddle
- await _userMiddleService.DeleteAsync(noticeId, 10);
- await _userMiddleService.DeleteAsync(noticeId, 20);
- }
- //判断是不是新版通知
- if (request.AddresseeUserMiddles.Count > 0)
- {
- //删除收件人
- await _userMiddleService.DeleteAsync(request.Id, 10);
- foreach (var item in request.AddresseeUserMiddles)
- {
- item.DataSourceId = noticeId;
- item.MiddleType = 10;
- }
- await _userMiddleService.AddUserMiddleAsync(request.AddresseeUserMiddles);
- //获取用户
- addresseeUsers = await _userMiddleService.FindUsersAsync(request.AddresseeUserMiddles, request.UserId);
- request.NoticeAddresseeUserIds = addresseeUsers.Select(n => n.Id).ToList();
- }
- if (request.CcUserMiddles.Count > 0)
- {
- //删除抄送人
- await _userMiddleService.DeleteAsync(request.Id, 20);
- foreach (var item in request.CcUserMiddles)
- {
- item.DataSourceId = noticeId;
- item.MiddleType = 20;
- }
- await _userMiddleService.AddUserMiddleAsync(request.CcUserMiddles);
- ccUsers = await _userMiddleService.FindUsersAsync(request.CcUserMiddles, request.UserId);
- request.NoticeCcUserIds = ccUsers.Select(n => n.Id).ToList();
- //添加抄送人
- request.NoticeAddresseeUserIds.AddRange(request.NoticeCcUserIds);
- }
- //创建人
- var addresseeEntity = new Addressee
- {
- SourceId = noticeId,
- UserId = request.UserId,
- UserName = userEntity.Name,
- IsAdmin = true,
- NoticeAddresseeType = request.NoticeType,
- IsTop = false,
- IsRead = true,
- SourceType = request.TypeValue
- };
- var noticeAddresseeId = await _addresseeRepository.InsertAsync(addresseeEntity);
- request.NoticeAddresseeUserIds = request.NoticeAddresseeUserIds.Distinct().ToList();
- request.NoticeAddresseeUserIds.AddRange(request.NoticeCcUserIds);
- //通知收件人
- var addressees = new List<Addressee>();
- //中间件
- var middles = new List<Entity.Middle.Middle>();
- //抄送人
- var ccs = new List<Cc>();
- //收件人
- if (request.NoticeType == NoticeTypeConst.Send)
- {
- foreach (var noticeAddresseeUserId in request.NoticeAddresseeUserIds.Distinct().ToList())
- {
- if (noticeAddresseeUserId == request.UserId)
- continue;
- var noticeAddressee = new Addressee
- {
- SourceId = noticeId,
- UserId = noticeAddresseeUserId,
- NoticeAddresseeType = request.NoticeType,
- IsRead = false,
- SourceType = GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode()
- };
- addressees.Add(noticeAddressee);
- }
- }
- request.NoticeCcUserIds = request.NoticeCcUserIds.Distinct().ToList();
- if (request.NoticeType == NoticeTypeConst.Send)
- {
- //抄送
- foreach (var noticeCcUserId in request.NoticeCcUserIds)
- {
- if (noticeCcUserId == 0)
- continue;
- var cc = new Cc
- {
- UserId = noticeCcUserId,
- SourceId = noticeId,
- SourceType = GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode()
- };
- ccs.Add(cc);
- }
- }
- //添加收件人
- await _addresseeRepository.InsertAsync(addressees);
- //添加草送人
- await _ccRepository.InsertAsync(ccs);
- //查询添加的收件人
- var noticeAddresseelist = await _addresseeRepository.GetAllAsync(Q.Where(nameof(Entity.Addressee.SourceId), noticeId));
- if (request.NoticeType == NoticeTypeConst.Send)
- {
- foreach (var item in noticeAddresseelist)
- {
- if (item.UserId == request.UserId)
- continue;
- var middle = new Entity.Middle.Middle
- {
- MiddleId = noticeId,
- FolderType = AllTypeConst.Inbox.GetHashCode(),
- IsTop = false,
- AttributeValue = 1,
- ParentId = 0,
- UserId = item.UserId,
- MiddleSonId = item.Id,
- IsAdmin = false,
- NoticeAddresseeType = request.NoticeType,
- IsRead = false,
- IsRecall = false
- };
- middles.Add(middle);
- }
- }
- // //修改middler
- // if (middleId > 0)
- // {
- // var middle = await _middleRepository.GetMiddleAsync(middleId);
- // middle.AddressUserComplete = Common.Tools.StringUtils.ObjectCollectionToString(addresseeUsers.Select(n => n.Name));
- // middle.AddressUser = Common.Tools.StringUtils.ObjectCollectionToString(addresseeUsers.Select(n => n.Name), 10);
- // middle.CcUserComplete = Common.Tools.StringUtils.ObjectCollectionToString(addresseeUsers.Select(n => n.Name));
- // middle.CcUser = Common.Tools.StringUtils.ObjectCollectionToString(addresseeUsers.Select(n => n.Name), 10);
- // await _middleRepository.UpdateAsync(middle);
- // }
- //添加文件
- if (request.NoticeType == NoticeTypeConst.Send)
- //添加收件人
- await _middleRepository.InsertAsync(middles);
- transactionScope.Complete();
- }
- }
- catch (Exception e)
- {
- throw new BusinessException(e.Message);
- }
- return true;
- }
- /// <summary>
- /// 添加收件箱工作
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public async Task<bool> AddNoticeFlowAsync(NoticeInRequest request)
- {
- try
- {
- //查询是否存在
- var query = Q.NewQuery();
- query.Where(nameof(Entity.WorkFlow.FlowTodo.UserId), request.UserId);
- query.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), request.SoureId);
- query.WhereIn(nameof(Entity.WorkFlow.FlowTodo.Type), new List<string> { "CarbonCopy", "ApproverCheck" });
- var resultCount = await flowTodoRepository.CountAsync(query);
- if (resultCount > 0)
- return true;
- using (var transactionScope = new TransactionScope())
- {
- var noticeId = await _noticeRepository.InsertAsync(request);
- if (noticeId == 0) return false;
- var middleInsertTypes = new MiddleInsertTypeRequest
- {
- FolderId = request.FolderId,
- MiddleId = noticeId,
- FolderType = GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode(),
- UserId = request.UserId,
- MiddleSonId = 0,
- NoticeAddresseeType = request.NoticeType,
- AttributeValue = 1,
- //Title = _contentJsonService.GetTitile(request.Title, request.Content),
- IsAdmin = true,
- //TitleLong = request.Title,
- //Content = request.Content,
- };
- //添加自己
- var middleId = await _middleService.InsertAsync(middleInsertTypes);
- transactionScope.Complete();
- }
- }
- catch
- {
- return false;
- }
- return true;
- }
- }
- }
|