using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Hncore.Infrastructure.DDD; using Hncore.Infrastructure.WebApi; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Hncore.Pass.Manage.Request; using Hncore.Pass.Manage.Response; using Hncore.Pass.Manage.Service; using Hncore.Infrastructure.Common; using Hncore.Pass.Manage.Domain; using Hncore.Pass.Manage.Response.ManagerToPermission; using Hncore.Infrastructure.Extension; using Hncore.Pass.Manage.Repository; using Hncore.Infrastructure.EF; using Microsoft.EntityFrameworkCore; using Hncore.Pass.ManageDataDomain.Request; namespace Hncore.Pass.Manage.Controllers { [ApiVersion("1.0")] [Route("api/Manage/v{version:apiVersion}/ManageDataDomain/[action]")] public class ManageDataDomainController : HncoreControllerBase { EfDbContext m_DbContext { get; set; } public ManageDataDomainController(EfDbContext _DbContext) { m_DbContext = _DbContext; } /// /// 获取单个管理员 /// /// /// [HttpGet] public async Task GetOne([FromQuery] QueryByIdRequest param) { return Success(await QueryItemManagerResponse.Query( m_DbContext.Set().GetQueryable() , m_DbContext.Set().GetQueryable() , m_DbContext.Set().GetQueryable() , param) ); } /// /// 获取单个管理员,门禁调用 /// /// /// [HttpGet, AllowAnonymous] public async Task GetOneManage([FromQuery] QueryByIdRequest param) { return Success(await m_DbContext.Set().GetOneAsync(p => p.Id == param.Id)); } /// /// 获取管理员的项目列表 /// /// 请求参数对象 /// 响应结果对象 [HttpGet] public async Task Get([FromQuery]int id) { var projectcodes =await m_DbContext.Set().Where(p => p.ManagerId == id && p.DeleteTag == 0).Select(s => s.ProjectCode).ToArrayAsync(); var ret = new { Projectcodes = projectcodes, Managerid = id }; return Success(ret); } /// /// 绑定项目 /// /// 请求参数对象 /// 响应结果对象 [HttpPost] public async Task BindDataDomain([FromBody]RequestBase request) { var requestCodes = request.Data.Projectcodes; //获取当前管理员关联的小区编码 var currentProjects = await m_DbContext.Set().Where(p => p.TenantId == request.TenantId && p.DeleteTag == 0 && p.ManagerId == request.Data.Managerid).ToListAsync(); //添加目前未关联的小区编码 var addList = new List(); var currentCodes = currentProjects.Select(s => s.ProjectCode).ToArray(); foreach (var projectCode in requestCodes.Where(code => !currentCodes.Contains(code))) { addList.Add(new AuthorityManagerDataDomain() { ProjectCode = projectCode, CreatorId = request.OperaterId, TenantId = request.TenantId, ManagerId = request.Data.Managerid, UpdatorId = request.OperaterId, }); } await m_DbContext.Set().AddRangeAsync(addList); //移除将来未关联的小区编码 var removeList = new List(); var removeCodes = currentCodes.Where(code => !requestCodes.Contains(code)).ToArray(); foreach (var managerDataDomain in currentProjects.Where(m => removeCodes.Contains(m.ProjectCode))) { managerDataDomain.UpdatorId = request.OperaterId; managerDataDomain.DeleteTag = 1; removeList.Add(managerDataDomain); } m_DbContext.Set().UpdateRange(removeList); //提交 await m_DbContext.SaveChangesAsync(); return Success(request.Data); } } }