using JNPF.Common.Core.Manager;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Extend.Entitys;
using JNPF.Extend.Entitys.Dto.Schedule;
using JNPF.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace JNPF.Extend;
///
/// 项目计划
/// 版 本:V3.2
/// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com)
/// 日 期:2021-06-01 .
///
[ApiDescriptionSettings(Tag = "Extend", Name = "Schedule", Order = 600)]
[Route("api/extend/[controller]")]
public class ScheduleService : IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository _repository;
private readonly IUserManager _userManager;
public ScheduleService(
ISqlSugarRepository repository,
IUserManager userManager)
{
_repository = repository;
_userManager = userManager;
}
#region GET
///
/// 列表.
///
/// 参数
///
[HttpGet("")]
public async Task GetList([FromQuery] ScheduleListQuery input)
{
var data = await _repository.AsQueryable()
.Where(x => x.CreatorUserId == _userManager.UserId && x.StartTime >= input.startTime.ParseToDateTime() && x.EndTime <= input.endTime.ParseToDateTime() && x.DeleteMark == null).OrderBy(x => x.StartTime, OrderByType.Desc).ToListAsync();
var output = data.Adapt>();
return new { list = output };
}
///
/// 信息.
///
/// 主键值
///
[HttpGet("{id}")]
public async Task GetInfo(string id)
{
return (await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null)).Adapt();
}
///
/// app.
///
///
///
[HttpGet("AppList")]
public async Task GetAppList([FromQuery] ScheduleListQuery input)
{
var days = new Dictionary();
var data = await _repository.AsQueryable()
.Where(x => x.CreatorUserId == _userManager.UserId && x.StartTime >= input.startTime.ParseToDateTime() && x.EndTime <= input.endTime.ParseToDateTime() && x.DeleteMark == null)
.OrderBy(x => x.StartTime, OrderByType.Desc).ToListAsync();
var output = data.Adapt>();
foreach (var item in GetAllDays(input.startTime.ParseToDateTime(), input.endTime.ParseToDateTime()))
{
var _startTime = item.ToString("yyyy-MM-dd") + " 23:59";
var _endTime = item.ToString("yyyy-MM-dd") + " 00:00";
var count = output.FindAll(m => m.startTime <= _startTime.ParseToDateTime() && m.endTime >= _endTime.ParseToDateTime()).Count;
days.Add(item.ToString("yyyyMMdd"), count);
}
var today_startTime = input.dateTime + " 23:59";
var today_endTime = input.dateTime + " 00:00";
return new
{
signList = days,
todayList = output.FindAll(m => m.startTime <= today_startTime.ParseToDateTime() && m.endTime >= today_endTime.ParseToDateTime())
};
}
#endregion
#region POST
///
/// 新建.
///
/// 实体对象
///
[HttpPost("")]
public async Task Create([FromBody] ScheduleCrInput input)
{
var entity = input.Adapt();
var isOk = await _repository.AsSugarClient().Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1000);
}
///
/// 更新
///
/// 主键值
/// 实体对象
///
[HttpPut("{id}")]
public async Task Update(string id, [FromBody] ScheduleUpInput input)
{
var entity = input.Adapt();
var isOk = await _repository.AsSugarClient().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1001);
}
///
/// 删除.
///
/// 主键值
///
[HttpDelete("{id}")]
public async Task Delete(string id)
{
var entity = await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null);
if (entity == null)
throw Oops.Oh(ErrorCode.COM1005);
var isOk = await _repository.AsSugarClient().Updateable(entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1002);
}
#endregion
#region PrivateMethod
///
/// 获取固定日期范围内的所有日期,以数组形式返回.
///
///
///
private DateTime[] GetAllDays(DateTime startTime, DateTime endTime)
{
var listDay = new List();
DateTime dtDay = new DateTime();
//循环比较,取出日期;
for (dtDay = startTime; dtDay.CompareTo(endTime) <= 0; dtDay = dtDay.AddDays(1))
{
listDay.Add(dtDay);
}
return listDay.ToArray();
}
#endregion
}