/*
*设备管理扩展 — 区域树 + 点位设备列表
*所有改动在 Partial 目录,不破坏框架可升级性
*/
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
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
{
///
/// 获取区域→点位→设备树。
/// 用于管理端左侧树形控件展示层级结构。
/// 格式: [{ id, label, type:"region", children: [{ id, label, type:"point", deviceCount }] }]
///
[HttpGet]
[Route("/api/DeviceManager/GetRegionTree")]
public async Task GetRegionTree()
{
// 获取区域和点位服务
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