liuying
2025-09-24 6efa5f6ca7536a37e3af3592bb42db63bcb8371d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using iWare.Wms.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Mapster;
using Microsoft.EntityFrameworkCore;
 
namespace iWare.Wms.Application
{
    /// <summary>
    /// 员工服务
    /// </summary>
    public class SysEmpService : ISysEmpService, ITransient
    {
        private readonly IRepository<SysEmp> _sysEmpRep;  // 员工表仓储
 
        private readonly ISysEmpExtOrgPosService _sysEmpExtOrgPosService;
        private readonly ISysEmpPosService _sysEmpPosService;
 
        public SysEmpService(IRepository<SysEmp> sysEmpRep,
                             ISysEmpExtOrgPosService sysEmpExtOrgPosService,
                             ISysEmpPosService sysEmpPosService)
        {
            _sysEmpRep = sysEmpRep;
            _sysEmpExtOrgPosService = sysEmpExtOrgPosService;
            _sysEmpPosService = sysEmpPosService;
        }
 
        /// <summary>
        /// 获取用户员工相关信息(包括登录)
        /// </summary>
        /// <param name="empId"></param>
        /// <returns></returns>
        public async Task<EmpOutput> 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<EmpOutput>();
            empInfoOutput.ExtOrgPos = await _sysEmpExtOrgPosService.GetEmpExtOrgPosList(empId);
            empInfoOutput.Positions = await _sysEmpPosService.GetEmpPosList(empId);
            return empInfoOutput;
        }
 
        /// <summary>
        /// 增加或编辑员工相关信息
        /// </summary>
        /// <returns></returns>
        [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<SysEmp>();
            await _sysEmpRep.InsertNowAsync(emp);
 
            // 更新附属机构职位信息
            await _sysEmpExtOrgPosService.AddOrUpdate(emp.Id, sysEmpParam.ExtIds);
 
            // 更新职位信息
            await _sysEmpPosService.AddOrUpdate(emp.Id, sysEmpParam.PosIdList);
        }
 
        /// <summary>
        /// 修改员工相关机构信息
        /// </summary>
        /// <param name="orgId"></param>
        /// <param name="orgName"></param>
        /// <returns></returns>
        public async Task UpdateEmpOrgInfo(long orgId, string orgName)
        {
            var emps = await _sysEmpRep.Where(u => u.OrgId == orgId).ToListAsync();
            emps.ForEach(u =>
            {
                u.OrgName = orgName;
            });
        }
 
        /// <summary>
        /// 根据机构Id判断该机构下是否有员工
        /// </summary>
        /// <param name="orgId"></param>
        /// <returns></returns>
        public async Task<bool> HasOrgEmp(long orgId)
        {
            return await _sysEmpRep.DetachedEntities.AnyAsync(u => u.OrgId == orgId);
        }
 
        /// <summary>
        /// 根据员工Id删除对应的员工表信息
        /// </summary>
        /// <param name="empId"></param>
        /// <returns></returns>
        //[UnitOfWork]
        public async Task DeleteEmpInfoByUserId(long empId)
        {
            // 删除员工信息
            await _sysEmpRep.DeleteAsync(empId);
 
            // 级联删除对应的员工-附属信息
            await _sysEmpExtOrgPosService.DeleteEmpExtInfoByUserId(empId);
 
            // 级联删除对用的员工-职位信息
            await _sysEmpPosService.DeleteEmpPosInfoByUserId(empId);
        }
 
        /// <summary>
        /// 获取员工机构Id
        /// </summary>
        /// <param name="empId"></param>
        /// <returns></returns>
        public async Task<long> GetEmpOrgId(long empId)
        {
            return (await _sysEmpRep.FirstOrDefaultAsync(u => u.Id == empId, false)).OrgId;
        }
 
        /// <summary>
        /// 获取子机构用户
        /// </summary>
        /// <param name="orgIds"></param>
        /// <returns></returns>
        public async Task<List<SysEmp>> HasOrgEmp(List<long> orgIds)
        {
            return await _sysEmpRep.DetachedEntities.Where(u => orgIds.Contains(u.OrgId)).ToListAsync();
        }
    }
}