工厂环境监测系统实战(五):工厂与设备管理 前言监控大屏展示的是结果本章介绍数据源头——工厂和设备的增删改查管理。工厂管理数据模型工厂使用自关联的树形结构parentId指向上级工厂总厂 (Id1, parentIdnull) ├── 一车间 (Id2, parentId1) │ ├── 产线A (Id4, parentId2) │ └── 产线B (Id5, parentId2) └── 二车间 (Id3, parentId1)public class Company : AggregateRoot { public string CompanyName { get; set; } public int? parentId { get; set; } // 父工厂ID public bool IsContainsLowerLevel { get; set; } // 是否含子工厂 public bool IsEnable { get; set; } }工厂CRUD Controllerpublic class CompanyController : BaseController { // 工厂列表 public ActionResult CompanyList() { var list _companyAppService.GetAllCompany(); return View(list); } // 新增工厂 [HttpPost] public ActionResult CompanyList_AddCompany(CompanyDtoModel model) { _companyAppService.Add(model); return RedirectToAction(CompanyList); } // 编辑工厂 [HttpPost] public ActionResult CompanyList_EditCompany(CompanyDtoModel model) { _companyAppService.Update(model); return RedirectToAction(CompanyList); } // 删除工厂软删除 [HttpPost] public ActionResult RemoveCompany(string companyIds) { _companyAppService.Remove(companyIds); return Json(new { success true }); } }全部使用软删除IsDeleted true不物理删除数据。设备管理设备Facility表与工厂关联同时绑定 TCP 传感器编号public class Facility : AggregateRoot { public string FacilityName { get; set; } // 设备名称 public int CompanyId { get; set; } // 所属工厂 public string Address { get; set; } // 安装位置 public int SensorBN { get; set; } // TCP 传感器编号 // ... }传感器上报数据时通过BN传感器编号匹配到具体设备。用户与工厂权限用户能看到哪些工厂由UserCompany表控制-- 给用户分配工厂 INSERT INTO UserCompany (UserId, CompanyId, IsDeleted) VALUES (1, 2, 0);用户登录后系统自动查询所有关联工厂含子工厂供切换。页面入口功能URL工厂列表/Company/CompanyList新增工厂/Company/CompanyList_AddCompany编辑工厂/Company/CompanyList_EditCompany设备管理/Facility/FacilityList小结工厂用parentId自关联支持多级树形结构全部采用软删除数据可恢复设备通过传感器编号BN关联 TCP 数据源用户-工厂权限通过中间表控制下一章介绍系统 Logo 和品牌定制的实现。 上一篇第4章 — 前端监控大屏实时数据展示 下一篇第6章 — 系统Logo与品牌定制