ke_junjie
2025-06-04 84620534eb627e95811b971a4b552b6a177829bf
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
131
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
{
    /// <summary>
    /// 职位服务
    /// </summary>
    [ApiDescriptionSettings(Name = "Pos", Order = 147)]
    [Route("api")]
    public class SysPosService : ISysPosService, IDynamicApiController, ITransient
    {
        private readonly IRepository<SysPos> _sysPosRep;  // 职位表仓储
 
        private readonly ISysEmpPosService _sysEmpPosService;
        private readonly ISysEmpExtOrgPosService _sysEmpExtOrgPosService;
 
        public SysPosService(IRepository<SysPos> sysPosRep,
                             ISysEmpPosService sysEmpPosService,
                             ISysEmpExtOrgPosService sysEmpExtOrgPosService)
        {
            _sysPosRep = sysPosRep;
            _sysEmpPosService = sysEmpPosService;
            _sysEmpExtOrgPosService = sysEmpExtOrgPosService;
        }
 
        /// <summary>
        /// 分页获取职位
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("sysPos/page")]
        public async Task<PageResult<SysPos>> 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;
        }
 
        /// <summary>
        /// 获取职位列表
        /// </summary>
        /// <returns></returns>
        [HttpGet("sysPos/list")]
        public async Task<List<SysPos>> 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();
        }
 
        /// <summary>
        /// 增加职位
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [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<SysPos>();
            await pos.InsertAsync();
        }
 
        /// <summary>
        /// 删除职位
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [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();
        }
 
        /// <summary>
        /// 更新职位
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [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<SysPos>();
            await pos.UpdateAsync(ignoreNullValues: true);
        }
 
        /// <summary>
        /// 获取职位
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("sysPos/detail")]
        public async Task<SysPos> GetPos([FromQuery] QueryPosInput input)
        {
            return await _sysPosRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id);
        }
    }
}