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 } }