using Admin.NET.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Mapster;
using Microsoft.EntityFrameworkCore;
namespace Admin.NET.Application
{
///
/// 员工服务
///
public class SysEmpService : ISysEmpService, ITransient
{
private readonly IRepository _sysEmpRep; // 员工表仓储
private readonly ISysEmpExtOrgPosService _sysEmpExtOrgPosService;
private readonly ISysEmpPosService _sysEmpPosService;
///
/// 构造函数
///
///
///
///
public SysEmpService(IRepository sysEmpRep,
ISysEmpExtOrgPosService sysEmpExtOrgPosService,
ISysEmpPosService sysEmpPosService)
{
_sysEmpRep = sysEmpRep;
_sysEmpExtOrgPosService = sysEmpExtOrgPosService;
_sysEmpPosService = sysEmpPosService;
}
///
/// 获取用户员工相关信息(包括登录)
///
///
///
public async Task GetEmpInfo(long empId)
{
var empInfoOutput = new EmpOutput();
var sysEmp = await _sysEmpRep.FirstOrDefaultAsync(u => u.Id == empId, false);
if (sysEmp == null) return empInfoOutput;
empInfoOutput = sysEmp.Adapt();
empInfoOutput.ExtOrgPos = await _sysEmpExtOrgPosService.GetEmpExtOrgPosList(empId);
empInfoOutput.Positions = await _sysEmpPosService.GetEmpPosList(empId);
return empInfoOutput;
}
///
/// 增加或编辑员工相关信息
///
///
[UnitOfWork]
public async Task AddOrUpdate(EmpOutput2 sysEmpParam)
{
// 先删除员工信息
var emps = await _sysEmpRep.Where(u => u.Id == long.Parse(sysEmpParam.Id)).ToListAsync();
await _sysEmpRep.DeleteAsync(emps);
// 再新增新员工信息
var emp = sysEmpParam.Adapt();
await _sysEmpRep.InsertNowAsync(emp);
// 更新附属机构职位信息
await _sysEmpExtOrgPosService.AddOrUpdate(emp.Id, sysEmpParam.ExtIds);
// 更新职位信息
await _sysEmpPosService.AddOrUpdate(emp.Id, sysEmpParam.PosIdList);
}
///
/// 修改员工相关机构信息
///
///
///
///
public async Task UpdateEmpOrgInfo(long orgId, string orgName)
{
var emps = await _sysEmpRep.Where(u => u.OrgId == orgId).ToListAsync();
emps.ForEach(u =>
{
u.OrgName = orgName;
});
}
///
/// 根据机构Id判断该机构下是否有员工
///
///
///
public async Task HasOrgEmp(long orgId)
{
return await _sysEmpRep.DetachedEntities.AnyAsync(u => u.OrgId == orgId);
}
///
/// 根据员工Id删除对应的员工表信息
///
///
///
//[UnitOfWork]
public async Task DeleteEmpInfoByUserId(long empId)
{
// 删除员工信息
await _sysEmpRep.DeleteAsync(empId);
// 级联删除对应的员工-附属信息
await _sysEmpExtOrgPosService.DeleteEmpExtInfoByUserId(empId);
// 级联删除对用的员工-职位信息
await _sysEmpPosService.DeleteEmpPosInfoByUserId(empId);
}
///
/// 获取员工机构Id
///
///
///
public async Task GetEmpOrgId(long empId)
{
return (await _sysEmpRep.FirstOrDefaultAsync(u => u.Id == empId, false)).OrgId;
}
///
/// 获取子机构用户
///
///
///
public async Task> HasOrgEmp(List orgIds)
{
return await _sysEmpRep.DetachedEntities.Where(u => orgIds.Contains(u.OrgId)).ToListAsync();
}
}
}