using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Extend.Entitys; using JNPF.Extend.Entitys.Dto.WoekLog; using JNPF.Extend.Entitys.Dto.WorkLog; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.Permission; using Mapster; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Yitter.IdGenerator; namespace JNPF.Extend; /// /// 工作日志 /// 版 本:V3.2 /// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com) /// 日 期:2021-06-01 . /// [ApiDescriptionSettings(Tag = "Extend", Name = "WorkLog", Order = 600)] [Route("api/extend/[controller]")] public class WorkLogService : IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly IUsersService _usersService; private readonly IUserManager _userManager; private readonly ITenant _db; public WorkLogService(ISqlSugarRepository repository, IUsersService usersService, IUserManager userManager, ISqlSugarClient context) { _repository = repository; _usersService = usersService; _userManager = userManager; _db = context.AsTenant(); } #region Get /// /// 列表(我发出的) /// /// /// [HttpGet("Send")] public async Task GetSendList([FromQuery] PageInputBase input) { var list = await _repository.AsQueryable().Where(x => x.CreatorUserId == _userManager.UserId && x.DeleteMark == null) .WhereIF(input.keyword.IsNotEmptyOrNull(), m => m.Title.Contains(input.keyword) || m.Description.Contains(input.keyword)) .OrderBy(x => x.SortCode).OrderBy(x => x.CreatorTime, OrderByType.Desc) .OrderByIF(!string.IsNullOrEmpty(input.keyword), t => t.LastModifyTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize); var pageList = new SqlSugarPagedList() { list = list.list.Adapt>(), pagination = list.pagination }; return PageResult.SqlSugarPageResult(pageList); } /// /// 列表(我收到的) /// /// /// [HttpGet("Receive")] public async Task GetReceiveList([FromQuery] PageInputBase input) { var list = await _repository.AsSugarClient().Queryable( (a, b) => new JoinQueryInfos(JoinType.Left, a.Id == b.WorkLogId)) .Where((a, b) => a.DeleteMark == null && b.ShareUserId == _userManager.UserId) .WhereIF(input.keyword.IsNotEmptyOrNull(), a => a.Title.Contains(input.keyword)) .Select(a => new WorkLogListOutput() { id = a.Id, title = a.Title, question = a.Question, creatorTime = a.CreatorTime, todayContent = a.TodayContent, tomorrowContent = a.TomorrowContent, toUserId = a.ToUserId, sortCode = a.SortCode, lastModifyTime = a.LastModifyTime }).MergeTable() .OrderBy(a => a.sortCode).OrderBy(a => a.creatorTime, OrderByType.Desc) .OrderByIF(!string.IsNullOrEmpty(input.keyword), t => t.lastModifyTime, OrderByType.Desc) .ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(list); } /// /// 信息 /// /// /// [HttpGet("{id}")] public async Task GetInfo(string id) { var output = (await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null)).Adapt(); output.userIds = output.toUserId; output.toUserId = await _usersService.GetUserName(output.toUserId); return output; } #endregion #region Post /// /// 添加. /// /// /// [HttpPost("")] public async Task Create([FromBody] WorkLogCrInput input) { try { var entity = input.Adapt(); entity.Id = SnowflakeIdHelper.NextId(); List workLogShareList = entity.ToUserId.Split(',').Select(x => new WorkLogShareEntity() { Id = YitIdHelper.NextId().ToString(), ShareTime = DateTime.Now, WorkLogId = entity.Id, ShareUserId = x }).ToList(); _db.BeginTran(); _repository.AsSugarClient().Insertable(workLogShareList).ExecuteCommand(); var isOk = await _repository.AsSugarClient().Insertable(entity).CallEntityMethod(m => m.Create()).ExecuteCommandAsync(); if (isOk < 1) throw Oops.Oh(ErrorCode.COM1000); _db.CommitTran(); } catch (Exception) { _db.RollbackTran(); throw Oops.Oh(ErrorCode.COM1000); } } /// /// 修改 /// /// /// /// [HttpPut("{id}")] public async Task Update(string id, [FromBody] WorkLogUpInput input) { try { var entity = input.Adapt(); List workLogShareList = entity.ToUserId.Split(',').Select(x => new WorkLogShareEntity() { Id = YitIdHelper.NextId().ToString(), ShareTime = DateTime.Now, WorkLogId = entity.Id, ShareUserId = x }).ToList(); _db.BeginTran(); _repository.AsSugarClient().Deleteable(workLogShareList).ExecuteCommand(); _repository.AsSugarClient().Insertable(workLogShareList).ExecuteCommand(); var isOk = await _repository.AsSugarClient().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync(); if (isOk < 1) throw Oops.Oh(ErrorCode.COM1001); _db.CommitTran(); } catch (Exception) { _db.RollbackTran(); throw Oops.Oh(ErrorCode.COM1001); } } /// /// 删除 /// /// /// [HttpDelete("{id}")] public async Task Delete(string id) { try { var entity = await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null); if (entity == null) throw Oops.Oh(ErrorCode.COM1005); _db.BeginTran(); _repository.AsSugarClient().Deleteable(x => x.WorkLogId == id).ExecuteCommand(); var isOk = await _repository.AsSugarClient().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.Delete()).ExecuteCommandAsync(); if (isOk < 1) throw Oops.Oh(ErrorCode.COM1002); _db.CommitTran(); } catch (Exception) { _db.RollbackTran(); throw Oops.Oh(ErrorCode.COM1002); } } #endregion }