using iWare.Wms.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace iWare.Wms.Application
{
///
/// 职位服务
///
[ApiDescriptionSettings(Name = "Pos", Order = 147)]
[Route("api")]
public class SysPosService : ISysPosService, IDynamicApiController, ITransient
{
private readonly IRepository _sysPosRep; // 职位表仓储
private readonly ISysEmpPosService _sysEmpPosService;
private readonly ISysEmpExtOrgPosService _sysEmpExtOrgPosService;
public SysPosService(IRepository sysPosRep,
ISysEmpPosService sysEmpPosService,
ISysEmpExtOrgPosService sysEmpExtOrgPosService)
{
_sysPosRep = sysPosRep;
_sysEmpPosService = sysEmpPosService;
_sysEmpExtOrgPosService = sysEmpExtOrgPosService;
}
///
/// 分页获取职位
///
///
///
[HttpGet("sysPos/page")]
public async Task> QueryPosPageList([FromQuery] PosInput input)
{
var name = !string.IsNullOrEmpty(input.Name?.Trim());
var code = !string.IsNullOrEmpty(input.Code?.Trim());
var pos = await _sysPosRep.DetachedEntities
.Where((name, u => EF.Functions.Like(u.Name, $"%{input.Name.Trim()}%")),
(code, u => EF.Functions.Like(u.Code, $"%{input.Code.Trim()}%")))
.Where(u => u.Status == CommonStatus.ENABLE)
.OrderBy(u => u.Sort)
.ToADPagedListAsync(input.PageNo, input.PageSize);
return pos;
}
///
/// 获取职位列表
///
///
[HttpGet("sysPos/list")]
public async Task> GetPosList([FromQuery] PosInput input)
{
var code = !string.IsNullOrEmpty(input.Code?.Trim());
return await _sysPosRep.DetachedEntities.Where(code, u => EF.Functions.Like(u.Code, $"%{input.Code.Trim()}%"))
.Where(u => u.Status != CommonStatus.DELETED)
.OrderBy(u => u.Sort).ToListAsync();
}
///
/// 增加职位
///
///
///
[HttpPost("sysPos/add")]
public async Task AddPos(AddPosInput input)
{
var isExist = await _sysPosRep.DetachedEntities.AnyAsync(u => u.Name == input.Name || u.Code == input.Code);
if (isExist)
throw Oops.Oh(ErrorCode.D6000);
var pos = input.Adapt();
await pos.InsertAsync();
}
///
/// 删除职位
///
///
///
[HttpPost("sysPos/delete")]
public async Task DeletePos(DeletePosInput input)
{
// 该职位下是否有员工
var hasPosEmp = await _sysEmpPosService.HasPosEmp(input.Id);
if (hasPosEmp)
throw Oops.Oh(ErrorCode.D6001);
// 该附属职位下是否有员工
var hasExtPosEmp = await _sysEmpExtOrgPosService.HasExtPosEmp(input.Id);
if (hasExtPosEmp)
throw Oops.Oh(ErrorCode.D6001);
var pos = await _sysPosRep.FirstOrDefaultAsync(u => u.Id == input.Id);
await pos.DeleteAsync();
}
///
/// 更新职位
///
///
///
[HttpPost("sysPos/edit")]
public async Task UpdatePos(UpdatePosInput input)
{
var isExist = await _sysPosRep.DetachedEntities.AnyAsync(u => (u.Name == input.Name || u.Code == input.Code) && u.Id != input.Id);
if (isExist)
throw Oops.Oh(ErrorCode.D6000);
var pos = input.Adapt();
await pos.UpdateAsync(ignoreNullValues: true);
}
///
/// 获取职位
///
///
///
[HttpGet("sysPos/detail")]
public async Task GetPos([FromQuery] QueryPosInput input)
{
return await _sysPosRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id);
}
}
}