Files
Atomx/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs

219 lines
7.4 KiB
C#

using Atomx.Admin.Client.Models;
using Atomx.Admin.Services;
using Atomx.Common.Constants;
using Atomx.Common.Entities;
using Atomx.Common.Models;
using Atomx.Data;
using Atomx.Data.CacheServices;
using Atomx.Data.Services;
using FluentValidation;
using MapsterMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
namespace Atomx.Admin.Controllers
{
/// <summary>
/// 国家地区省份API
/// </summary>
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class AreaController : ControllerBase
{
private readonly ILogger<AreaController> _logger;
private readonly DataContext _dbContext;
private readonly IIdCreatorService _idCreator;
private readonly IIdentityService _identityService;
private readonly IMapper _mapper;
private readonly ICacheService _cacheService;
readonly IValidator<AreaModel> _validator;
readonly IStringLocalizer<AreaController> _localizer;
/// <summary>
///
/// </summary>
/// <param name="logger"></param>
/// <param name="idCreator"></param>
/// <param name="identityService"></param>
/// <param name="dbContext"></param>
/// <param name="mapper"></param>
/// <param name="jwtSettings"></param>
/// <param name="cacheService"></param>
public AreaController(ILogger<AreaController> logger, IIdCreatorService idCreator, IIdentityService identityService, DataContext dbContext, IMapper mapper, ICacheService cacheService, IValidator<AreaModel> validator, IStringLocalizer<AreaController> localizer)
{
_logger = logger;
_idCreator = idCreator;
_identityService = identityService;
_dbContext = dbContext;
_mapper = mapper;
_cacheService = cacheService;
_validator = validator;
_localizer = localizer;
}
/// <summary>
/// 数据查询
/// </summary>
/// <param name="search"></param>
/// <param name="page"></param>
/// <param name="size"></param>
/// <returns></returns>
[HttpPost("search")]
[Authorize(Policy = Permissions.User.View)]
public IActionResult AddressList(AreaSearch search, int page, int size = 20)
{
if (page < 1)
{
page = 1;
}
var result = new ApiResult<PagingList<Area>>();
var list = new PagingList<Area>() { Index = page, Size = size };
var query = from p in _dbContext.Areas
select p;
if (!string.IsNullOrEmpty(search.Name))
{
query = from p in query
where p.Name.Contains(search.Name)
select p;
}
if (search.CountryId > 0)
{
query = from p in query
where p.CountryId == search.CountryId
select p;
}
if (search.StateProvinceId > 0)
{
query = from p in query
where p.StateProvinceId == search.StateProvinceId
select p;
}
list.Count = query.Count();
list.Items = query.OrderByDescending(p => p.DisplayOrder).Skip((page - 1) * size).Take(size).ToList();
result = result.IsSuccess(list);
return new JsonResult(result);
}
/// <summary>
/// 通过ID获取数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public IActionResult Get(long id)
{
var result = new ApiResult<Area>();
var data = _dbContext.Areas.SingleOrDefault(p => p.Id == id);
if (data == null)
{
return new JsonResult(new ApiResult<string>().IsFail("数据不存在", null));
}
result = result.IsSuccess(data);
return new JsonResult(result);
}
/// <summary>
/// 通过ID获取详情,含多语言
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("detail")]
public IActionResult Detail(long id)
{
var result = new ApiResult<AreaLocalizedModel>();
var data = _dbContext.Areas.SingleOrDefault(p => p.Id == id);
if (data == null)
{
return new JsonResult(new ApiResult<string>().IsFail("数据不存在", null));
}
var localizedList = _dbContext.LocalizedProperties.Where(p => p.EntityId == id).ToList();
var model = _mapper.Map<AreaLocalizedModel>(data);
model.Locales = localizedList;
result = result.IsSuccess(model);
return new JsonResult(result);
}
/// <summary>
/// 新增编辑数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("save")]
public IActionResult AddressEdit(AreaModel model)
{
var result = new ApiResult<bool>();
var validation = _validator.Validate(model);
if (!validation.IsValid)
{
var message = validation.Errors.FirstOrDefault()?.ErrorMessage ?? string.Empty;
return new JsonResult(new ApiResult<string>().IsFail(message, null));
}
var data = _dbContext.Areas.SingleOrDefault(p => p.CountryId == model.CountryId && p.StateProvinceId == model.StateProvinceId && p.Name == model.Name && p.Id != model.Id);
if (data != null)
{
return new JsonResult(new ApiResult<string>().IsFail("当前站点语言下已经存在这个配置,请认真检查", null));
}
if (model.Id > 0)
{
data = _dbContext.Areas.SingleOrDefault(p => p.Id == model.Id);
if (data == null)
{
return new JsonResult(new ApiResult<string>().IsFail("数据不存在", null));
}
data = _mapper.Map(model, data);
_dbContext.SaveChanges();
}
else
{
data = _mapper.Map<Area>(model);
data.Id = _idCreator.CreateId();
_dbContext.Areas.Add(data);
_dbContext.SaveChanges();
}
return new JsonResult(new ApiResult<string>().IsSuccess("操作成功"));
}
/// <summary>
/// 删除数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("delete")]
public async Task<IActionResult> DeleteAsync(long id)
{
var result = new ApiResult<string>();
try
{
Console.WriteLine($"{id} deleted");
var count = _dbContext.Areas.Where(p => p.Id == id).ExecuteDelete();
result = result.IsSuccess(count.ToString());
}
catch (Exception ex)
{
result = result.IsFail(ex.Message);
_logger.LogError(ex.Message);
}
return new JsonResult(result);
}
}
}