using Furion.DependencyInjection; using Myshipping.Core.Entity; using SqlSugar; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Myshipping.Core.Service; /// /// 员工职位服务 /// public class SysEmpPosService : ISysEmpPosService, ITransient { private readonly SqlSugarRepository _sysEmpPosRep; // 员工职位表仓储 private readonly SqlSugarRepository _sysPosRep; public SysEmpPosService(SqlSugarRepository sysEmpPosRep, SqlSugarRepository sysPosRep) { _sysEmpPosRep = sysEmpPosRep; _sysPosRep = sysPosRep; } /// /// 增加或编辑员工职位相关信息 /// /// 员工Id(用户Id) /// 职位id集合 /// public async Task AddOrUpdate(long empId, List posIdList) { try { _sysEmpPosRep.CurrentBeginTran(); // 先删除 await DeleteEmpPosInfoByUserId(empId); if (posIdList != null && posIdList.Any()) { List list = new List(); posIdList.ForEach(u => { list.Add(new SysEmpPos { SysEmpId = empId, SysPosId = u }); }); await _sysEmpPosRep.InsertAsync(list); } _sysEmpPosRep.CurrentCommitTran(); } catch (System.Exception) { _sysEmpPosRep.CurrentRollbackTran(); throw; } } /// /// 获取所属职位信息 /// /// 员工Id(用户Id) public async Task> GetEmpPosList(long empId) { return await _sysEmpPosRep.AsQueryable().InnerJoin((e, p) => e.SysPosId == p.Id) .Where((e, p) => e.SysEmpId == empId) .Select((e, p) => new EmpPosOutput { PosId = p.Id, PosCode = p.Code, PosName = p.Name }).ToListAsync(); } public async Task> GetEmpPosList(List empIds) { return await _sysEmpPosRep.AsQueryable().InnerJoin((e, p) => e.SysPosId == p.Id) .Where((e, p) => empIds.Contains(e.SysEmpId)) .Select((e, p) => new EmpPosOutput { PosId = p.Id, PosCode = p.Code, PosName = p.Name }).ToListAsync(); } /// /// 根据职位Id判断该职位下是否有员工 /// /// /// public async Task HasPosEmp(long posId) { return await _sysEmpPosRep.AnyAsync(u => u.SysPosId == posId); } /// /// 根据员工Id删除对用的员工-职位信息 /// /// /// public async Task DeleteEmpPosInfoByUserId(long empId) { await _sysEmpPosRep.DeleteAsync(u => u.SysEmpId == empId); } /// /// 通过职位代码列表获取人员ID信息 /// /// 职位代码列表 /// 返回人员ID列表 public async Task> GetAllEmpByPos(List posCodeList) { var query = _sysPosRep.AsQueryable().Where(a => posCodeList.Contains(a.Code)); var list = await query.InnerJoin((l,r)=>l.Id == r.SysPosId) .InnerJoin((l,r,x)=> r.SysEmpId == x.Id) .Select((l, r,x) => new EmpPosOutput { PosId = l.Id, PosCode = l.Code, PosName = l.Name, SysEmpId = x.Id, SysEmpName = x.Name }).ToListAsync(); return list; } }