using System; using System.Threading.Tasks; using AutoMapper; using Datory; using GxPress.Common.Exceptions; using GxPress.Common.Page; using GxPress.Entity.WaitHandle; using GxPress.Repository.Interface.WaitHandle; using GxPress.Request.App.WaitHandle; using GxPress.Result.App.WaitHandle; using GxPress.Service.Interface.WaitHandle; namespace GxPress.Service.Implement.WaitHandle { public class WaitHandleService : IWaitHandleService { private readonly IWaitHandleRepository _waitHandleRepository; private readonly IWaitHandleLabelRepository _waitHandleLabelRepository; private readonly IMapper _mapper; public WaitHandleService(IWaitHandleLabelRepository waitHandleLabelRepository, IWaitHandleRepository waitHandleRepository, IMapper mapper) { _waitHandleLabelRepository = waitHandleLabelRepository; _waitHandleRepository = waitHandleRepository; _mapper = mapper; } /// /// 添加修改待办事项 /// /// /// public async Task AddOrUpdateWaitHandleAsync(WaitHandleAddOrUpdateRequest request) { var id = 0; if (request.IsExecute) { if (request.AlarmTime <= DateTime.Now) throw new BusinessException("时间小于当前时间"); if (request.AlarmTime.AddMinutes(-request.Minute) <= DateTime.Now) throw new BusinessException("提前提醒时间有误"); } if (request.Id == 0) { var waitHandleMap = _mapper.Map(request); if (string.IsNullOrEmpty(request.Title)) throw new BusinessException("标题为空"); if (string.IsNullOrEmpty(request.Content)) throw new BusinessException("内容为空"); waitHandleMap.IsFinish = false; if (request.Minute > 0) waitHandleMap.Minute = request.Minute; else waitHandleMap.Minute = 0; id = await _waitHandleRepository.InsertAsync(waitHandleMap); return await _waitHandleRepository.GetAsync(id); } var waitHandle = await _waitHandleRepository.GetAsync(request.Id); if (!string.IsNullOrEmpty(request.Title)) waitHandle.Title = request.Title; if (!string.IsNullOrEmpty(request.Content)) waitHandle.Content = request.Content; if (request.LabelId > 0) waitHandle.LabelId = request.LabelId; if (request.Minute > 0) waitHandle.Minute = request.Minute; if (request.Level > 0) waitHandle.Level = request.Level; if (request.AlarmTime > DateTime.Now) waitHandle.AlarmTime = request.AlarmTime; if (request.IsExecute != waitHandle.IsExecute) waitHandle.IsExecute = request.IsExecute; await _waitHandleRepository.UpdateAsync(waitHandle); return await _waitHandleRepository.GetAsync(request.Id); } /// /// 删除待办事项 /// /// public async Task DeleteWaitHandleAsync(DeleteWaitHandleRequest request) { return await _waitHandleRepository.DeleteAsync(Q.WhereIn(nameof(Entity.WaitHandle.WaitHandle.Id), request.Ids)); } /// /// // 待办搜索 Sort :hand 手动 time按时间 label 标签 level 优先级 /// /// /// public async Task> PageWaitHandleAsync(PageWaitHandleRequest request) { var result = new PagedList(); var query = Q.NewQuery(); query.Where(nameof(Entity.WaitHandle.WaitHandle.UserId), request.UserId); if (request.Sort == "hand") query.OrderByDesc(nameof(Entity.WaitHandle.WaitHandle.IsFinish)); if (request.Sort == "time") query.OrderByDesc(nameof(Entity.WaitHandle.WaitHandle.AlarmTime)); else if (request.Sort == "label") { query.OrderByDesc(nameof(Entity.WaitHandle.WaitHandle.LabelId)); } else if (request.Sort == "level") { query.OrderByDesc(nameof(Entity.WaitHandle.WaitHandle.Level)); } result.Total = await _waitHandleRepository.CountAsync(query); result.Items = await _waitHandleRepository.GetAllAsync(query.ForPage(request.Page, request.PerPage)); return result; } /// /// 添加修改标签 /// /// /// /// public async Task AddOrUpdateWaitHandleLabelAsync(WaitHandleLabelAddOrUpdateRequest request) { if (request.Id == 0) { var waitHandleLabel = new WaitHandleLabel { Title = request.Title, UserId = request.UserId }; return await _waitHandleLabelRepository.InsertAsync(waitHandleLabel) > 0; } var waitHandleLabelDto = await _waitHandleLabelRepository.GetAsync(request.Id); if (!string.IsNullOrEmpty(request.Title)) waitHandleLabelDto.Title = request.Title; return await _waitHandleLabelRepository.UpdateAsync(waitHandleLabelDto); } /// /// 删除标签 /// /// /// public async Task DeleteWaitHandleLabelAsync(DeleteWaitHandleRequest request) { return await _waitHandleLabelRepository.DeleteAsync(Q.WhereIn(nameof(WaitHandleLabel.Id), request.Ids)); } /// /// // 待办搜索 Sort :hand 手动 time按时间 label 标签 level 优先级 /// /// /// public async Task> PageWaitHandleLabelAsync( PageWaitHandleRequest request) { var result = new PagedList(); var query = Q.NewQuery(); query.Where(nameof(WaitHandleLabel.UserId), request.UserId); result.Total = await _waitHandleLabelRepository.CountAsync(query); result.Items = await _waitHandleLabelRepository.GetAllAsync(query.OrderByDesc(nameof(WaitHandleLabel.CreatedDate)).ForPage(request.Page, request.PerPage)); return result; } /// /// 待办搜索 1 手动 2 按时间 3 标签 4 优先级 /// /// /// public async Task WaitHandleListAsync(ListWaitHandleRequest request) { return await _waitHandleRepository.GetAllAsync(request); } /// /// 设置待办事项 /// /// /// public async Task IsFinishAsync(int id) { var waitHandle = await _waitHandleRepository.GetAsync(id); if (waitHandle == null) throw new BusinessException("待办事项不存在"); return await _waitHandleRepository.UpdateAsync(Q .Set(nameof(Entity.WaitHandle.WaitHandle.IsFinish), !waitHandle.IsFinish) .Where(nameof(Entity.WaitHandle.WaitHandle.Id), id)); } } }