diff --git a/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs b/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs
index 5530382..be1d362 100644
--- a/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs
+++ b/api_sqlsugar/VolPro.WebApi/Controllers/Warehouse/Partial/base_deviceController.cs
@@ -1,7 +1,6 @@
/*
- *接口编写处...
-*如果接口需要做Action的权限验证,请在Action上使用属性
-*如: [ApiActionPermission("base_device",Enums.ActionPermissionOptions.Search)]
+ *设备管理扩展 — 区域树 + 点位设备列表
+ *所有改动在 Partial 目录,不破坏框架可升级性
*/
using Microsoft.AspNetCore.Mvc;
using System;
@@ -11,23 +10,103 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using VolPro.Entity.DomainModels;
using Warehouse.IServices;
+using System.Linq;
+using Microsoft.EntityFrameworkCore;
namespace Warehouse.Controllers
{
public partial class base_deviceController
{
- private readonly Ibase_deviceService _service;//访问业务代码
- private readonly IHttpContextAccessor _httpContextAccessor;
-
- [ActivatorUtilitiesConstructor]
- public base_deviceController(
- Ibase_deviceService service,
- IHttpContextAccessor httpContextAccessor
- )
- : base(service)
+ ///
+ /// 获取区域→点位→设备树。
+ /// 用于管理端左侧树形控件展示层级结构。
+ /// 格式: [{ id, label, type:"region", children: [{ id, label, type:"point", deviceCount }] }]
+ ///
+ [HttpGet]
+ [Route("/api/DeviceManager/GetRegionTree")]
+ public async Task GetRegionTree()
{
- _service = service;
- _httpContextAccessor = httpContextAccessor;
+ // 获取区域和点位服务
+ var regionSvcType = _service.GetType().Assembly.GetType("Warehouse.Services.warehouse_regionsService");
+ var pointSvcType = _service.GetType().Assembly.GetType("Warehouse.Services.warehouse_devicepointService");
+
+ var regionSvc = regionSvcType?.GetProperty("Instance")?.GetValue(null) as IService;
+ var pointSvc = pointSvcType?.GetProperty("Instance")?.GetValue(null) as IService;
+
+ // 查所有区域
+ var regions = regionSvc != null
+ ? await regionSvc.FindAsIQueryable(x => true).ToListAsync()
+ : new List();
+
+ // 查所有点位
+ var points = pointSvc != null
+ ? await pointSvc.FindAsIQueryable(x => true).ToListAsync()
+ : new List();
+
+ // 统计每个点位下的设备数量
+ var deviceCounts = new Dictionary();
+ var allDevices = await _service.FindAsIQueryable(x => true)
+ .Where(x => x.PointId != null)
+ .GroupBy(x => x.PointId!.Value)
+ .Select(g => new { PointId = g.Key, Count = g.Count() })
+ .ToListAsync();
+ foreach (var g in allDevices)
+ deviceCounts[g.PointId] = g.Count;
+
+ // 构建树形结构
+ var tree = new List