using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Extension;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.Extend.Entitys.common_extend;
using NCC.Extend.Entitys.Dto.Schedule;
using NCC.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace NCC.Extend
{
///
/// 项目计划
/// 版 本:V1.20.15
/// 版 权:Wesley(https://www.NCCsoft.com)
/// 作 者:NCC开发平台组
/// 日 期:2022-03-16
///
[ApiDescriptionSettings(Tag = "Extend", Name = "Schedule", Order = 600)]
[Route("api/extend/[controller]")]
public class ScheduleService : IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository _scheduleEntityRepository;
private readonly IUserManager _userManager;
///
///
///
///
///
public ScheduleService(ISqlSugarRepository scheduleEntityRepository, IUserManager userManager)
{
_scheduleEntityRepository = scheduleEntityRepository;
_userManager = userManager;
}
#region GET
///
/// 列表
///
/// 参数
///
[HttpGet("")]
public async Task GetList([FromQuery] ScheduleListQuery input)
{
var data = await _scheduleEntityRepository.Entities.Where(x => x.CreatorUserId == _userManager.UserId && x.StartTime >= input.startTime.ToDate() && x.EndTime <= input.endTime.ToDate()&&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)
{
var data = (await _scheduleEntityRepository.FirstOrDefaultAsync(x=>x.Id==id&&x.DeleteMark==null)).Adapt();
return data;
}
///
/// app
///
///
///
[HttpGet("AppList")]
public async Task GetAppList([FromQuery] ScheduleListQuery input)
{
var days = new Dictionary();
var data = await _scheduleEntityRepository.Entities.Where(x => x.CreatorUserId == _userManager.UserId && x.StartTime >= input.startTime.ToDate() && x.EndTime <= input.endTime.ToDate() && x.DeleteMark == null).OrderBy(x => x.StartTime, OrderByType.Desc).ToListAsync();
var output = data.Adapt>();
foreach (var item in GetAllDays(input.startTime.ToDate(), input.endTime.ToDate()))
{
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.ToDate() && m.endTime >= _endTime.ToDate()).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.ToDate() && m.endTime >= today_endTime.ToDate())
};
}
#endregion
#region POST
///
/// 新建
///
/// 实体对象
///
[HttpPost("")]
public async Task Create([FromBody] ScheduleCrInput input)
{
var entity = input.Adapt();
var isOk= await _scheduleEntityRepository.Context.Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
if (isOk < 1)
throw NCCException.Oh(ErrorCode.COM1000);
}
///
/// 更新
///
/// 主键值
/// 实体对象
///
[HttpPut("{id}")]
public async Task Update(string id, [FromBody] ScheduleUpInput input)
{
var entity = input.Adapt();
var isOk = await _scheduleEntityRepository.Context.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync();
if (isOk < 1)
throw NCCException.Oh(ErrorCode.COM1001);
}
///
/// 删除
///
/// 主键值
///
[HttpDelete("{id}")]
public async Task Delete(string id)
{
var entity = await _scheduleEntityRepository.FirstOrDefaultAsync(x => x.Id == id && x.DeleteMark == null);
if (entity == null)
throw NCCException.Oh(ErrorCode.COM1005);
var isOk = await _scheduleEntityRepository.Context.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.Delete()).ExecuteCommandAsync(); ;
if (isOk < 1)
throw NCCException.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
}
}