LqUserProfileAuditService.cs 2.37 KB
using System.Linq;
using System.Threading.Tasks;
using NCC.Common.Core.Manager;
using NCC.Common.Filter;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.Extend.Entitys.lq_user_profile_audit;
using NCC.Common.Enum;
using NCC.FriendlyException;
using Microsoft.AspNetCore.Mvc;
using NCC.System.Entitys.Permission;
using SqlSugar;

namespace NCC.Extend
{
    /// <summary>
    /// 用户主档字段级审计查询(R-001)
    /// </summary>
    [ApiDescriptionSettings(Tag = "绿纤用户主档审计", Name = "LqUserProfileAudit", Order = 200)]
    [Route("api/Extend/[controller]")]
    public class LqUserProfileAuditService : IDynamicApiController, ITransient
    {
        private readonly ISqlSugarClient _db;
        private readonly IUserManager _userManager;

        public LqUserProfileAuditService(ISqlSugarClient db, IUserManager userManager)
        {
            _db = db;
            _userManager = userManager;
        }

        /// <summary>
        /// 分页查询指定用户的字段级变更记录(需具备目标用户所在机构的数据权限或管理员)。
        /// </summary>
        [HttpGet("logs")]
        public async Task<dynamic> GetLogs([FromQuery] string targetUserId, [FromQuery] PageInputBase page)
        {
            if (string.IsNullOrWhiteSpace(targetUserId))
            {
                throw NCCException.Oh("targetUserId 不能为空");
            }

            page ??= new PageInputBase();
            var userInfo = await _userManager.GetUserInfo();
            var target = await _db.Queryable<UserEntity>()
                .Where(x => x.Id == targetUserId && x.DeleteMark == null)
                .FirstAsync();
            if (target == null)
            {
                throw NCCException.Oh("目标用户不存在");
            }

            if (!userInfo.isAdministrator
                && !userInfo.dataScope.Any(it => it.organizeId == target.OrganizeId && it.Edit == true))
            {
                throw NCCException.Oh(ErrorCode.D1013);
            }

            var q = _db.Queryable<LqUserProfileAuditEntity>()
                .Where(x => x.TargetUserId == targetUserId)
                .OrderBy(x => x.OperateTime, OrderByType.Desc);

            var data = await q.ToPagedListAsync(page.currentPage, page.pageSize);
            return PageResult<LqUserProfileAuditEntity>.SqlSugarPageResult(data);
        }
    }
}