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
}