init 项目代码初始化

This commit is contained in:
2023-12-25 11:01:55 +08:00
parent 15112c0ddd
commit da09dd9f0f
112 changed files with 4114 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
using Dlhis.Basic.BusinessShift.Request;
using Dlhis.Basic.BusinessShift.Response;
using Dlhis.Basic.BusinessShift.Services;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Basic.BusinessShift.Controllers;
/// <summary>
/// 餐次
/// </summary>
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class BusinessShiftsController : ControllerBase
{
private readonly IBusinessPlaceShiftService _businessPlaceShiftService;
public BusinessShiftsController(IBusinessPlaceShiftService businessPlaceShiftService)
{
_businessPlaceShiftService = businessPlaceShiftService;
}
/// <summary>
/// 餐次分页
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("page")]
public async Task<Pagination<BusinessPlaceShiftResponse>> GetPageAsync([FromQuery] BusinessPlaceShiftPageRequest request)
{
return await _businessPlaceShiftService.GetPageAsync(request);
}
/// <summary>
/// 餐次保存
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("save")]
public async Task SaveAsync(BusinessPlaceShiftSaveRequest request)
{
await _businessPlaceShiftService.SaveAsync(request);
}
}

View File

@@ -0,0 +1,7 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Basic.BusinessShift.Request;
public class BusinessPlaceShiftPageRequest : PageDto
{
}

View File

@@ -0,0 +1,39 @@
using System.ComponentModel.DataAnnotations;
using Kurisu.Core.CustomClass;
namespace Dlhis.Basic.BusinessShift.Request;
public class BusinessPlaceShiftSaveRequest : IValidatableObject
{
public long? Id { get; set; }
/// <summary>
/// 营业点代号
/// </summary>
[Required(ErrorMessage = "营业点不能为空")]
public Guid BusinessPlaceCode { get; set; }
/// <summary>
/// 自定义代号
/// </summary>
public string CustomCode { get; set; }
/// <summary>
/// 餐次名称
/// </summary>
[Required(ErrorMessage = "餐次名称不能为空")]
public string Name { get; set; }
/// <summary>
/// 时间段
/// </summary>
public TimePeriod TimePeriod { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (TimePeriod.Start == TimePeriod.End)
{
yield return new ValidationResult("时间段设置区间有误,开始时段不能等于结束时段.", new[] { nameof(TimePeriod) });
}
}
}

View File

@@ -0,0 +1,41 @@
namespace Dlhis.Basic.BusinessShift.Response;
public class BusinessPlaceShiftResponse
{
public long Id { get; set; }
/// <summary>
/// 营业点代号
/// </summary>
public Guid BusinessPlaceCode { get; set; }
/// <summary>
/// 营业点手工号
/// </summary>
public string BusinessPlaceCustomCode { get; set; }
/// <summary>
/// 代号
/// </summary>
public Guid Code { get; set; }
/// <summary>
/// 自定义代号
/// </summary>
public string CustomCode { get; set; }
/// <summary>
/// 餐次名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 经营开始时间
/// </summary>
public TimeOnly Start { get; set; }
/// <summary>
/// 经营结束时间
/// </summary>
public TimeOnly End { get; set; }
}

View File

@@ -0,0 +1,14 @@
using Dlhis.Basic.BusinessShift.Request;
using Dlhis.Basic.BusinessShift.Response;
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Basic.BusinessShift.Services;
public interface IBusinessPlaceShiftService : IScopeDependency
{
Task<Pagination<BusinessPlaceShiftResponse>> GetPageAsync(BusinessPlaceShiftPageRequest request);
Task SaveAsync(BusinessPlaceShiftSaveRequest request);
Task<List<BusinessPlaceShiftResponse>> GetShiftsByPlaceCustomCodeAsync(string placeCustomCode);
}

View File

