using Admin.NET.Core.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace Admin.NET.Application;
///
/// 基础批次表服务
///
[ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 100)]
public class BusBatchBaseService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
public BusBatchBaseService(SqlSugarRepository rep)
{
_rep = rep;
}
///
/// 分页查询基础批次表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
public async Task> Page(BusBatchBaseInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.ProvinceCode.Contains(input.SearchKey.Trim())
|| u.ProvinceName.Contains(input.SearchKey.Trim())
|| u.Batch.Contains(input.SearchKey.Trim())
|| u.Course.Contains(input.SearchKey.Trim())
|| u.BatchType.Contains(input.SearchKey.Trim())
|| u.PressureRange.Contains(input.SearchKey.Trim())
)
.WhereIF(!string.IsNullOrWhiteSpace(input.ProvinceCode), u => u.ProvinceCode.Contains(input.ProvinceCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ProvinceName), u => u.ProvinceName.Contains(input.ProvinceName.Trim()))
.WhereIF(input.Year > 0, u => u.Year == input.Year)
.WhereIF(!string.IsNullOrWhiteSpace(input.Batch), u => u.Batch.Contains(input.Batch.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Course), u => u.Course.Contains(input.Course.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.BatchType), u => u.BatchType.Contains(input.BatchType.Trim()))
.WhereIF(input.Score > 0, u => u.Score == input.Score)
.WhereIF(input.PressureScore > 0, u => u.PressureScore == input.PressureScore)
.WhereIF(!string.IsNullOrWhiteSpace(input.PressureRange), u => u.PressureRange.Contains(input.PressureRange.Trim()))
// 只进行一次 LEFT JOIN,避免重复
.LeftJoin((u, p) => u.ProvinceCode == p.ProvinceCode)
// 去重,避免重复数据
.Distinct()
// 按创建时间排序
.OrderBy(u => u.CreateTime)
// 选择需要的字段
.Select((u, p) => new BusBatchBaseOutput
{
Id = u.Id,
ProvinceCode = u.ProvinceCode,
ProvinceCodeProvinceCode = p.ProvinceCode,
ProvinceName = u.ProvinceName,
ProvinceNameProvinceName = p.ProvinceName,
Year = u.Year,
Batch = u.Batch,
Course = u.Course,
BatchType = u.BatchType,
Score = u.Score,
PressureScore = u.PressureScore,
PressureRange = u.PressureRange,
CreateTime = u.CreateTime,
UpdateTime = u.UpdateTime,
CreateUserId = u.CreateUserId,
CreateUserName = u.CreateUserName,
UpdateUserId = u.UpdateUserId,
UpdateUserName = u.UpdateUserName,
IsDelete = u.IsDelete,
});
return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
}
///
/// 增加基础批次表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
public async Task Add(AddBusBatchBaseInput input)
{
var entity = input.Adapt();
await _rep.InsertAsync(entity);
return entity.Id;
}
///
/// 删除基础批次表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
public async Task Delete(DeleteBusBatchBaseInput input)
{
var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
await _rep.FakeDeleteAsync(entity); //假删除
//await _rep.DeleteAsync(entity); //真删除
}
///
/// 更新基础批次表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Update")]
public async Task Update(UpdateBusBatchBaseInput input)
{
var entity = input.Adapt();
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
///
/// 获取基础批次表
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
public async Task Detail([FromQuery] QueryByIdBusBatchBaseInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
///
/// 获取基础批次表列表
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
public async Task> List([FromQuery] BusBatchBaseInput input)
{
return await _rep.AsQueryable().Select().ToListAsync();
}
///
/// 获取省份Code列表
///
///
///
[ApiDescriptionSettings(Name = "BusBatchBaseProvinceCodeDropdown"), HttpGet]
public async Task BusBatchBaseProvinceCodeDropdown()
{
return await _rep.Context.Queryable()
.Select(u => new
{
Label = u.Code,
Value = u.Code
}
).ToListAsync();
}
///
/// 获取省份列表
///
///
///
[ApiDescriptionSettings(Name = "BusBatchBaseProvinceNameDropdown"), HttpGet]
public async Task BusBatchBaseProvinceNameDropdown()
{
return await _rep.Context.Queryable()
.Select(u => new
{
Label = u.Name,
Value = u.Name
}
).ToListAsync();
}
///
/// 根据省份code和批次类型获取批次信息
///
///
///
[HttpGet]
[AllowAnonymous]
[ApiDescriptionSettings(Name = "batch")]
public async Task Batch([FromQuery] BusBatchRequestDTO requestDTO)
{
if (string.IsNullOrWhiteSpace(requestDTO.LocationCode))
throw Oops.Oh("locationCode 不能为空");
if (string.IsNullOrWhiteSpace(requestDTO.Course))
{
requestDTO.Course = "综合";
}
else
{
if (requestDTO.LocationCode == "510000" || requestDTO.LocationCode == "410000")
{
requestDTO.Course = requestDTO.Course.Contains("物") ? "理科" : "文科";
}
else
{
requestDTO.Course = requestDTO.Course.Contains("物") ? "物理类" : "历史类";
}
}
var result = new ProvinceBatchResultDto();
var query = await _rep.AsQueryable().Where(e => e.ProvinceCode == requestDTO.LocationCode)
.Where(e => e.Course == requestDTO.Course)
.Select().ToListAsync();
result.Year = query.FirstOrDefault() != null ? query.FirstOrDefault().Year : 0;
result.ProvinceCode = query.FirstOrDefault() != null ? query.FirstOrDefault().ProvinceCode : "";
result.ProvinceName = query.FirstOrDefault() != null ? query.FirstOrDefault().ProvinceName : "";
result.MinScore = query.FirstOrDefault() != null ? query.FirstOrDefault().MinScore : 0;
result.MaxScore = query.FirstOrDefault() != null ? query.FirstOrDefault().MaxScore : 0;
result.batches = query.Select(s => new ProvinceBatchItem()
{
Batch = s.Batch,
Year = s.Year,
BatchType = s.BatchType,
Course = s.Course,
Score = s.Score,
PressureScore = s.PressureScore,
PressureRange = s.PressureRange,
}).ToList();
return result;
}
}