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 }