@@ -0,0 +1,136 @@
using Dlhis.Basic.BusinessShift.Request;
using Dlhis.Basic.BusinessShift.Response;
using Dlhis.Entity.Canteen.Entities;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.CustomClass;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
using Mapster;
namespace Dlhis.Basic.BusinessShift.Services.Implements;
public class BusinessPlaceShiftService : IBusinessPlaceShiftService
{
private readonly IDbContext _dbContext;
public BusinessPlaceShiftService(IDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<Pagination<BusinessPlaceShiftResponse>> GetPageAsync(BusinessPlaceShiftPageRequest request)
{
var page = await _dbContext.Queryable<CanteenBusinessShiftEntity>()
.LeftJoin<CanteenBusinessPlaceEntity>((shift, place) => shift.BusinessPlaceCode == place.Code)
.WhereIF(request.Search.IsPresent(), (shift, place) => shift.CustomCode.Contains(request.Search) || shift.Name.Contains(request.Search))
.Select((shift, place) => new BusinessPlaceShiftResponse
{
Id = shift.Id,
BusinessPlaceCode = place.Code,
BusinessPlaceCustomCode = place.CustomCode,
Code = shift.Code,
CustomCode = shift.CustomCode,
Name = shift.Name,
Start = shift.Start,
End = shift.End
})
.ToPageListAsync(request);
return page;
}
public async Task SaveAsync(BusinessPlaceShiftSaveRequest request)
{
await CheckExistsCustomCodeAsync(request);
await DuplicateTimePeriodAsync(request);
await CheckPlaceExistsAsync(request.BusinessPlaceCode);
if (!request.Id.HasValue)
{
var entity = request.Adapt<CanteenBusinessShiftEntity>();
entity.Code = Guid.NewGuid();
entity.Start = request.TimePeriod.Start.Value;
entity.End = request.TimePeriod.End.Value;
await _dbContext.InsertAsync(entity);
}
else
{
var entity = await _dbContext.Queryable<CanteenBusinessShiftEntity>().FirstAsync(x => x.Id == request.Id);
entity.Adapt(request);
await _dbContext.UpdateAsync(entity);
}
}
public async Task<List<BusinessPlaceShiftResponse>> GetShiftsByPlaceCustomCodeAsync(string placeCustomCode)
{
return await _dbContext.Queryable<CanteenBusinessShiftEntity>()
.LeftJoin<CanteenBusinessPlaceEntity>((shift, place) => shift.BusinessPlaceCode == place.Code)
.Where((shift, place) => place.CustomCode == placeCustomCode)
.OrderBy((shift, place) => shift.Start)
.Select((shift, place) => new BusinessPlaceShiftResponse
{
Id = shift.Id,
BusinessPlaceCode = place.Code,
BusinessPlaceCustomCode = place.CustomCode,
Code = shift.Code,
CustomCode = shift.CustomCode,
Name = shift.Name,
Start = shift.Start,
End = shift.End
})
.ToListAsync();
}
//*********************************************** help methods ***************************************************//
private async Task CheckPlaceExistsAsync(Guid code)
{
var existsPlace = await _dbContext.Queryable<CanteenBusinessPlaceEntity>().AnyAsync(x => x.Code == code);
existsPlace.ThrowIfFalse("营业点不存在,请检查.");
}
/// <summary>
/// 时间段重合检查
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
private async Task DuplicateTimePeriodAsync(BusinessPlaceShiftSaveRequest request)
{
var periods = await _dbContext.Queryable<CanteenBusinessShiftEntity>()
.Where(x => x.BusinessPlaceCode == request.BusinessPlaceCode)
.WhereIF(request.Id.HasValue, x => x.Id != request.Id)
.Select(x => new TimePeriod
{
Start = x.Start,
End = x.End,
})
.ToListAsync();
foreach (var period in periods)
{
period.IsDuplicate(request.TimePeriod).ThrowIfTrue($"存在时间段重合[{period.Start}-{period.End}]");
}
}
/// <summary>
/// 检查重复手工号
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
private async Task CheckExistsCustomCodeAsync(BusinessPlaceShiftSaveRequest request)
{
var existsSameCustomCode = await _dbContext.Queryable<CanteenBusinessShiftEntity>()
.Where(x => x.CustomCode == request.CustomCode)
.WhereIF(request.Id.HasValue, x => x.Id != request.Id)
.AnyAsync();
existsSameCustomCode.ThrowIfTrue($"自定义手工号[{request.CustomCode}]存在重复,请检查.");
}
}