using AgriculturalPlatform.Api.Data; using AgriculturalPlatform.Api.Dtos; using AgriculturalPlatform.Api.Models; using AgriculturalPlatform.Api.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace AgriculturalPlatform.Api.Controllers; [ApiController] [Route("api/orgs")] [Authorize] public class OrgsController(AppDbContext db, DataScopeService scope, CurrentUserService currentUser) : ControllerBase { /// 组织列表(按数据权限过滤) [HttpGet] public async Task List(string? type, string? keyword) { var visible = await scope.GetVisibleOrgIdsAsync(currentUser.Get()); var query = db.Organizations.Include(o => o.Parent).AsQueryable(); if (visible is not null) query = query.Where(o => visible.Contains(o.Id)); if (!string.IsNullOrWhiteSpace(type) && Enum.TryParse(type, out var orgType)) query = query.Where(o => o.Type == orgType); if (!string.IsNullOrWhiteSpace(keyword)) query = query.Where(o => o.Name.Contains(keyword) || o.ContactPerson.Contains(keyword) || o.Phone.Contains(keyword)); var items = await query.OrderBy(o => o.Type).ThenBy(o => o.Id).ToListAsync(); return Ok(items.ToDtos()); } /// 组织详情 [HttpGet("{id:int}")] public async Task> Get(int id) { var org = await db.Organizations.Include(o => o.Parent).FirstOrDefaultAsync(o => o.Id == id); if (org is null) return NotFound(); return Ok(org.ToDto()); } /// 新增组织 [HttpPost] public async Task> Create(OrgSaveRequest req) { if (!Enum.TryParse(req.Type, out var orgType)) return BadRequest(new { message = "组织类型不正确" }); var org = new Organization { Type = orgType, Name = req.Name, ParentId = req.ParentId, ContactPerson = req.ContactPerson, Phone = req.Phone, Address = req.Address, TaxNo = req.TaxNo, IsActive = req.IsActive }; db.Organizations.Add(org); await db.SaveChangesAsync(); return Ok((await db.Organizations.Include(o => o.Parent).FirstAsync(o => o.Id == org.Id)).ToDto()); } /// 修改组织 [HttpPut("{id:int}")] public async Task> Update(int id, OrgSaveRequest req) { var org = await db.Organizations.FindAsync(id); if (org is null) return NotFound(); if (Enum.TryParse(req.Type, out var orgType)) org.Type = orgType; org.Name = req.Name; org.ParentId = req.ParentId; org.ContactPerson = req.ContactPerson; org.Phone = req.Phone; org.Address = req.Address; org.TaxNo = req.TaxNo; org.IsActive = req.IsActive; await db.SaveChangesAsync(); return Ok((await db.Organizations.Include(o => o.Parent).FirstAsync(o => o.Id == org.Id)).ToDto()); } /// 删除组织(存在关联时禁止删除) [HttpDelete("{id:int}")] public async Task Delete(int id) { var org = await db.Organizations.FindAsync(id); if (org is null) return NotFound(); if (await db.Organizations.AnyAsync(o => o.ParentId == id)) return BadRequest(new { message = "该组织下存在下级组织,无法删除" }); if (await db.PurchaseOrders.AnyAsync(p => p.PurchaserOrgId == id)) return BadRequest(new { message = "该组织已有收购业务,无法删除" }); if (await db.Users.AnyAsync(u => u.OrgId == id)) return BadRequest(new { message = "该组织下存在用户,无法删除" }); db.Organizations.Remove(org); await db.SaveChangesAsync(); return Ok(new { message = "删除成功" }); } }