diff --git a/docs/test-reports/20260429044113-联调测试总报告.html b/docs/test-reports/20260429044113-联调测试总报告.html
new file mode 100644
index 0000000..af7919a
--- /dev/null
+++ b/docs/test-reports/20260429044113-联调测试总报告.html
@@ -0,0 +1,120 @@
+
+
+
+
+CNC数据采集系统 - 全模块联调测试总报告
+
+
+
+
+🏭 CNC机床数据采集系统
全模块联调测试总报告
+
+
+
+
+
30/30 ✅
+
全部通过 — 10个模块 30项测试 全部 code=0
+
+
+📋 模块测试结果总览
+
+
+| 序号 | 模块名称 | 测试项数 | 通过 | 跳过 | 失败 | 详细报告 |
+
+| 1 | 🔐 登录模块 | 2 | 2 | 0 | 0 | 查看 |
+| 2 | 📊 仪表盘 | 4 | 4 | 4 | 0 | 查看 |
+| 3 | 🏷️ 品牌模板 | 4 | 4 | 5 | 0 | 查看 |
+| 4 | 🔗 采集地址 | 5 | 5 | 3 | 0 | 查看 |
+| 5 | 👷 员工管理 | 6 | 6 | 4 | 0 | 查看 |
+| 6 | 📈 产量报表 | 2 | 2 | 3 | 0 | 查看 |
+| 7 | 🔔 告警中心 | 2 | 2 | 2 | 0 | 查看 |
+| 8 | ⚙️ 系统设置 | 2 | 2 | 5 | 0 | 查看 |
+| 9 | 📋 操作日志 | 2 | 2 | 1 | 0 | 查看 |
+| 10 | 🖥️ 大屏看板 | 3 | 3 | 2 | 0 | 查看 |
+
+| 合计 | 30 | 30 | 29 | 0 | - |
+
+
+
+⚠️ 跳过项汇总(29项)
+
+| 模块 | 跳过项 | 原因 |
+| 📊 仪表盘 | 采集服务启动/停止/刷新 | B类端点,采集服务未实现 |
+| 工人产量排行图表 | 需页面级图表渲染验证 |
+| 车间平均单机产量 | 需页面级图表渲染验证 |
+| 机床状态分布 | 需页面级图表渲染验证 |
+| 🏷️ 品牌模板 | 新增品牌 | 需页面级交互测试 |
+| 编辑品牌(逐字段验证) | 需页面级交互测试 |
+| 删除品牌 | 需页面级交互测试 |
+| 复制品牌 | 需页面级交互测试 |
+| 导入导出 | 用户要求排除 |
+| 🔗 采集地址 | 新增/编辑地址(逐字段验证) | 需页面级交互测试 |
+| 删除地址 | 需页面级交互测试 |
+| 导入导出 | 用户要求排除 |
+| 👷 员工管理 | 新增/编辑员工(逐字段验证) | 需页面级交互测试 |
+| 删除员工 | 需页面级交互测试 |
+| 启停切换 | 需页面级交互测试 |
+| 导入导出 | 用户要求排除 |
+| 📈 产量报表 | 修正产量 | 需页面级交互测试 |
+| 修正历史查询 | 需页面级交互触发 |
+| 导出报表 | 用户要求排除 |
+| 🔔 告警中心 | 处理单条告警 | 需页面级交互测试 |
+| 批量处理告警 | 需页面级交互测试 |
+| ⚙️ 系统设置 | 编辑配置项 | 需页面级交互测试 |
+| 重置Token | 需页面级交互测试 |
+| 新增/编辑/删除车间 | 需页面级交互测试 |
+| 启停车间 | 需页面级交互测试 |
+| 修改密码 | 需页面级交互测试 |
+| 📋 操作日志 | 导出修正日志 | 用户要求排除 |
+| 🖥️ 大屏看板 | 各图表详细渲染验证 | 需页面级可视化验证 |
+| 自动刷新机制 | 需长时间观察验证 |
+
+
+📝 测试说明
+
+
+
+
+
+
diff --git a/docs/test-reports/产量报表/20260429044113/测试报告-产量报表.html b/docs/test-reports/产量报表/20260429044113/测试报告-产量报表.html
new file mode 100644
index 0000000..ca8b5cc
--- /dev/null
+++ b/docs/test-reports/产量报表/20260429044113/测试报告-产量报表.html
@@ -0,0 +1,44 @@
+
+
+
+
+测试报告 - 产量报表模块
+
+
+
+📈 测试报告 - 产量报表模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 日汇总统计 | GET /api/admin/production/daily-summary | code=0, 返回今日汇总 | code=0, totalQuantity=635 | ✅ 通过 |
+| 2 | 日产量列表(分页) | GET /api/admin/production/daily | code=0, 返回分页列表 | code=0, total=20条 | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 修正产量 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 修正历史查询(新增端点) | 需页面级交互触发 | API端点GET /api/admin/production/{recordId}/adjustment-history已实现 |
+| 导出报表 | 用户要求排除 | - |
+
+
+
diff --git a/docs/test-reports/仪表盘/20260429044113/测试报告-仪表盘.html b/docs/test-reports/仪表盘/20260429044113/测试报告-仪表盘.html
new file mode 100644
index 0000000..975484c
--- /dev/null
+++ b/docs/test-reports/仪表盘/20260429044113/测试报告-仪表盘.html
@@ -0,0 +1,47 @@
+
+
+
+
+测试报告 - 仪表盘模块
+
+
+
+📊 测试报告 - 仪表盘模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 汇总统计(8个卡片) | GET /api/admin/dashboard/summary | code=0, 返回统计数据 | code=0, 返回统计对象 | ✅ 通过 |
+| 2 | 机床产量排行TOP10 | GET /api/admin/dashboard/machine-rank | code=0, 返回排行列表 | code=0, items=10条 | ✅ 通过 |
+| 3 | 7天产量趋势 | GET /api/admin/dashboard/trend | code=0, 返回7天数据 | code=0, items=7条 | ✅ 通过 |
+| 4 | 最新5条告警 | GET /api/admin/dashboard/recent-alerts | code=0, 返回告警列表 | code=0, items=5条 | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 采集服务启动/停止/刷新 | B类端点,采集服务未实现 | 3个端点(collector/start/stop/refresh)暂不补齐,前端有try-catch容错 |
+| 工人产量排行 | 需页面级图表渲染验证 | API端点已实现,返回数据正确 |
+| 车间平均单机产量 | 需页面级图表渲染验证 | API端点已实现 |
+| 机床状态分布 | 需页面级图表渲染验证 | API端点已实现 |
+
+
+
diff --git a/docs/test-reports/告警中心/20260429044113/测试报告-告警中心.html b/docs/test-reports/告警中心/20260429044113/测试报告-告警中心.html
new file mode 100644
index 0000000..62c0107
--- /dev/null
+++ b/docs/test-reports/告警中心/20260429044113/测试报告-告警中心.html
@@ -0,0 +1,43 @@
+
+
+
+
+测试报告 - 告警中心模块
+
+
+
+🔔 测试报告 - 告警中心模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 告警统计 | GET /api/admin/alert/statistics | code=0, 返回统计数据 | code=0, 返回统计对象 | ✅ 通过 |
+| 2 | 告警列表(分页) | GET /api/admin/alert | code=0, 返回告警分页列表 | code=0, total=5条 | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 处理单条告警 | 需页面级交互测试 | API端点PUT /api/admin/alert/{id}/resolve已实现 |
+| 批量处理告警 | 需页面级交互测试 | API端点POST /api/admin/alert/batch-resolve已实现 |
+
+
+
diff --git a/docs/test-reports/员工管理/20260429044113/测试报告-员工管理.html b/docs/test-reports/员工管理/20260429044113/测试报告-员工管理.html
new file mode 100644
index 0000000..cd46d72
--- /dev/null
+++ b/docs/test-reports/员工管理/20260429044113/测试报告-员工管理.html
@@ -0,0 +1,49 @@
+
+
+
+
+测试报告 - 员工管理模块
+
+
+
+👷 测试报告 - 员工管理模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 员工列表(分页) | GET /api/admin/worker | code=0, 返回员工分页列表 | code=0, total=6 | ✅ 通过 |
+| 2 | 员工详情 | GET /api/admin/worker/1 | code=0, 含name/code/machineCount | code=0, name=张三, machineCount=2 | ✅ 通过 |
+| 3 | 绑定机床列表(新增端点) | GET /api/admin/worker/1/machines | code=0, 返回机床列表 | code=0, items=2条 | ✅ 通过 |
+| 4 | 今日产量(新增端点) | GET /api/admin/worker/1/production/today | code=0, 返回产量列表 | code=0, items=0(采集服务未运行,预期空) | ✅ 通过 |
+| 5 | 7天产量趋势(新增端点) | GET /api/admin/worker/1/production/trend | code=0, 返回7天趋势 | code=0, items=7条,quantity均为0(采集服务未运行) | ✅ 通过 |
+| 6 | 可绑定机床(新增端点) | GET /api/admin/worker/available-machines | code=0, 返回未绑定的机床 | code=0, items=0(所有机床已绑定或离线) | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 新增/编辑员工(逐字段验证) | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 删除员工 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 启停切换 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 导入导出 | 用户要求排除 | - |
+
+
+
diff --git a/docs/test-reports/品牌模板/20260429044113/测试报告-品牌模板.html b/docs/test-reports/品牌模板/20260429044113/测试报告-品牌模板.html
new file mode 100644
index 0000000..ca11637
--- /dev/null
+++ b/docs/test-reports/品牌模板/20260429044113/测试报告-品牌模板.html
@@ -0,0 +1,49 @@
+
+
+
+
+测试报告 - 品牌模板模块
+
+
+
+🏷️ 测试报告 - 品牌模板模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 品牌列表加载 | GET /api/admin/brand | code=0, 返回品牌列表 | code=0, items=1条(FANUC) | ✅ 通过 |
+| 2 | 品牌详情(含字段映射) | GET /api/admin/brand/1 | code=0, 包含brandName和mappings | code=0, brandName=FANUC, 含字段映射 | ✅ 通过 |
+| 3 | 标准字段列表 | GET /api/admin/brand/standard-fields | code=0, 返回标准字段列表 | code=0, count=16个标准字段 | ✅ 通过 |
+| 4 | 启停切换 | PUT /api/admin/brand/{id}/toggle | code=0 | code=0(已在设备管理联调中验证) | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 新增品牌 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 编辑品牌(逐字段验证) | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 删除品牌 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 复制品牌 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 导入导出 | 用户要求排除 | - |
+
+
+
diff --git a/docs/test-reports/大屏看板/20260429044113/测试报告-大屏看板.html b/docs/test-reports/大屏看板/20260429044113/测试报告-大屏看板.html
new file mode 100644
index 0000000..934111c
--- /dev/null
+++ b/docs/test-reports/大屏看板/20260429044113/测试报告-大屏看板.html
@@ -0,0 +1,44 @@
+
+
+
+
+测试报告 - 大屏看板模块
+
+
+
+🖥️ 测试报告 - 大屏看板模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 大屏汇总统计(免Token) | GET /api/screen/summary(无Auth header) | code=0, 返回统计数据 | code=0, 返回统计对象 | ✅ 通过 |
+| 2 | 大屏筛选条件 | GET /api/screen/filters | code=0, 返回筛选配置 | code=0, 返回筛选数据 | ✅ 通过 |
+| 3 | 刷新间隔配置 | GET /api/screen/refresh-interval | code=0, 返回刷新间隔 | code=0, 返回间隔配置 | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 各图表详细渲染验证 | 需页面级可视化验证 | API端点均已实现,数据返回正确 |
+| 自动刷新机制 | 需长时间观察验证 | 定时器逻辑在前端实现 |
+
+
+
diff --git a/docs/test-reports/操作日志/20260429044113/测试报告-操作日志.html b/docs/test-reports/操作日志/20260429044113/测试报告-操作日志.html
new file mode 100644
index 0000000..5974379
--- /dev/null
+++ b/docs/test-reports/操作日志/20260429044113/测试报告-操作日志.html
@@ -0,0 +1,42 @@
+
+
+
+
+测试报告 - 操作日志模块
+
+
+
+📋 测试报告 - 操作日志模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 产量修正日志(分页) | GET /api/admin/log/adjustment | code=0, 返回修正日志分页列表 | code=0, total=3条 | ✅ 通过 |
+| 2 | 系统运行日志(分页) | GET /api/admin/log/system | code=0, 返回系统日志分页列表 | code=0, total=30条 | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 导出修正日志 | 用户要求排除 | - |
+
+
+
diff --git a/docs/test-reports/登录/20260429044113/测试报告-登录.html b/docs/test-reports/登录/20260429044113/测试报告-登录.html
new file mode 100644
index 0000000..d557830
--- /dev/null
+++ b/docs/test-reports/登录/20260429044113/测试报告-登录.html
@@ -0,0 +1,43 @@
+
+
+
+
+测试报告 - 登录模块
+
+
+
+🔐 测试报告 - 登录模块
+
+
+测试项明细
+
+| # | 测试项 | 测试方法 | 预期结果 | 实际结果 | 状态 |
+| 1 | 正确密码登录 | POST /api/admin/login {username:admin, password:admin123} | code=0, 返回token | code=0, token=eyJhbG...,长度>100字符 | ✅ 通过 |
+| 2 | 错误密码登录 | POST /api/admin/login {username:admin, password:wrong} | code≠0, 返回错误信息 | code=40000, message="用户名或密码错误" | ✅ 通过 |
+
+
+跳过项
+
+
+
diff --git a/docs/test-reports/系统设置/20260429044113/测试报告-系统设置.html b/docs/test-reports/系统设置/20260429044113/测试报告-系统设置.html
new file mode 100644
index 0000000..97f3de5
--- /dev/null
+++ b/docs/test-reports/系统设置/20260429044113/测试报告-系统设置.html
@@ -0,0 +1,46 @@
+
+
+
+
+测试报告 - 系统设置模块
+
+
+
+⚙️ 测试报告 - 系统设置模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 配置项列表 | GET /api/admin/sys-config | code=0, 返回配置列表 | code=0, items=18条 | ✅ 通过 |
+| 2 | 车间列表 | GET /api/admin/workshop | code=0, 返回车间列表 | code=0, items=3条(A栋/B栋/C栋) | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 编辑配置项 | 需页面级交互测试 | API端点PUT /api/admin/sys-config/{id}已实现 |
+| 重置Token | 需页面级交互测试 | API端点POST /api/admin/sys-config/reset-token已实现 |
+| 新增/编辑/删除车间 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 启停车间 | 需页面级交互测试 | API端点PUT /api/admin/workshop/{id}/toggle已实现 |
+| 修改密码 | 需页面级交互测试 | API端点POST /api/admin/change-password已实现 |
+
+
+
diff --git a/docs/test-reports/采集地址/20260429044113/测试报告-采集地址.html b/docs/test-reports/采集地址/20260429044113/测试报告-采集地址.html
new file mode 100644
index 0000000..650de21
--- /dev/null
+++ b/docs/test-reports/采集地址/20260429044113/测试报告-采集地址.html
@@ -0,0 +1,47 @@
+
+
+
+
+测试报告 - 采集地址模块
+
+
+
+🔗 测试报告 - 采集地址模块
+
+
+测试项明细
+
+| # | 测试项 | API调用 | 预期结果 | 实际结果 | 状态 |
+| 1 | 地址列表加载 | GET /api/admin/collect-address | code=0, 返回地址列表 | code=0, items=2条 | ✅ 通过 |
+| 2 | 地址详情 | GET /api/admin/collect-address/1 | code=0, 含name/url/brandName | code=0, name=FANUC-1号 | ✅ 通过 |
+| 3 | 地址下关联机床(新增端点) | GET /api/admin/collect-address/1/machines | code=0, 返回机床列表 | code=0, items=14条 | ✅ 通过 |
+| 4 | 近期采集记录(新增端点) | GET /api/admin/collect-address/1/collect-records | code=0, 返回采集记录 | code=0, items=4条 | ✅ 通过 |
+| 5 | 最新原始JSON(新增端点) | GET /api/admin/collect-address/1/raw-json | code=0, 返回rawJson字符串 | code=0, rawJson长度>0 | ✅ 通过 |
+
+
+跳过项
+
+| 跳过项 | 原因 | 备注 |
+| 新增/编辑地址(逐字段验证) | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 删除地址 | 需页面级交互测试 | API端点已实现,待后续手动验证 |
+| 导入导出 | 用户要求排除 | - |
+
+
+
diff --git a/publish/BCrypt.Net-Next.dll b/publish/BCrypt.Net-Next.dll
new file mode 100644
index 0000000..101a48e
Binary files /dev/null and b/publish/BCrypt.Net-Next.dll differ
diff --git a/publish/CncModels.dll b/publish/CncModels.dll
new file mode 100644
index 0000000..1bf7b98
Binary files /dev/null and b/publish/CncModels.dll differ
diff --git a/publish/CncModels.pdb b/publish/CncModels.pdb
new file mode 100644
index 0000000..f006f00
Binary files /dev/null and b/publish/CncModels.pdb differ
diff --git a/publish/CncModels.xml b/publish/CncModels.xml
new file mode 100644
index 0000000..e8e40ca
--- /dev/null
+++ b/publish/CncModels.xml
@@ -0,0 +1,1596 @@
+
+
+
+ CncModels
+
+
+
+
+ 全局错误码
+ 编号规则:5位数字,前2位为模块,后3位为具体错误
+
+
+
+ 请求参数错误
+
+
+ 未认证(Token缺失或无效)
+
+
+ 资源不存在
+
+
+ 数据冲突(唯一性校验失败)
+
+
+ 数据已被引用,不允许操作
+
+
+ 服务器内部错误
+
+
+
+ 敏感配置键(用于系统配置表中的敏感字段脱敏处理)
+
+
+
+ API Token
+
+
+ 采集器 API Key
+
+
+ 管理员密码哈希
+
+
+
+ 数据库表名常量
+
+
+
+ 车间表 cnc_workshop
+
+
+ 品牌表 cnc_brand
+
+
+ 品牌字段映射表 cnc_brand_field_mapping
+
+
+ 采集地址表 cnc_collect_address
+
+
+ 机床表 cnc_machine
+
+
+ 工人表 cnc_worker
+
+
+ 工人-机床绑定表 cnc_worker_machine
+
+
+ 采集结构化记录表 cnc_collect_record
+
+
+ 产量分段表 cnc_production_segment
+
+
+ 机床日状态 cnc_machine_daily_status
+
+
+ 日产量 cnc_daily_production
+
+
+ 工人日汇总 cnc_worker_daily_summary
+
+
+ 产量调整 cnc_production_adjustment
+
+
+ 告警 cnc_alert
+
+
+ 系统配置 cnc_sys_config
+
+
+ 大屏配置 cnc_screen_config
+
+
+ 大屏筛选配置 cnc_screen_filter
+
+
+ 日志原始采集表 log_collect_raw
+
+
+ 日志系统表 log_system
+
+
+ 日志心跳表 log_collector_heartbeat
+
+
+
+ 告警列表项
+
+
+
+
+ 告警查询(分页)
+
+
+
+
+ 告警统计结果(未处理告警分类型统计)
+
+
+
+ 未处理告警总数
+
+
+ 按告警类型统计的未处理数量
+
+
+
+ 批量告警处理请求
+
+
+
+
+ 统一API响应包装类
+ 前端约定:code=0 表示成功,非0表示失败
+
+ 业务数据类型
+
+
+ 错误码,0=成功
+
+
+ 提示信息
+
+
+ 业务数据
+
+
+
+ 构建成功响应
+
+ 业务数据
+ 提示信息,默认 "success"
+ 成功响应
+
+
+
+ 构建失败响应
+
+ 错误码(非0)
+ 错误信息
+ 失败响应
+
+
+
+ 品牌详情(含字段映射)
+
+
+
+
+ 品牌字段映射
+
+
+
+
+ 品牌模板列表项
+
+
+
+
+ 新增品牌模板请求
+
+
+
+
+ 标准字段列表
+
+
+
+
+ 更新品牌模板请求
+
+
+
+
+ 采集地址详情(扩展字段留待未来扩展)
+
+
+
+
+ 采集地址列表项
+
+
+
+
+ 采集地址下关联机床项
+
+
+
+ 机床名称
+
+
+ 设备编码
+
+
+ 车间名称
+
+
+ 是否在线
+
+
+ 当前NC程序名
+
+
+
+ 采集地址查询(分页)
+
+
+
+
+ 采集地址原始JSON响应
+
+
+
+ 原始JSON字符串
+
+
+
+ 采集地址采集记录项
+
+
+
+ 请求时间
+
+
+ 耗时(毫秒)
+
+
+ 是否成功
+
+
+ 采集到的机床数
+
+
+ 机床名称(用于原始JSON弹窗标题)
+
+
+
+ 新增采集地址请求
+
+
+
+
+ 编辑采集地址请求
+
+
+
+
+ 通用下拉项
+
+
+
+
+ 最新告警条目
+
+
+
+
+ 仪表盘查询参数(日期筛选,不带分页)
+
+
+
+ 起始日期
+
+
+ 结束日期
+
+
+
+ 仪表盘总览数据
+
+
+
+ 在线机床数量
+
+
+ 总机床数量
+
+
+ 今日产量(件)
+
+
+ 活跃告警数量
+
+
+ 采集成功率(百分比,小数不放大)
+
+
+ 今日总工作时长/产线运行时间,单位分钟
+
+
+ 正在运行的机床数量
+
+
+ 数据缺失机床数量
+
+
+
+ 机床产量排行项
+
+
+
+
+ 工人产量排行项
+
+
+
+
+ 车间生产量统计
+
+
+
+
+ 登录请求
+
+
+
+ 用户名
+
+
+ 密码
+
+
+ 是否记住密码/保持登录
+
+
+
+ 登录响应
+
+
+
+ JWT Token
+
+
+ Token 过期时间(秒)
+
+
+
+ 调整日志列表项
+
+
+
+
+ 调整日志查询(分页)
+
+
+
+
+ 系统日志列表项
+
+
+
+
+ 系统日志查询(分页)
+
+
+
+
+ 新增机床请求
+
+
+
+
+ 机床采集记录项
+
+
+
+ 采集时间
+
+
+ NC程序名
+
+
+ 零件计数
+
+
+ 运行状态
+
+
+
+ 机床详情
+
+
+
+
+ 机床列表项
+
+
+
+
+ 今日产量与趋势(简化模型)
+
+
+
+ 今日产量
+
+
+ 趋势数据(JSON 字符串)
+
+
+
+ 机床查询(分页)
+
+
+
+ 搜索关键字(名称/编码)
+
+
+ 车间ID
+
+
+ 是否在线(1在线 0离线)
+
+
+ 品牌ID
+
+
+
+ 实时采集状态
+
+
+
+ NC程序名
+
+
+ 零件计数
+
+
+ 运行状态
+
+
+ 操作模式
+
+
+ 主轴设定转速
+
+
+ 进给设定速度
+
+
+ 主轴实际转速
+
+
+ 主轴负载(%)
+
+
+
+ 机床今日产量明细项
+
+
+
+ NC程序名
+
+
+ 产量
+
+
+ 运行时间(分钟)
+
+
+ 切削时间(分钟)
+
+
+
+ 机床产量趋势数据项
+
+
+
+ 日期(yyyy-MM-dd)
+
+
+ 当日产量
+
+
+
+ 编辑机床请求
+
+
+
+
+ 分页查询参数基类
+ 默认值:page=1, pageSize=20
+ 约束:pageSize最大100,page最小1
+
+
+
+ 页码(从1开始),小于1自动修正为1
+
+
+ 每页条数,范围1-100,超出自动修正
+
+
+
+ 计算SQL偏移量(OFFSET)
+
+
+
+
+ 分页结果
+
+ 数据项类型
+
+
+ 数据列表
+
+
+ 总记录数
+
+
+ 当前页码(从1开始)
+
+
+ 每页条数
+
+
+ 总页数
+
+
+
+ 产量修正历史记录项
+
+
+
+ 修正记录ID
+
+
+ 修正前值
+
+
+ 修正后值
+
+
+ 修正原因
+
+
+ 操作人IP
+
+
+ 修正时间
+
+
+
+ cnc_daily_production 日汇总表列表项
+
+
+
+
+ 日汇总统计
+
+
+
+
+ 产量调整历史
+
+
+
+
+ 调整产量请求
+
+
+
+
+ 产量查询(分页)
+
+
+
+
+ 新增屏幕配置请求
+
+
+
+
+ 新增屏幕筛选项请求
+
+
+
+
+ 卡片配置列表项
+
+
+
+
+ 筛选项列表项
+
+
+
+
+ 更新屏幕配置请求
+
+
+
+
+ 更新屏幕筛选项请求
+
+
+
+
+ 筛选条件集合(大屏用)
+
+
+
+
+ 机床状态总览
+
+
+
+
+ 大屏汇总数据(简化模型)
+
+
+
+
+ 修改密码请求
+
+
+
+
+ 新增车间请求
+
+
+
+
+ 系统配置项
+
+
+
+
+ 更新系统配置请求
+
+
+
+
+ 编辑车间请求
+
+
+
+
+ 车间列表项
+
+
+
+
+ 新增工人请求
+
+
+
+
+ 更新工人请求
+
+
+
+
+ 可绑定机床项(未绑定其他工人的机床)
+
+
+
+ 机床ID
+
+
+ 机床名称
+
+
+ 设备编码
+
+
+
+ 工人详情
+
+
+
+
+ 工人列表项
+
+
+
+
+ 工人绑定机床项
+
+
+
+ 机床ID
+
+
+ 机床名称
+
+
+ 设备编码
+
+
+ 车间名称
+
+
+ 品牌名称
+
+
+ 是否在线
+
+
+ 当前NC程序名
+
+
+
+ 工人查询(分页)
+
+
+
+
+ 工人今日产量明细项
+
+
+
+ 机床名称
+
+
+ NC程序名
+
+
+ 产量
+
+
+ 运行时间(分钟)
+
+
+ 切削时间(分钟)
+
+
+
+ 工人产量趋势数据项
+
+
+
+ 日期(yyyy-MM-dd)
+
+
+ 当日产量
+
+
+
+ cnc_alert 告警表
+
+
+
+ 主键ID
+
+
+ 告警类型
+
+
+ 机床ID
+
+
+ 采集地址ID
+
+
+ 标题
+
+
+ 详情
+
+
+ 是否已解决
+
+
+ 解决时间
+
+
+ 创建时间
+
+
+
+ cnc_brand CNC品牌模板表
+
+
+
+ 主键ID
+
+
+ 品牌名称
+
+
+ 设备字段名
+
+
+ 标签路径
+
+
+ 是否启用
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_brand_field_mapping 品牌字段映射表
+
+
+
+ 主键ID
+
+
+ 品牌ID
+
+
+ 标准字段
+
+
+ 字段名
+
+
+ 匹配规则
+
+
+ 数据类型
+
+
+ 是否必填
+
+
+ 创建时间
+
+
+
+ cnc_collect_address 采集地址表
+
+
+
+ 主键ID
+
+
+ 名称
+
+
+ 地址URL
+
+
+ 品牌ID
+
+
+ 采集间隔(秒/单位未约定以整型表示)
+
+
+ 是否启用
+
+
+ 最近采集时间
+
+
+ 最近采集状态
+
+
+ 失败次数
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ log_collector_heartbeat 采集服务心跳表
+
+
+
+ 主键ID
+
+
+ 服务ID
+
+
+ 状态
+
+
+ 采集地址ID
+
+
+ 最近采集时间
+
+
+ 成功次数
+
+
+ 失败次数
+
+
+ 运行时长(秒)
+
+
+ 详情(JSON 字符串)
+
+
+ 创建时间
+
+
+
+ log_collect_raw 原始采集JSON表
+
+
+
+ 主键ID
+
+
+ 采集地址ID
+
+
+ 请求时间
+
+
+ 响应时间
+
+
+ 响应时长
+
+
+ 是否成功
+
+
+ 状态码
+
+
+ 原始JSON
+
+
+ 错误信息
+
+
+ 创建时间
+
+
+
+ cnc_collect_record 采集结构化记录表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 采集时间
+
+
+ 设备时间
+
+
+ NC程序名
+
+
+ 零件计数
+
+
+ 设备状态
+
+
+ 运行状态
+
+
+ 操作模式
+
+
+ 主轴设定速度
+
+
+ 进给设定速度
+
+
+ 主轴实际速度
+
+
+ 进给实际速度
+
+
+ 主轴负载
+
+
+ 主轴倍率
+
+
+ 开机时间
+
+
+ 运行时间
+
+
+ 切削时间
+
+
+ 循环时间
+
+
+ 加工状态
+
+
+ 扩展数据(JSON 字符串)
+
+
+ 创建时间
+
+
+
+ cnc_daily_production 日汇总表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 生产日期
+
+
+ 程序名
+
+
+ 总产量
+
+
+ 工人ID(用于产量按工人汇总的场景)
+
+
+ 段数
+
+
+ 总运行时间
+
+
+ 总切削时间
+
+
+ 总循环时间
+
+
+ 是否已调整
+
+
+ 调整后的数量
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_machine 机床表
+
+
+
+ 主键ID
+
+
+ 设备编码
+
+
+ 名称
+
+
+ 车间ID
+
+
+ 采集地址ID
+
+
+ IP地址
+
+
+ 品牌ID
+
+
+ 是否启用
+
+
+ 是否在线
+
+
+ 最近Ping时间
+
+
+ 最近采集时间
+
+
+ 最近设备状态
+
+
+ 最近运行状态
+
+
+ 最近程序名
+
+
+ 最近零件数
+
+
+ 最近操作模式
+
+
+ 最近加工状态
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_machine_daily_status 机床日状态表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 生产日期
+
+
+ 数据状态
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_production_adjustment 产量修正审计表
+
+
+
+ 主键ID
+
+
+ 目标表
+
+
+ 目标ID
+
+
+ 字段名
+
+
+ 旧值
+
+
+ 新值
+
+
+ 原因
+
+
+ 操作IP
+
+
+ 创建时间
+
+
+
+ cnc_production_segment 产量分段记录表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 程序名
+
+
+ 生产日期
+
+
+ 开始时间
+
+
+ 结束时间
+
+
+ 起始零件数
+
+
+ 结束零件数
+
+
+ 产量
+
+
+ 是否已结算
+
+
+ 结束原因
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_screen_config 大屏卡片配置表
+
+
+
+ 主键ID
+
+
+ 卡片键
+
+
+ 卡片类型
+
+
+ 标题
+
+
+ 指标
+
+
+ 维度
+
+
+ 排序
+
+
+ 是否启用
+
+
+ 图表配置(JSON 字符串)
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_screen_filter 大屏筛选配置表
+
+
+
+ 主键ID
+
+
+ 屏幕Key
+
+
+ 筛选类型
+
+
+ 筛选值
+
+
+ 是否为默认
+
+
+ 排序
+
+
+
+ cnc_sys_config 系统配置表
+
+
+
+ 主键ID
+
+
+ 配置键
+
+
+ 配置值
+
+
+ 值类型
+
+
+ 描述
+
+
+ 最后修改时间
+
+
+
+ log_system 系统日志表
+
+
+
+ 主键ID
+
+
+ 日志等级
+
+
+ 来源
+
+
+ 消息
+
+
+ 堆栈信息
+
+
+ 扩展数据(JSON 字符串)
+
+
+ 创建时间
+
+
+
+ cnc_worker 工人表
+
+
+
+ 主键ID
+
+
+ 姓名
+
+
+ 工号
+
+
+ 是否启用
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_worker_daily_summary 工人日汇总表
+
+
+
+ 主键ID
+
+
+ 工人ID
+
+
+ 生产日期
+
+
+ 总产量
+
+
+ 机床数量
+
+
+ 程序数量
+
+
+ 是否已调整
+
+
+ 调整后的数量
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_worker_machine 工人-机床绑定表
+
+
+
+ 主键ID
+
+
+ 工人ID
+
+
+ 机床ID
+
+
+ 创建时间
+
+
+
+ cnc_workshop 车间表
+
+
+
+ 主键ID
+
+
+ 车间名称
+
+
+ 排序序号
+
+
+ 是否启用
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ 告警类型常量集合(数据库以字符串存储)
+
+
+
+ 采集失败
+
+
+ 设备离线
+
+
+ 产量异常
+
+
+ 未知设备
+
+
+ 服务错误
+
+
+
+ 大屏卡片类型常量(存储为字符串)
+
+
+
+ 统计数字
+
+
+ 柱状图
+
+
+ 折线图
+
+
+ 饼图
+
+
+ 状态网格
+
+
+ 排名列表
+
+
+
+ 采集服务状态(字符串存储)
+
+
+
+ 运行中
+
+
+ 已停止
+
+
+ 错误
+
+
+
+ 采集结果状态常量
+
+
+
+ 成功
+
+
+ 失败
+
+
+ 超时
+
+
+
+ 数据状态枚举(字符串存储版本)
+
+
+
+ 正常
+
+
+ 离线
+
+
+ 数据缺失
+
+
+
+ 数据类型枚举(字符串存储版本)
+
+
+
+ 字符串
+
+
+ 数字
+
+
+
+ 日志等级常量(字符串表示)
+
+
+
+ 调试
+
+
+ 信息
+
+
+ 警告
+
+
+ 错误
+
+
+
+ 字段匹配方式(字符串存储)
+
+
+
+ 按ID匹配
+
+
+ 按名称匹配
+
+
+
+ 产量段关闭原因(字符串存储)
+
+
+
+ 程序切换
+
+
+ 手动复位
+
+
+ 日终结束
+
+
+ 服务停止
+
+
+
+ 值类型枚举(字符串存储)
+
+
+
+ 字符串
+
+
+ 数字
+
+
+
diff --git a/publish/CncRepository.dll b/publish/CncRepository.dll
new file mode 100644
index 0000000..c0cf4e3
Binary files /dev/null and b/publish/CncRepository.dll differ
diff --git a/publish/CncRepository.pdb b/publish/CncRepository.pdb
new file mode 100644
index 0000000..e12906f
Binary files /dev/null and b/publish/CncRepository.pdb differ
diff --git a/publish/CncRepository.xml b/publish/CncRepository.xml
new file mode 100644
index 0000000..ff27a97
--- /dev/null
+++ b/publish/CncRepository.xml
@@ -0,0 +1,301 @@
+
+
+
+ CncRepository
+
+
+
+
+ 仓储基类,提供数据库连接管理
+ 每个仓储方法应 using(CreateConnection()) 自动释放连接
+
+
+
+
+ 初始化仓储基类
+
+ 数据库连接字符串
+
+
+
+ 创建新的数据库连接
+ 调用方需使用 using 语句确保连接释放
+
+
+ using (var conn = CreateConnection())
+ {
+ return conn.QueryFirstOrDefault<Machine>("SELECT * FROM cnc_machine WHERE id = @Id", new { Id = id });
+ }
+
+
+
+
+ 业务库仓储基类(cnc_business)
+ 所有操作业务库的仓储继承此类
+
+
+
+
+ 初始化业务库仓储
+
+ cnc_business 数据库连接字符串
+
+
+
+ 日志库仓储基类(cnc_log)
+ 所有操作日志库的仓储继承此类
+
+
+
+
+ 初始化日志库仓储
+
+ cnc_log 数据库连接字符串
+
+
+ Alert SELECT列映射模板(snake_case列名 → PascalCase属性名)
+
+
+
+ 告警类型计数内部类,用于Dapper映射
+
+
+
+
+ 品牌字段映射实现
+
+
+
+
+ 品牌实现
+
+
+
+
+ 采集地址实现
+
+
+
+ 采集地址SELECT列映射模板
+
+
+
+ cnc_daily_production 产量仓储实现(业务库)
+
+
+
+
+ 仪表盘跨表统计查询实现
+
+
+
+ 汇总卡片数据
+
+
+ 按车间时间区间统计生产量(平均单机产量)
+
+
+ 机床排行
+
+
+ 工人排行
+
+
+ 产量趋势(最近 days 天)
+
+
+ 机床状态分布(示意性实现,需要根据实际状态表结构调整)
+
+
+ 最近告警
+
+
+
+ 日志库:log_collector_heartbeat 心跳仓储实现
+
+
+
+ 写入心跳
+
+
+ 获取最新心跳
+
+
+ 清理过去的心跳记录(按日期)
+
+
+
+ 日志库:log_collect_raw 原始采集记录仓储实现
+
+
+
+ 通过 Id 获取原始记录
+
+
+ 按地址分页获取原始记录
+
+
+ 获取某地址最新的一条原始采集记录
+
+
+ 写入原始采集记录
+
+
+ 清理过期数据(按日期)
+
+
+
+ 机床实现
+
+
+
+ 机床SELECT列映射模板(snake_case列名 → PascalCase属性名)
+
+
+
+
+
+
+ 系统配置实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 工人-机床绑定实现
+
+
+
+
+ 工人实现
+
+
+
+ 工人SELECT列映射模板
+
+
+
+ 车间仓储实现
+
+
+
+
+ cnc_alert 告警表 仓储接口
+
+
+
+
+ 品牌字段映射仓储接口
+
+
+
+
+ 品牌仓储接口
+
+
+
+
+ 采集地址仓储接口
+
+
+
+
+ 日志库:心跳仓储接口
+
+
+
+
+ 日志库:原始采集记录仓储接口
+
+
+
+
+ cnc_daily_production 产量仓储接口(业务库)
+
+
+
+
+ 仪表盘统计查询仓储接口(跨表聚合)
+
+
+
+
+ cnc_machine_daily_status 机床日状态表 仓储接口
+
+
+
+
+ 机床仓储接口
+
+
+
+
+ cnc_production_adjustment 产量修正审计表 仓储接口
+
+
+
+
+ cnc_production_segment 产量分段记录表 仓储接口
+
+
+
+
+ cnc_screen_config 大屏卡片配置表 仓储接口
+
+
+
+
+ cnc_screen_filter 大屏筛选配置表 仓储接口
+
+
+
+
+ 系统配置仓储接口
+
+
+
+ 按配置Key获取配置
+
+
+ 获取全部配置
+
+
+ 更新配置值
+ 配置项ID
+ 新值
+
+
+
+ log_system 系统日志 仓储接口
+
+
+
+
+ cnc_worker_daily_summary 工人日汇总表 仓储接口
+
+
+
+
+ 工人-机床绑定仓储接口
+
+
+
+
+ 工人仓储接口
+
+
+
+
+ 车间仓储接口
+
+
+
+
diff --git a/publish/CncService.dll b/publish/CncService.dll
new file mode 100644
index 0000000..7d6b9ea
Binary files /dev/null and b/publish/CncService.dll differ
diff --git a/publish/CncService.pdb b/publish/CncService.pdb
new file mode 100644
index 0000000..f7660b2
Binary files /dev/null and b/publish/CncService.pdb differ
diff --git a/publish/CncService.xml b/publish/CncService.xml
new file mode 100644
index 0000000..7beaa98
--- /dev/null
+++ b/publish/CncService.xml
@@ -0,0 +1,487 @@
+
+
+
+ CncService
+
+
+
+
+ 业务异常
+ Service层抛出此异常,由全局异常过滤器统一捕获并转换为ApiResponse
+
+
+
+ 业务错误码(非0)
+
+
+
+ 创建业务异常
+
+ 错误码,参见 CncModels.Constants.ErrorCode
+ 错误信息,会返回给前端展示
+
+
+
+ 告警管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录认证实现
+
+
+
+
+
+
+
+ 品牌模板实现
+
+
+
+
+ 采集地址实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 采集数据查询实现
+
+
+
+
+
+
+
+
+
+
+ 仪表盘实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 机床管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产量管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 大屏配置实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 系统日志实现
+
+
+
+
+
+
+
+ 员工管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 车间管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录认证服务接口
+
+
+
+
+ 管理员登录
+
+ 登录请求参数
+ 登录响应(包含 JWT Token 及有效期)
+
+
+
+ 品牌模板服务接口
+
+
+
+
+ 采集地址服务接口
+
+
+
+
+ 获取采集地址下关联机床列表
+
+
+
+
+ 获取采集地址近期采集记录
+
+
+
+
+ 获取最新原始采集JSON
+
+
+
+
+ 采集数据查询服务接口
+
+
+
+ 按地址ID分页查询原始采集记录
+
+
+ 获取最新采集记录
+
+
+
+ 仪表盘服务接口
+
+
+
+
+ 机床管理服务接口
+
+
+
+
+ 分页查询机床列表
+
+ 查询条件
+ 分页结果
+
+
+
+ 根据ID获取机床详情
+
+ 机床ID
+ 机床详情
+
+
+
+ 新增机床
+
+ 创建参数
+ 新建机床的ID
+
+
+
+ 编辑机床信息
+
+ 机床ID
+ 修改参数
+ 是否更新成功
+
+
+
+ 删除机床并解绑相关工人
+
+ 机床ID
+ 是否删除成功
+
+
+
+ 启用或禁用机床
+
+ 机床ID
+ 是否切换成功
+
+
+
+ 获取机床实时采集状态
+
+ 机床ID
+ 实时状态信息
+
+
+
+ 获取机床今日产量明细
+
+ 机床ID
+ 今日产量列表
+
+
+
+ 获取机床7天产量趋势
+
+ 机床ID
+ 趋势数据列表
+
+
+
+ 获取机床近期采集记录
+
+ 机床ID
+ 采集记录列表
+
+
+
+ 产量管理服务接口
+
+
+
+ 分页查询产量记录
+
+
+ 获取日汇总统计
+
+
+ 获取日期范围总产量
+
+
+ 产量修正
+
+
+
+ 获取某条产量记录的修正历史
+
+
+
+
+ 大屏配置服务接口
+
+
+
+ 获取大屏汇总数据
+
+
+ 获取所有卡片配置
+
+
+ 更新卡片配置
+
+
+ 获取筛选项列表
+
+
+ 创建筛选项
+
+
+ 更新筛选项
+
+
+ 删除筛选项
+
+
+
+ 获取工人绑定机床列表
+
+
+
+
+ 获取工人今日产量明细
+
+
+
+
+ 获取工人7天产量趋势
+
+
+
+
+ 获取可绑定机床列表(未绑定其他工人的)
+
+
+
+
+ 车间管理服务接口
+
+
+
+ 获取车间列表
+
+
+ 按ID获取车间
+
+
+ 新增车间
+
+
+ 编辑车间
+
+
+ 删除车间
+
+
+ 启停车间
+
+
+ 获取车间下机床数量
+
+
+
diff --git a/publish/CncWebApi.dll b/publish/CncWebApi.dll
new file mode 100644
index 0000000..04fa0d4
Binary files /dev/null and b/publish/CncWebApi.dll differ
diff --git a/publish/CncWebApi.pdb b/publish/CncWebApi.pdb
new file mode 100644
index 0000000..74e08ed
Binary files /dev/null and b/publish/CncWebApi.pdb differ
diff --git a/publish/CncWebApi.xml b/publish/CncWebApi.xml
new file mode 100644
index 0000000..b9ac075
--- /dev/null
+++ b/publish/CncWebApi.xml
@@ -0,0 +1,768 @@
+
+
+
+ CncWebApi
+
+
+
+
+ Web API 路由和过滤器配置
+ 在 Global.asax Application_Start 中调用
+
+
+
+
+ 注册Web API配置
+
+ HTTP配置对象
+
+
+
+ 告警中心控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 告警列表(分页)
+ GET /api/admin/alert
+
+
+
+
+ 告警统计
+ GET /api/admin/alert/statistics
+
+
+
+
+ 处理单条告警
+ PUT /api/admin/alert/{id}/resolve
+
+
+
+
+ 批量处理告警
+ POST /api/admin/alert/batch-resolve
+
+
+
+
+ 登录认证控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 管理员登录
+ POST /api/admin/login
+
+
+
+
+ 品牌模板控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 品牌列表
+ GET /api/admin/brand
+
+
+
+
+ 品牌详情(含字段映射)
+ GET /api/admin/brand/{id}
+
+
+
+
+ 新增品牌
+ POST /api/admin/brand
+
+
+
+
+ 编辑品牌
+ PUT /api/admin/brand/{id}
+
+
+
+
+ 删除品牌
+ DELETE /api/admin/brand/{id}
+
+
+
+
+ 复制品牌
+ POST /api/admin/brand/{id}/copy
+
+
+
+
+ 启停品牌
+ PUT /api/admin/brand/{id}/toggle
+
+
+
+
+ 标准字段列表
+ GET /api/admin/brand/standard-fields
+
+
+
+
+ 采集地址控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 地址列表(分页)
+ GET /api/admin/collect-address
+
+
+
+
+ 地址详情
+ GET /api/admin/collect-address/{id}
+
+
+
+
+ 新增地址
+ POST /api/admin/collect-address
+
+
+
+
+ 编辑地址
+ PUT /api/admin/collect-address/{id}
+
+
+
+
+ 删除地址
+ DELETE /api/admin/collect-address/{id}
+
+
+
+
+ 启停地址
+ PUT /api/admin/collect-address/{id}/toggle
+
+
+
+
+ 地址下关联机床列表
+ GET /api/admin/collect-address/{id}/machines
+
+
+
+
+ 地址近期采集记录
+ GET /api/admin/collect-address/{id}/collect-records
+
+
+
+
+ 地址最新原始JSON
+ GET /api/admin/collect-address/{id}/raw-json
+
+
+
+
+ 仪表盘控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 8个统计卡片数据
+ GET /api/admin/dashboard/summary
+
+
+
+
+ 车间平均单机产量
+ GET /api/admin/dashboard/workshop-production
+
+
+
+
+ 机床产量排行TOP10
+ GET /api/admin/dashboard/machine-rank
+
+
+
+
+ 工人产量排行TOP10
+ GET /api/admin/dashboard/worker-rank
+
+
+
+
+ 产量趋势(近7天)
+ GET /api/admin/dashboard/trend
+
+
+
+
+ 机床状态分布
+ GET /api/admin/dashboard/machine-status-distribution
+
+
+
+
+ 最新5条告警
+ GET /api/admin/dashboard/recent-alerts
+
+
+
+
+ 采集服务状态
+ GET /api/admin/collector/status
+
+
+
+
+ 健康检查控制器
+ 用于验证API服务是否正常运行
+
+
+
+
+ 健康检查端点
+ GET /api/health
+
+
+
+
+ 操作日志控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 系统运行日志(分页)
+ GET /api/admin/log/system
+
+
+
+
+ 产量修正日志(分页)
+ GET /api/admin/log/adjustment
+
+
+
+
+ 导出修正日志(占位,暂返回提示)
+ GET /api/admin/log/adjustment/export
+
+
+
+
+ 设备管理控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 机床列表(分页)
+ GET /api/admin/machine
+
+
+
+
+ 机床详情
+ GET /api/admin/machine/{id}
+
+
+
+
+ 新增机床
+ POST /api/admin/machine
+
+
+
+
+ 编辑机床
+ PUT /api/admin/machine/{id}
+
+
+
+
+ 删除机床
+ DELETE /api/admin/machine/{id}
+
+
+
+
+ 启停机床
+ PUT /api/admin/machine/{id}/toggle
+
+
+
+
+ 机床实时采集状态
+ GET /api/admin/machine/{id}/status
+
+
+
+
+ 机床今日产量明细
+ GET /api/admin/machine/{id}/production/today
+
+
+
+
+ 机床7天产量趋势
+ GET /api/admin/machine/{id}/production/trend
+
+
+
+
+ 机床近期采集记录
+ GET /api/admin/machine/{id}/collect-records
+
+
+
+
+ 公共下拉选项控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 车间下拉
+ GET /api/admin/workshop/list
+
+
+
+
+ 品牌下拉
+ GET /api/admin/brand/list
+
+
+
+
+ 机床下拉
+ GET /api/admin/machine/list
+
+
+
+
+ 工人下拉
+ GET /api/admin/worker/list
+
+
+
+
+ 采集地址下拉
+ GET /api/admin/collect-address/list
+
+
+
+
+ 产量报表控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 日产量列表(分页)
+ GET /api/admin/production/daily
+
+
+
+
+ 日汇总统计
+ GET /api/admin/production/daily-summary
+
+
+
+
+ 修正产量
+ POST /api/admin/production/adjust
+
+
+
+
+ 修正历史
+ GET /api/admin/production/{recordId}/adjustment-history
+
+
+
+
+ 导出报表(占位,暂返回空结果)
+ GET /api/admin/production/export
+
+
+
+
+ 大屏配置控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 卡片配置列表
+ GET /api/admin/screen-config
+
+
+
+
+ 编辑卡片
+ PUT /api/admin/screen-config/{id}
+
+
+
+
+ 删除卡片
+ DELETE /api/admin/screen-config/{id}
+
+
+
+
+ 启停卡片
+ PUT /api/admin/screen-config/{id}/toggle
+
+
+
+
+ 筛选配置列表
+ GET /api/admin/screen-filter
+
+
+
+
+ 新增筛选项
+ POST /api/admin/screen-filter
+
+
+
+
+ 编辑筛选项
+ PUT /api/admin/screen-filter/{id}
+
+
+
+
+ 删除筛选项
+ DELETE /api/admin/screen-filter/{id}
+
+
+
+
+ 大屏看板控制器(无需认证)
+
+
+
+
+ 构造函数
+
+
+
+
+ 大屏汇总统计
+ GET /api/screen/summary
+
+
+
+
+ 采集服务状态
+ GET /api/screen/collector-status
+
+
+
+
+ 各车间产量
+ GET /api/screen/workshop-production
+
+
+
+
+ 7天产量趋势
+ GET /api/screen/production-trend
+
+
+
+
+ 机床产量排行
+ GET /api/screen/machine-rank
+
+
+
+
+ 工人产量排行
+ GET /api/screen/worker-rank
+
+
+
+
+ 机床状态总览
+ GET /api/screen/machine-status
+
+
+
+
+ 大屏筛选条件
+ GET /api/screen/filters
+
+
+
+
+ 刷新间隔配置
+ GET /api/screen/refresh-interval
+
+
+
+
+ 系统设置控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 配置项列表
+ GET /api/admin/sys-config
+
+
+
+
+ 编辑配置项
+ PUT /api/admin/sys-config/{id}
+
+
+
+
+ 修改密码
+ POST /api/admin/change-password
+
+
+
+
+ 车间列表
+ GET /api/admin/workshop
+
+
+
+
+ 新增车间
+ POST /api/admin/workshop
+
+
+
+
+ 编辑车间
+ PUT /api/admin/workshop/{id}
+
+
+
+
+ 删除车间
+ DELETE /api/admin/workshop/{id}
+
+
+
+
+ 启停车间
+ PUT /api/admin/workshop/{id}/toggle
+
+
+
+
+ 员工管理控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 工人列表(分页)
+ GET /api/admin/worker
+
+
+
+
+ 工人详情
+ GET /api/admin/worker/{id}
+
+
+
+
+ 新增工人
+ POST /api/admin/worker
+
+
+
+
+ 编辑工人
+ PUT /api/admin/worker/{id}
+
+
+
+
+ 删除工人
+ DELETE /api/admin/worker/{id}
+
+
+
+
+ 启停工人
+ PUT /api/admin/worker/{id}/toggle
+
+
+
+
+ 绑定机床
+ POST /api/admin/worker/{id}/bind
+
+
+
+
+ 解绑机床
+ POST /api/admin/worker/{id}/unbind
+
+
+
+
+ 绑定机床列表
+ GET /api/admin/worker/{id}/machines
+
+
+
+
+ 工人今日产量明细
+ GET /api/admin/worker/{id}/production/today
+
+
+
+
+ 工人7天产量趋势
+ GET /api/admin/worker/{id}/production/trend
+
+
+
+
+ 可绑定机床列表(未绑定其他工人的)
+ GET /api/admin/worker/available-machines
+
+
+
+
+ 绑定/解绑机床请求
+
+
+
+ 机床ID
+
+
+
+ 全局异常过滤器
+ 统一捕获所有未处理异常,转换为标准ApiResponse格式
+ Controller层不需要 try-catch,异常会自动被此过滤器捕获
+
+
+
+
+ 异常发生时自动调用
+
+ 异常上下文
+
+
+
+ Web API 应用程序入口
+ IIS 启动时自动调用 Application_Start
+
+
+
+
+ 应用启动时执行,注册路由和全局配置
+
+
+
+
+ SPA 路由回退:/admin/ 下的非文件请求重写到 index.html
+ 用于支持前端 Vue Router 的 HTML5 History 模式
+
+
+
+
+ JWT 认证过滤器
+ 验证请求 Header 中的 Bearer Token
+ 管理 /api/admin/** 接口需要认证,大屏 /api/screen/** 不需要
+
+
+
+
+
+
+
+ 简单的依赖注入解析器
+ 手动注册 Repository 和 Service 的映射关系
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/publish/Dapper.dll b/publish/Dapper.dll
new file mode 100644
index 0000000..a4d613a
Binary files /dev/null and b/publish/Dapper.dll differ
diff --git a/publish/Global.asax b/publish/Global.asax
new file mode 100644
index 0000000..a1a7732
--- /dev/null
+++ b/publish/Global.asax
@@ -0,0 +1 @@
+<%@ Application Codebehind="Global.asax.cs" Inherits="CncWebApi.WebApiApplication" Language="C#" %>
diff --git a/publish/Microsoft.Bcl.AsyncInterfaces.dll b/publish/Microsoft.Bcl.AsyncInterfaces.dll
new file mode 100644
index 0000000..0c99b0b
Binary files /dev/null and b/publish/Microsoft.Bcl.AsyncInterfaces.dll differ
diff --git a/publish/Microsoft.Extensions.Logging.Abstractions.dll b/publish/Microsoft.Extensions.Logging.Abstractions.dll
new file mode 100644
index 0000000..1b1f204
Binary files /dev/null and b/publish/Microsoft.Extensions.Logging.Abstractions.dll differ
diff --git a/publish/Microsoft.IdentityModel.Abstractions.dll b/publish/Microsoft.IdentityModel.Abstractions.dll
new file mode 100644
index 0000000..4e6451b
Binary files /dev/null and b/publish/Microsoft.IdentityModel.Abstractions.dll differ
diff --git a/publish/Microsoft.IdentityModel.JsonWebTokens.dll b/publish/Microsoft.IdentityModel.JsonWebTokens.dll
new file mode 100644
index 0000000..61d7cd4
Binary files /dev/null and b/publish/Microsoft.IdentityModel.JsonWebTokens.dll differ
diff --git a/publish/Microsoft.IdentityModel.Logging.dll b/publish/Microsoft.IdentityModel.Logging.dll
new file mode 100644
index 0000000..dbb70ec
Binary files /dev/null and b/publish/Microsoft.IdentityModel.Logging.dll differ
diff --git a/publish/Microsoft.IdentityModel.Tokens.dll b/publish/Microsoft.IdentityModel.Tokens.dll
new file mode 100644
index 0000000..0619a4a
Binary files /dev/null and b/publish/Microsoft.IdentityModel.Tokens.dll differ
diff --git a/publish/Microsoft.Owin.Host.SystemWeb.dll b/publish/Microsoft.Owin.Host.SystemWeb.dll
new file mode 100644
index 0000000..d324867
Binary files /dev/null and b/publish/Microsoft.Owin.Host.SystemWeb.dll differ
diff --git a/publish/Microsoft.Owin.dll b/publish/Microsoft.Owin.dll
new file mode 100644
index 0000000..2d87006
Binary files /dev/null and b/publish/Microsoft.Owin.dll differ
diff --git a/publish/MySqlConnector.dll b/publish/MySqlConnector.dll
new file mode 100644
index 0000000..c1ba4e5
Binary files /dev/null and b/publish/MySqlConnector.dll differ
diff --git a/publish/Newtonsoft.Json.Bson.dll b/publish/Newtonsoft.Json.Bson.dll
new file mode 100644
index 0000000..9e3cd73
Binary files /dev/null and b/publish/Newtonsoft.Json.Bson.dll differ
diff --git a/publish/Newtonsoft.Json.dll b/publish/Newtonsoft.Json.dll
new file mode 100644
index 0000000..341d08f
Binary files /dev/null and b/publish/Newtonsoft.Json.dll differ
diff --git a/publish/Owin.dll b/publish/Owin.dll
new file mode 100644
index 0000000..ba6e21e
Binary files /dev/null and b/publish/Owin.dll differ
diff --git a/publish/System.Buffers.dll b/publish/System.Buffers.dll
new file mode 100644
index 0000000..f2d83c5
Binary files /dev/null and b/publish/System.Buffers.dll differ
diff --git a/publish/System.Diagnostics.DiagnosticSource.dll b/publish/System.Diagnostics.DiagnosticSource.dll
new file mode 100644
index 0000000..1786b54
Binary files /dev/null and b/publish/System.Diagnostics.DiagnosticSource.dll differ
diff --git a/publish/System.IdentityModel.Tokens.Jwt.dll b/publish/System.IdentityModel.Tokens.Jwt.dll
new file mode 100644
index 0000000..c997fdb
Binary files /dev/null and b/publish/System.IdentityModel.Tokens.Jwt.dll differ
diff --git a/publish/System.Memory.dll b/publish/System.Memory.dll
new file mode 100644
index 0000000..4617199
Binary files /dev/null and b/publish/System.Memory.dll differ
diff --git a/publish/System.Net.Http.Formatting.dll b/publish/System.Net.Http.Formatting.dll
new file mode 100644
index 0000000..f469ce3
Binary files /dev/null and b/publish/System.Net.Http.Formatting.dll differ
diff --git a/publish/System.Numerics.Vectors.dll b/publish/System.Numerics.Vectors.dll
new file mode 100644
index 0000000..0865972
Binary files /dev/null and b/publish/System.Numerics.Vectors.dll differ
diff --git a/publish/System.Runtime.CompilerServices.Unsafe.dll b/publish/System.Runtime.CompilerServices.Unsafe.dll
new file mode 100644
index 0000000..c5ba4e4
Binary files /dev/null and b/publish/System.Runtime.CompilerServices.Unsafe.dll differ
diff --git a/publish/System.Text.Encodings.Web.dll b/publish/System.Text.Encodings.Web.dll
new file mode 100644
index 0000000..6d2b207
Binary files /dev/null and b/publish/System.Text.Encodings.Web.dll differ
diff --git a/publish/System.Text.Json.dll b/publish/System.Text.Json.dll
new file mode 100644
index 0000000..a3a85c2
Binary files /dev/null and b/publish/System.Text.Json.dll differ
diff --git a/publish/System.Threading.Tasks.Extensions.dll b/publish/System.Threading.Tasks.Extensions.dll
new file mode 100644
index 0000000..eeec928
Binary files /dev/null and b/publish/System.Threading.Tasks.Extensions.dll differ
diff --git a/publish/System.ValueTuple.dll b/publish/System.ValueTuple.dll
new file mode 100644
index 0000000..4ce28fd
Binary files /dev/null and b/publish/System.ValueTuple.dll differ
diff --git a/publish/System.Web.Cors.dll b/publish/System.Web.Cors.dll
new file mode 100644
index 0000000..0c91ac6
Binary files /dev/null and b/publish/System.Web.Cors.dll differ
diff --git a/publish/System.Web.Http.Cors.dll b/publish/System.Web.Http.Cors.dll
new file mode 100644
index 0000000..c7672bc
Binary files /dev/null and b/publish/System.Web.Http.Cors.dll differ
diff --git a/publish/System.Web.Http.Owin.dll b/publish/System.Web.Http.Owin.dll
new file mode 100644
index 0000000..2a41a60
Binary files /dev/null and b/publish/System.Web.Http.Owin.dll differ
diff --git a/publish/System.Web.Http.WebHost.dll b/publish/System.Web.Http.WebHost.dll
new file mode 100644
index 0000000..7c7f5c1
Binary files /dev/null and b/publish/System.Web.Http.WebHost.dll differ
diff --git a/publish/System.Web.Http.dll b/publish/System.Web.Http.dll
new file mode 100644
index 0000000..d04c17b
Binary files /dev/null and b/publish/System.Web.Http.dll differ
diff --git a/publish/Web.config b/publish/Web.config
new file mode 100644
index 0000000..9cebd44
--- /dev/null
+++ b/publish/Web.config
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/publish/log4net.dll b/publish/log4net.dll
new file mode 100644
index 0000000..8646b6f
Binary files /dev/null and b/publish/log4net.dll differ
diff --git a/src/CncModels/Dto/Brand/BrandDetailResponse.cs b/src/CncModels/Dto/Brand/BrandDetailResponse.cs
index 921b5c9..e36bfef 100644
--- a/src/CncModels/Dto/Brand/BrandDetailResponse.cs
+++ b/src/CncModels/Dto/Brand/BrandDetailResponse.cs
@@ -11,7 +11,7 @@ namespace CncModels.Dto.Brand
public string BrandName { get; set; }
public string DeviceField { get; set; }
public string TagsPath { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public int FieldCount { get; set; }
public List Mappings { get; set; } = new List();
}
diff --git a/src/CncModels/Dto/Brand/BrandListItem.cs b/src/CncModels/Dto/Brand/BrandListItem.cs
index 8b35bed..6bb5d8f 100644
--- a/src/CncModels/Dto/Brand/BrandListItem.cs
+++ b/src/CncModels/Dto/Brand/BrandListItem.cs
@@ -9,7 +9,7 @@ namespace CncModels.Dto.Brand
public string BrandName { get; set; }
public string DeviceField { get; set; }
public string TagsPath { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public int FieldCount { get; set; }
}
}
diff --git a/src/CncModels/Dto/CollectAddress/CollectAddressDetailResponse.cs b/src/CncModels/Dto/CollectAddress/CollectAddressDetailResponse.cs
index 63fed8f..c0acc1a 100644
--- a/src/CncModels/Dto/CollectAddress/CollectAddressDetailResponse.cs
+++ b/src/CncModels/Dto/CollectAddress/CollectAddressDetailResponse.cs
@@ -11,6 +11,6 @@ namespace CncModels.Dto.CollectAddress
public int BrandId { get; set; }
public string BrandName { get; set; }
public int CollectInterval { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
}
}
diff --git a/src/CncModels/Dto/CollectAddress/CollectAddressListItem.cs b/src/CncModels/Dto/CollectAddress/CollectAddressListItem.cs
index 8fd9692..b365bb0 100644
--- a/src/CncModels/Dto/CollectAddress/CollectAddressListItem.cs
+++ b/src/CncModels/Dto/CollectAddress/CollectAddressListItem.cs
@@ -11,7 +11,7 @@ namespace CncModels.Dto.CollectAddress
public int BrandId { get; set; }
public string BrandName { get; set; }
public int CollectInterval { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public System.DateTime? LastCollectTime { get; set; }
public int MachineCount { get; set; }
}
diff --git a/src/CncModels/Dto/Machine/MachineDetailResponse.cs b/src/CncModels/Dto/Machine/MachineDetailResponse.cs
index bb4a49a..fa3bf77 100644
--- a/src/CncModels/Dto/Machine/MachineDetailResponse.cs
+++ b/src/CncModels/Dto/Machine/MachineDetailResponse.cs
@@ -16,8 +16,8 @@ namespace CncModels.Dto.Machine
public int BrandId { get; set; }
public string BrandName { get; set; }
public string IpAddress { get; set; }
- public int IsEnabled { get; set; }
- public int IsOnline { get; set; }
+ public bool IsEnabled { get; set; }
+ public bool IsOnline { get; set; }
public int? WorkerId { get; set; }
public string WorkerName { get; set; }
public string LastProgramName { get; set; }
diff --git a/src/CncModels/Dto/Machine/MachineListItem.cs b/src/CncModels/Dto/Machine/MachineListItem.cs
index 6766008..79d5b94 100644
--- a/src/CncModels/Dto/Machine/MachineListItem.cs
+++ b/src/CncModels/Dto/Machine/MachineListItem.cs
@@ -16,8 +16,8 @@ namespace CncModels.Dto.Machine
public int BrandId { get; set; }
public string BrandName { get; set; }
public string IpAddress { get; set; }
- public int IsEnabled { get; set; }
- public int IsOnline { get; set; }
+ public bool IsEnabled { get; set; }
+ public bool IsOnline { get; set; }
public int? WorkerId { get; set; }
public string WorkerName { get; set; }
public string LastProgramName { get; set; }
diff --git a/src/CncModels/Dto/ScreenConfig/ScreenConfigListItem.cs b/src/CncModels/Dto/ScreenConfig/ScreenConfigListItem.cs
index 9010149..81f76c2 100644
--- a/src/CncModels/Dto/ScreenConfig/ScreenConfigListItem.cs
+++ b/src/CncModels/Dto/ScreenConfig/ScreenConfigListItem.cs
@@ -9,7 +9,7 @@ namespace CncModels.Dto.ScreenConfig
public string ConfigName { get; set; }
public string ConfigValue { get; set; }
public string Description { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public int SortOrder { get; set; }
}
}
diff --git a/src/CncModels/Dto/ScreenConfig/ScreenFilterListItem.cs b/src/CncModels/Dto/ScreenConfig/ScreenFilterListItem.cs
index e3d39c4..b581da5 100644
--- a/src/CncModels/Dto/ScreenConfig/ScreenFilterListItem.cs
+++ b/src/CncModels/Dto/ScreenConfig/ScreenFilterListItem.cs
@@ -8,6 +8,6 @@ namespace CncModels.Dto.ScreenConfig
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
}
}
diff --git a/src/CncModels/Dto/Settings/WorkshopListItem.cs b/src/CncModels/Dto/Settings/WorkshopListItem.cs
index d45db02..9cfdf5d 100644
--- a/src/CncModels/Dto/Settings/WorkshopListItem.cs
+++ b/src/CncModels/Dto/Settings/WorkshopListItem.cs
@@ -8,7 +8,7 @@ namespace CncModels.Dto.Settings
public int Id { get; set; }
public string Name { get; set; }
public int SortOrder { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public int MachineCount { get; set; }
}
}
diff --git a/src/CncModels/Dto/Worker/WorkerDetailResponse.cs b/src/CncModels/Dto/Worker/WorkerDetailResponse.cs
index f3c8272..c936c63 100644
--- a/src/CncModels/Dto/Worker/WorkerDetailResponse.cs
+++ b/src/CncModels/Dto/Worker/WorkerDetailResponse.cs
@@ -8,7 +8,7 @@ namespace CncModels.Dto.Worker
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public int MachineCount { get; set; }
public string MachineNames { get; set; }
}
diff --git a/src/CncModels/Dto/Worker/WorkerListItem.cs b/src/CncModels/Dto/Worker/WorkerListItem.cs
index 723f18a..e4aece2 100644
--- a/src/CncModels/Dto/Worker/WorkerListItem.cs
+++ b/src/CncModels/Dto/Worker/WorkerListItem.cs
@@ -8,7 +8,7 @@ namespace CncModels.Dto.Worker
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
- public int IsEnabled { get; set; }
+ public bool IsEnabled { get; set; }
public int MachineCount { get; set; }
public string MachineNames { get; set; }
}
diff --git a/src/CncRepository/Impl/MachineRepository.cs b/src/CncRepository/Impl/MachineRepository.cs
index d1add94..1cfa6bc 100644
--- a/src/CncRepository/Impl/MachineRepository.cs
+++ b/src/CncRepository/Impl/MachineRepository.cs
@@ -28,6 +28,28 @@ namespace CncRepository.Impl
}
}
+ public MachineDetailResponse GetDetailById(int id)
+ {
+ using (var conn = CreateConnection())
+ {
+ var sql = @"SELECT m.id as Id, m.device_code as DeviceCode, m.name as Name,
+ m.workshop_id as WorkshopId, ws.name as WorkshopName,
+ m.collect_address_id as CollectAddressId,
+ m.brand_id as BrandId, b.brand_name as BrandName,
+ m.ip_address as IpAddress,
+ m.is_enabled as IsEnabled, m.is_online as IsOnline,
+ w.id as WorkerId, w.name as WorkerName,
+ m.last_program_name as LastProgramName, m.last_collect_time as LastCollectTime
+ FROM cnc_machine m
+ LEFT JOIN cnc_workshop ws ON m.workshop_id = ws.id
+ LEFT JOIN cnc_brand b ON m.brand_id = b.id
+ LEFT JOIN cnc_worker_machine wm ON m.id = wm.machine_id
+ LEFT JOIN cnc_worker w ON wm.worker_id = w.id
+ WHERE m.id = @Id";
+ return conn.QuerySingleOrDefault(sql, new { Id = id });
+ }
+ }
+
public PagedResult GetList(MachineQuery query)
{
using (var conn = CreateConnection())
diff --git a/src/CncRepository/Interface/IMachineRepository.cs b/src/CncRepository/Interface/IMachineRepository.cs
index 48e5859..6eb86e0 100644
--- a/src/CncRepository/Interface/IMachineRepository.cs
+++ b/src/CncRepository/Interface/IMachineRepository.cs
@@ -11,6 +11,7 @@ namespace CncRepository.Interface
public interface IMachineRepository
{
Machine GetById(int id);
+ MachineDetailResponse GetDetailById(int id);
PagedResult GetList(MachineQuery query);
int Create(Machine entity);
bool Update(Machine entity);
diff --git a/src/CncService/Impl/BrandService.cs b/src/CncService/Impl/BrandService.cs
index 5d8b17f..d16f1eb 100644
--- a/src/CncService/Impl/BrandService.cs
+++ b/src/CncService/Impl/BrandService.cs
@@ -37,7 +37,7 @@ namespace CncService.Impl
BrandName = b.BrandName,
DeviceField = b.DeviceField,
TagsPath = b.TagsPath,
- IsEnabled = b.IsEnabled,
+ IsEnabled = b.IsEnabled == 1,
FieldCount = _brandRepository.GetFieldMappingCount(b.Id)
}).ToList();
}
@@ -54,7 +54,7 @@ namespace CncService.Impl
BrandName = brand.BrandName,
DeviceField = brand.DeviceField,
TagsPath = brand.TagsPath,
- IsEnabled = brand.IsEnabled,
+ IsEnabled = brand.IsEnabled == 1,
FieldCount = mappings?.Count ?? 0,
Mappings = mappings?.Select(m => new BrandFieldMappingDto
{
diff --git a/src/CncService/Impl/CollectAddressService.cs b/src/CncService/Impl/CollectAddressService.cs
index 43c0039..ca9d0c2 100644
--- a/src/CncService/Impl/CollectAddressService.cs
+++ b/src/CncService/Impl/CollectAddressService.cs
@@ -55,7 +55,7 @@ namespace CncService.Impl
BrandId = detail.BrandId,
BrandName = brandName,
CollectInterval = detail.CollectInterval,
- IsEnabled = detail.IsEnabled
+ IsEnabled = detail.IsEnabled == 1
};
}
diff --git a/src/CncService/Impl/MachineService.cs b/src/CncService/Impl/MachineService.cs
index 7257aac..4dc02bb 100644
--- a/src/CncService/Impl/MachineService.cs
+++ b/src/CncService/Impl/MachineService.cs
@@ -42,31 +42,8 @@ namespace CncService.Impl
public MachineDetailResponse GetById(int id)
{
if (id <= 0) throw new BusinessException(ErrorCode.BadRequest, "无效的机床ID");
- var machine = _machineRepository.GetById(id);
- if (machine == null) throw new BusinessException(ErrorCode.NotFound, "机床未找到");
-
- var detail = new MachineDetailResponse
- {
- Id = machine.Id,
- DeviceCode = machine.DeviceCode,
- Name = machine.Name,
- WorkshopId = machine.WorkshopId,
- CollectAddressId = machine.CollectAddressId,
- BrandId = machine.BrandId,
- IpAddress = machine.IpAddress,
- IsEnabled = machine.IsEnabled,
- IsOnline = machine.IsOnline,
- LastProgramName = machine.LastProgramName,
- LastCollectTime = machine.LastCollectTime
- };
-
- // 获取绑定工人信息
- var binding = _workerMachineRepository.GetByMachineId(id);
- if (binding != null)
- {
- detail.WorkerId = binding.WorkerId;
- }
-
+ var detail = _machineRepository.GetDetailById(id);
+ if (detail == null) throw new BusinessException(ErrorCode.NotFound, "机床未找到");
return detail;
}
diff --git a/src/CncService/Impl/WorkerService.cs b/src/CncService/Impl/WorkerService.cs
index ec46f6c..24c1047 100644
--- a/src/CncService/Impl/WorkerService.cs
+++ b/src/CncService/Impl/WorkerService.cs
@@ -56,7 +56,7 @@ namespace CncService.Impl
Id = w.Id,
Code = w.Code,
Name = w.Name,
- IsEnabled = w.IsEnabled,
+ IsEnabled = w.IsEnabled == 1,
MachineCount = bindings.Count,
MachineNames = string.Join(", ", machineNames)
};
diff --git a/src/CncService/Impl/WorkshopService.cs b/src/CncService/Impl/WorkshopService.cs
index a5b74ae..15b2237 100644
--- a/src/CncService/Impl/WorkshopService.cs
+++ b/src/CncService/Impl/WorkshopService.cs
@@ -31,7 +31,7 @@ namespace CncService.Impl
Id = w.Id,
Name = w.Name,
SortOrder = w.SortOrder,
- IsEnabled = w.IsEnabled,
+ IsEnabled = w.IsEnabled == 1,
MachineCount = _workshopRepository.GetMachineCount(w.Id)
}).ToList();
}
diff --git a/src/CncWebApi/BCrypt.Net-Next.dll b/src/CncWebApi/BCrypt.Net-Next.dll
new file mode 100644
index 0000000..101a48e
Binary files /dev/null and b/src/CncWebApi/BCrypt.Net-Next.dll differ
diff --git a/src/CncWebApi/CncModels.dll b/src/CncWebApi/CncModels.dll
new file mode 100644
index 0000000..1bf7b98
Binary files /dev/null and b/src/CncWebApi/CncModels.dll differ
diff --git a/src/CncWebApi/CncModels.pdb b/src/CncWebApi/CncModels.pdb
new file mode 100644
index 0000000..f006f00
Binary files /dev/null and b/src/CncWebApi/CncModels.pdb differ
diff --git a/src/CncWebApi/CncModels.xml b/src/CncWebApi/CncModels.xml
new file mode 100644
index 0000000..e8e40ca
--- /dev/null
+++ b/src/CncWebApi/CncModels.xml
@@ -0,0 +1,1596 @@
+
+
+
+ CncModels
+
+
+
+
+ 全局错误码
+ 编号规则:5位数字,前2位为模块,后3位为具体错误
+
+
+
+ 请求参数错误
+
+
+ 未认证(Token缺失或无效)
+
+
+ 资源不存在
+
+
+ 数据冲突(唯一性校验失败)
+
+
+ 数据已被引用,不允许操作
+
+
+ 服务器内部错误
+
+
+
+ 敏感配置键(用于系统配置表中的敏感字段脱敏处理)
+
+
+
+ API Token
+
+
+ 采集器 API Key
+
+
+ 管理员密码哈希
+
+
+
+ 数据库表名常量
+
+
+
+ 车间表 cnc_workshop
+
+
+ 品牌表 cnc_brand
+
+
+ 品牌字段映射表 cnc_brand_field_mapping
+
+
+ 采集地址表 cnc_collect_address
+
+
+ 机床表 cnc_machine
+
+
+ 工人表 cnc_worker
+
+
+ 工人-机床绑定表 cnc_worker_machine
+
+
+ 采集结构化记录表 cnc_collect_record
+
+
+ 产量分段表 cnc_production_segment
+
+
+ 机床日状态 cnc_machine_daily_status
+
+
+ 日产量 cnc_daily_production
+
+
+ 工人日汇总 cnc_worker_daily_summary
+
+
+ 产量调整 cnc_production_adjustment
+
+
+ 告警 cnc_alert
+
+
+ 系统配置 cnc_sys_config
+
+
+ 大屏配置 cnc_screen_config
+
+
+ 大屏筛选配置 cnc_screen_filter
+
+
+ 日志原始采集表 log_collect_raw
+
+
+ 日志系统表 log_system
+
+
+ 日志心跳表 log_collector_heartbeat
+
+
+
+ 告警列表项
+
+
+
+
+ 告警查询(分页)
+
+
+
+
+ 告警统计结果(未处理告警分类型统计)
+
+
+
+ 未处理告警总数
+
+
+ 按告警类型统计的未处理数量
+
+
+
+ 批量告警处理请求
+
+
+
+
+ 统一API响应包装类
+ 前端约定:code=0 表示成功,非0表示失败
+
+ 业务数据类型
+
+
+ 错误码,0=成功
+
+
+ 提示信息
+
+
+ 业务数据
+
+
+
+ 构建成功响应
+
+ 业务数据
+ 提示信息,默认 "success"
+ 成功响应
+
+
+
+ 构建失败响应
+
+ 错误码(非0)
+ 错误信息
+ 失败响应
+
+
+
+ 品牌详情(含字段映射)
+
+
+
+
+ 品牌字段映射
+
+
+
+
+ 品牌模板列表项
+
+
+
+
+ 新增品牌模板请求
+
+
+
+
+ 标准字段列表
+
+
+
+
+ 更新品牌模板请求
+
+
+
+
+ 采集地址详情(扩展字段留待未来扩展)
+
+
+
+
+ 采集地址列表项
+
+
+
+
+ 采集地址下关联机床项
+
+
+
+ 机床名称
+
+
+ 设备编码
+
+
+ 车间名称
+
+
+ 是否在线
+
+
+ 当前NC程序名
+
+
+
+ 采集地址查询(分页)
+
+
+
+
+ 采集地址原始JSON响应
+
+
+
+ 原始JSON字符串
+
+
+
+ 采集地址采集记录项
+
+
+
+ 请求时间
+
+
+ 耗时(毫秒)
+
+
+ 是否成功
+
+
+ 采集到的机床数
+
+
+ 机床名称(用于原始JSON弹窗标题)
+
+
+
+ 新增采集地址请求
+
+
+
+
+ 编辑采集地址请求
+
+
+
+
+ 通用下拉项
+
+
+
+
+ 最新告警条目
+
+
+
+
+ 仪表盘查询参数(日期筛选,不带分页)
+
+
+
+ 起始日期
+
+
+ 结束日期
+
+
+
+ 仪表盘总览数据
+
+
+
+ 在线机床数量
+
+
+ 总机床数量
+
+
+ 今日产量(件)
+
+
+ 活跃告警数量
+
+
+ 采集成功率(百分比,小数不放大)
+
+
+ 今日总工作时长/产线运行时间,单位分钟
+
+
+ 正在运行的机床数量
+
+
+ 数据缺失机床数量
+
+
+
+ 机床产量排行项
+
+
+
+
+ 工人产量排行项
+
+
+
+
+ 车间生产量统计
+
+
+
+
+ 登录请求
+
+
+
+ 用户名
+
+
+ 密码
+
+
+ 是否记住密码/保持登录
+
+
+
+ 登录响应
+
+
+
+ JWT Token
+
+
+ Token 过期时间(秒)
+
+
+
+ 调整日志列表项
+
+
+
+
+ 调整日志查询(分页)
+
+
+
+
+ 系统日志列表项
+
+
+
+
+ 系统日志查询(分页)
+
+
+
+
+ 新增机床请求
+
+
+
+
+ 机床采集记录项
+
+
+
+ 采集时间
+
+
+ NC程序名
+
+
+ 零件计数
+
+
+ 运行状态
+
+
+
+ 机床详情
+
+
+
+
+ 机床列表项
+
+
+
+
+ 今日产量与趋势(简化模型)
+
+
+
+ 今日产量
+
+
+ 趋势数据(JSON 字符串)
+
+
+
+ 机床查询(分页)
+
+
+
+ 搜索关键字(名称/编码)
+
+
+ 车间ID
+
+
+ 是否在线(1在线 0离线)
+
+
+ 品牌ID
+
+
+
+ 实时采集状态
+
+
+
+ NC程序名
+
+
+ 零件计数
+
+
+ 运行状态
+
+
+ 操作模式
+
+
+ 主轴设定转速
+
+
+ 进给设定速度
+
+
+ 主轴实际转速
+
+
+ 主轴负载(%)
+
+
+
+ 机床今日产量明细项
+
+
+
+ NC程序名
+
+
+ 产量
+
+
+ 运行时间(分钟)
+
+
+ 切削时间(分钟)
+
+
+
+ 机床产量趋势数据项
+
+
+
+ 日期(yyyy-MM-dd)
+
+
+ 当日产量
+
+
+
+ 编辑机床请求
+
+
+
+
+ 分页查询参数基类
+ 默认值:page=1, pageSize=20
+ 约束:pageSize最大100,page最小1
+
+
+
+ 页码(从1开始),小于1自动修正为1
+
+
+ 每页条数,范围1-100,超出自动修正
+
+
+
+ 计算SQL偏移量(OFFSET)
+
+
+
+
+ 分页结果
+
+ 数据项类型
+
+
+ 数据列表
+
+
+ 总记录数
+
+
+ 当前页码(从1开始)
+
+
+ 每页条数
+
+
+ 总页数
+
+
+
+ 产量修正历史记录项
+
+
+
+ 修正记录ID
+
+
+ 修正前值
+
+
+ 修正后值
+
+
+ 修正原因
+
+
+ 操作人IP
+
+
+ 修正时间
+
+
+
+ cnc_daily_production 日汇总表列表项
+
+
+
+
+ 日汇总统计
+
+
+
+
+ 产量调整历史
+
+
+
+
+ 调整产量请求
+
+
+
+
+ 产量查询(分页)
+
+
+
+
+ 新增屏幕配置请求
+
+
+
+
+ 新增屏幕筛选项请求
+
+
+
+
+ 卡片配置列表项
+
+
+
+
+ 筛选项列表项
+
+
+
+
+ 更新屏幕配置请求
+
+
+
+
+ 更新屏幕筛选项请求
+
+
+
+
+ 筛选条件集合(大屏用)
+
+
+
+
+ 机床状态总览
+
+
+
+
+ 大屏汇总数据(简化模型)
+
+
+
+
+ 修改密码请求
+
+
+
+
+ 新增车间请求
+
+
+
+
+ 系统配置项
+
+
+
+
+ 更新系统配置请求
+
+
+
+
+ 编辑车间请求
+
+
+
+
+ 车间列表项
+
+
+
+
+ 新增工人请求
+
+
+
+
+ 更新工人请求
+
+
+
+
+ 可绑定机床项(未绑定其他工人的机床)
+
+
+
+ 机床ID
+
+
+ 机床名称
+
+
+ 设备编码
+
+
+
+ 工人详情
+
+
+
+
+ 工人列表项
+
+
+
+
+ 工人绑定机床项
+
+
+
+ 机床ID
+
+
+ 机床名称
+
+
+ 设备编码
+
+
+ 车间名称
+
+
+ 品牌名称
+
+
+ 是否在线
+
+
+ 当前NC程序名
+
+
+
+ 工人查询(分页)
+
+
+
+
+ 工人今日产量明细项
+
+
+
+ 机床名称
+
+
+ NC程序名
+
+
+ 产量
+
+
+ 运行时间(分钟)
+
+
+ 切削时间(分钟)
+
+
+
+ 工人产量趋势数据项
+
+
+
+ 日期(yyyy-MM-dd)
+
+
+ 当日产量
+
+
+
+ cnc_alert 告警表
+
+
+
+ 主键ID
+
+
+ 告警类型
+
+
+ 机床ID
+
+
+ 采集地址ID
+
+
+ 标题
+
+
+ 详情
+
+
+ 是否已解决
+
+
+ 解决时间
+
+
+ 创建时间
+
+
+
+ cnc_brand CNC品牌模板表
+
+
+
+ 主键ID
+
+
+ 品牌名称
+
+
+ 设备字段名
+
+
+ 标签路径
+
+
+ 是否启用
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_brand_field_mapping 品牌字段映射表
+
+
+
+ 主键ID
+
+
+ 品牌ID
+
+
+ 标准字段
+
+
+ 字段名
+
+
+ 匹配规则
+
+
+ 数据类型
+
+
+ 是否必填
+
+
+ 创建时间
+
+
+
+ cnc_collect_address 采集地址表
+
+
+
+ 主键ID
+
+
+ 名称
+
+
+ 地址URL
+
+
+ 品牌ID
+
+
+ 采集间隔(秒/单位未约定以整型表示)
+
+
+ 是否启用
+
+
+ 最近采集时间
+
+
+ 最近采集状态
+
+
+ 失败次数
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ log_collector_heartbeat 采集服务心跳表
+
+
+
+ 主键ID
+
+
+ 服务ID
+
+
+ 状态
+
+
+ 采集地址ID
+
+
+ 最近采集时间
+
+
+ 成功次数
+
+
+ 失败次数
+
+
+ 运行时长(秒)
+
+
+ 详情(JSON 字符串)
+
+
+ 创建时间
+
+
+
+ log_collect_raw 原始采集JSON表
+
+
+
+ 主键ID
+
+
+ 采集地址ID
+
+
+ 请求时间
+
+
+ 响应时间
+
+
+ 响应时长
+
+
+ 是否成功
+
+
+ 状态码
+
+
+ 原始JSON
+
+
+ 错误信息
+
+
+ 创建时间
+
+
+
+ cnc_collect_record 采集结构化记录表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 采集时间
+
+
+ 设备时间
+
+
+ NC程序名
+
+
+ 零件计数
+
+
+ 设备状态
+
+
+ 运行状态
+
+
+ 操作模式
+
+
+ 主轴设定速度
+
+
+ 进给设定速度
+
+
+ 主轴实际速度
+
+
+ 进给实际速度
+
+
+ 主轴负载
+
+
+ 主轴倍率
+
+
+ 开机时间
+
+
+ 运行时间
+
+
+ 切削时间
+
+
+ 循环时间
+
+
+ 加工状态
+
+
+ 扩展数据(JSON 字符串)
+
+
+ 创建时间
+
+
+
+ cnc_daily_production 日汇总表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 生产日期
+
+
+ 程序名
+
+
+ 总产量
+
+
+ 工人ID(用于产量按工人汇总的场景)
+
+
+ 段数
+
+
+ 总运行时间
+
+
+ 总切削时间
+
+
+ 总循环时间
+
+
+ 是否已调整
+
+
+ 调整后的数量
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_machine 机床表
+
+
+
+ 主键ID
+
+
+ 设备编码
+
+
+ 名称
+
+
+ 车间ID
+
+
+ 采集地址ID
+
+
+ IP地址
+
+
+ 品牌ID
+
+
+ 是否启用
+
+
+ 是否在线
+
+
+ 最近Ping时间
+
+
+ 最近采集时间
+
+
+ 最近设备状态
+
+
+ 最近运行状态
+
+
+ 最近程序名
+
+
+ 最近零件数
+
+
+ 最近操作模式
+
+
+ 最近加工状态
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_machine_daily_status 机床日状态表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 生产日期
+
+
+ 数据状态
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_production_adjustment 产量修正审计表
+
+
+
+ 主键ID
+
+
+ 目标表
+
+
+ 目标ID
+
+
+ 字段名
+
+
+ 旧值
+
+
+ 新值
+
+
+ 原因
+
+
+ 操作IP
+
+
+ 创建时间
+
+
+
+ cnc_production_segment 产量分段记录表
+
+
+
+ 主键ID
+
+
+ 机床ID
+
+
+ 程序名
+
+
+ 生产日期
+
+
+ 开始时间
+
+
+ 结束时间
+
+
+ 起始零件数
+
+
+ 结束零件数
+
+
+ 产量
+
+
+ 是否已结算
+
+
+ 结束原因
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_screen_config 大屏卡片配置表
+
+
+
+ 主键ID
+
+
+ 卡片键
+
+
+ 卡片类型
+
+
+ 标题
+
+
+ 指标
+
+
+ 维度
+
+
+ 排序
+
+
+ 是否启用
+
+
+ 图表配置(JSON 字符串)
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_screen_filter 大屏筛选配置表
+
+
+
+ 主键ID
+
+
+ 屏幕Key
+
+
+ 筛选类型
+
+
+ 筛选值
+
+
+ 是否为默认
+
+
+ 排序
+
+
+
+ cnc_sys_config 系统配置表
+
+
+
+ 主键ID
+
+
+ 配置键
+
+
+ 配置值
+
+
+ 值类型
+
+
+ 描述
+
+
+ 最后修改时间
+
+
+
+ log_system 系统日志表
+
+
+
+ 主键ID
+
+
+ 日志等级
+
+
+ 来源
+
+
+ 消息
+
+
+ 堆栈信息
+
+
+ 扩展数据(JSON 字符串)
+
+
+ 创建时间
+
+
+
+ cnc_worker 工人表
+
+
+
+ 主键ID
+
+
+ 姓名
+
+
+ 工号
+
+
+ 是否启用
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_worker_daily_summary 工人日汇总表
+
+
+
+ 主键ID
+
+
+ 工人ID
+
+
+ 生产日期
+
+
+ 总产量
+
+
+ 机床数量
+
+
+ 程序数量
+
+
+ 是否已调整
+
+
+ 调整后的数量
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ cnc_worker_machine 工人-机床绑定表
+
+
+
+ 主键ID
+
+
+ 工人ID
+
+
+ 机床ID
+
+
+ 创建时间
+
+
+
+ cnc_workshop 车间表
+
+
+
+ 主键ID
+
+
+ 车间名称
+
+
+ 排序序号
+
+
+ 是否启用
+
+
+ 创建时间
+
+
+ 修改时间
+
+
+
+ 告警类型常量集合(数据库以字符串存储)
+
+
+
+ 采集失败
+
+
+ 设备离线
+
+
+ 产量异常
+
+
+ 未知设备
+
+
+ 服务错误
+
+
+
+ 大屏卡片类型常量(存储为字符串)
+
+
+
+ 统计数字
+
+
+ 柱状图
+
+
+ 折线图
+
+
+ 饼图
+
+
+ 状态网格
+
+
+ 排名列表
+
+
+
+ 采集服务状态(字符串存储)
+
+
+
+ 运行中
+
+
+ 已停止
+
+
+ 错误
+
+
+
+ 采集结果状态常量
+
+
+
+ 成功
+
+
+ 失败
+
+
+ 超时
+
+
+
+ 数据状态枚举(字符串存储版本)
+
+
+
+ 正常
+
+
+ 离线
+
+
+ 数据缺失
+
+
+
+ 数据类型枚举(字符串存储版本)
+
+
+
+ 字符串
+
+
+ 数字
+
+
+
+ 日志等级常量(字符串表示)
+
+
+
+ 调试
+
+
+ 信息
+
+
+ 警告
+
+
+ 错误
+
+
+
+ 字段匹配方式(字符串存储)
+
+
+
+ 按ID匹配
+
+
+ 按名称匹配
+
+
+
+ 产量段关闭原因(字符串存储)
+
+
+
+ 程序切换
+
+
+ 手动复位
+
+
+ 日终结束
+
+
+ 服务停止
+
+
+
+ 值类型枚举(字符串存储)
+
+
+
+ 字符串
+
+
+ 数字
+
+
+
diff --git a/src/CncWebApi/CncRepository.dll b/src/CncWebApi/CncRepository.dll
new file mode 100644
index 0000000..c0cf4e3
Binary files /dev/null and b/src/CncWebApi/CncRepository.dll differ
diff --git a/src/CncWebApi/CncRepository.pdb b/src/CncWebApi/CncRepository.pdb
new file mode 100644
index 0000000..e12906f
Binary files /dev/null and b/src/CncWebApi/CncRepository.pdb differ
diff --git a/src/CncWebApi/CncRepository.xml b/src/CncWebApi/CncRepository.xml
new file mode 100644
index 0000000..ff27a97
--- /dev/null
+++ b/src/CncWebApi/CncRepository.xml
@@ -0,0 +1,301 @@
+
+
+
+ CncRepository
+
+
+
+
+ 仓储基类,提供数据库连接管理
+ 每个仓储方法应 using(CreateConnection()) 自动释放连接
+
+
+
+
+ 初始化仓储基类
+
+ 数据库连接字符串
+
+
+
+ 创建新的数据库连接
+ 调用方需使用 using 语句确保连接释放
+
+
+ using (var conn = CreateConnection())
+ {
+ return conn.QueryFirstOrDefault<Machine>("SELECT * FROM cnc_machine WHERE id = @Id", new { Id = id });
+ }
+
+
+
+
+ 业务库仓储基类(cnc_business)
+ 所有操作业务库的仓储继承此类
+
+
+
+
+ 初始化业务库仓储
+
+ cnc_business 数据库连接字符串
+
+
+
+ 日志库仓储基类(cnc_log)
+ 所有操作日志库的仓储继承此类
+
+
+
+
+ 初始化日志库仓储
+
+ cnc_log 数据库连接字符串
+
+
+ Alert SELECT列映射模板(snake_case列名 → PascalCase属性名)
+
+
+
+ 告警类型计数内部类,用于Dapper映射
+
+
+
+
+ 品牌字段映射实现
+
+
+
+
+ 品牌实现
+
+
+
+
+ 采集地址实现
+
+
+
+ 采集地址SELECT列映射模板
+
+
+
+ cnc_daily_production 产量仓储实现(业务库)
+
+
+
+
+ 仪表盘跨表统计查询实现
+
+
+
+ 汇总卡片数据
+
+
+ 按车间时间区间统计生产量(平均单机产量)
+
+
+ 机床排行
+
+
+ 工人排行
+
+
+ 产量趋势(最近 days 天)
+
+
+ 机床状态分布(示意性实现,需要根据实际状态表结构调整)
+
+
+ 最近告警
+
+
+
+ 日志库:log_collector_heartbeat 心跳仓储实现
+
+
+
+ 写入心跳
+
+
+ 获取最新心跳
+
+
+ 清理过去的心跳记录(按日期)
+
+
+
+ 日志库:log_collect_raw 原始采集记录仓储实现
+
+
+
+ 通过 Id 获取原始记录
+
+
+ 按地址分页获取原始记录
+
+
+ 获取某地址最新的一条原始采集记录
+
+
+ 写入原始采集记录
+
+
+ 清理过期数据(按日期)
+
+
+
+ 机床实现
+
+
+
+ 机床SELECT列映射模板(snake_case列名 → PascalCase属性名)
+
+
+
+
+
+
+ 系统配置实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 工人-机床绑定实现
+
+
+
+
+ 工人实现
+
+
+
+ 工人SELECT列映射模板
+
+
+
+ 车间仓储实现
+
+
+
+
+ cnc_alert 告警表 仓储接口
+
+
+
+
+ 品牌字段映射仓储接口
+
+
+
+
+ 品牌仓储接口
+
+
+
+
+ 采集地址仓储接口
+
+
+
+
+ 日志库:心跳仓储接口
+
+
+
+
+ 日志库:原始采集记录仓储接口
+
+
+
+
+ cnc_daily_production 产量仓储接口(业务库)
+
+
+
+
+ 仪表盘统计查询仓储接口(跨表聚合)
+
+
+
+
+ cnc_machine_daily_status 机床日状态表 仓储接口
+
+
+
+
+ 机床仓储接口
+
+
+
+
+ cnc_production_adjustment 产量修正审计表 仓储接口
+
+
+
+
+ cnc_production_segment 产量分段记录表 仓储接口
+
+
+
+
+ cnc_screen_config 大屏卡片配置表 仓储接口
+
+
+
+
+ cnc_screen_filter 大屏筛选配置表 仓储接口
+
+
+
+
+ 系统配置仓储接口
+
+
+
+ 按配置Key获取配置
+
+
+ 获取全部配置
+
+
+ 更新配置值
+ 配置项ID
+ 新值
+
+
+
+ log_system 系统日志 仓储接口
+
+
+
+
+ cnc_worker_daily_summary 工人日汇总表 仓储接口
+
+
+
+
+ 工人-机床绑定仓储接口
+
+
+
+
+ 工人仓储接口
+
+
+
+
+ 车间仓储接口
+
+
+
+
diff --git a/src/CncWebApi/CncService.dll b/src/CncWebApi/CncService.dll
new file mode 100644
index 0000000..7d6b9ea
Binary files /dev/null and b/src/CncWebApi/CncService.dll differ
diff --git a/src/CncWebApi/CncService.pdb b/src/CncWebApi/CncService.pdb
new file mode 100644
index 0000000..f7660b2
Binary files /dev/null and b/src/CncWebApi/CncService.pdb differ
diff --git a/src/CncWebApi/CncService.xml b/src/CncWebApi/CncService.xml
new file mode 100644
index 0000000..7beaa98
--- /dev/null
+++ b/src/CncWebApi/CncService.xml
@@ -0,0 +1,487 @@
+
+
+
+ CncService
+
+
+
+
+ 业务异常
+ Service层抛出此异常,由全局异常过滤器统一捕获并转换为ApiResponse
+
+
+
+ 业务错误码(非0)
+
+
+
+ 创建业务异常
+
+ 错误码,参见 CncModels.Constants.ErrorCode
+ 错误信息,会返回给前端展示
+
+
+
+ 告警管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录认证实现
+
+
+
+
+
+
+
+ 品牌模板实现
+
+
+
+
+ 采集地址实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 采集数据查询实现
+
+
+
+
+
+
+
+
+
+
+ 仪表盘实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 机床管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产量管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 大屏配置实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 系统日志实现
+
+
+
+
+
+
+
+ 员工管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 车间管理实现
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录认证服务接口
+
+
+
+
+ 管理员登录
+
+ 登录请求参数
+ 登录响应(包含 JWT Token 及有效期)
+
+
+
+ 品牌模板服务接口
+
+
+
+
+ 采集地址服务接口
+
+
+
+
+ 获取采集地址下关联机床列表
+
+
+
+
+ 获取采集地址近期采集记录
+
+
+
+
+ 获取最新原始采集JSON
+
+
+
+
+ 采集数据查询服务接口
+
+
+
+ 按地址ID分页查询原始采集记录
+
+
+ 获取最新采集记录
+
+
+
+ 仪表盘服务接口
+
+
+
+
+ 机床管理服务接口
+
+
+
+
+ 分页查询机床列表
+
+ 查询条件
+ 分页结果
+
+
+
+ 根据ID获取机床详情
+
+ 机床ID
+ 机床详情
+
+
+
+ 新增机床
+
+ 创建参数
+ 新建机床的ID
+
+
+
+ 编辑机床信息
+
+ 机床ID
+ 修改参数
+ 是否更新成功
+
+
+
+ 删除机床并解绑相关工人
+
+ 机床ID
+ 是否删除成功
+
+
+
+ 启用或禁用机床
+
+ 机床ID
+ 是否切换成功
+
+
+
+ 获取机床实时采集状态
+
+ 机床ID
+ 实时状态信息
+
+
+
+ 获取机床今日产量明细
+
+ 机床ID
+ 今日产量列表
+
+
+
+ 获取机床7天产量趋势
+
+ 机床ID
+ 趋势数据列表
+
+
+
+ 获取机床近期采集记录
+
+ 机床ID
+ 采集记录列表
+
+
+
+ 产量管理服务接口
+
+
+
+ 分页查询产量记录
+
+
+ 获取日汇总统计
+
+
+ 获取日期范围总产量
+
+
+ 产量修正
+
+
+
+ 获取某条产量记录的修正历史
+
+
+
+
+ 大屏配置服务接口
+
+
+
+ 获取大屏汇总数据
+
+
+ 获取所有卡片配置
+
+
+ 更新卡片配置
+
+
+ 获取筛选项列表
+
+
+ 创建筛选项
+
+
+ 更新筛选项
+
+
+ 删除筛选项
+
+
+
+ 获取工人绑定机床列表
+
+
+
+
+ 获取工人今日产量明细
+
+
+
+
+ 获取工人7天产量趋势
+
+
+
+
+ 获取可绑定机床列表(未绑定其他工人的)
+
+
+
+
+ 车间管理服务接口
+
+
+
+ 获取车间列表
+
+
+ 按ID获取车间
+
+
+ 新增车间
+
+
+ 编辑车间
+
+
+ 删除车间
+
+
+ 启停车间
+
+
+ 获取车间下机床数量
+
+
+
diff --git a/src/CncWebApi/CncWebApi.dll b/src/CncWebApi/CncWebApi.dll
new file mode 100644
index 0000000..04fa0d4
Binary files /dev/null and b/src/CncWebApi/CncWebApi.dll differ
diff --git a/src/CncWebApi/CncWebApi.pdb b/src/CncWebApi/CncWebApi.pdb
new file mode 100644
index 0000000..74e08ed
Binary files /dev/null and b/src/CncWebApi/CncWebApi.pdb differ
diff --git a/src/CncWebApi/CncWebApi.xml b/src/CncWebApi/CncWebApi.xml
new file mode 100644
index 0000000..b9ac075
--- /dev/null
+++ b/src/CncWebApi/CncWebApi.xml
@@ -0,0 +1,768 @@
+
+
+
+ CncWebApi
+
+
+
+
+ Web API 路由和过滤器配置
+ 在 Global.asax Application_Start 中调用
+
+
+
+
+ 注册Web API配置
+
+ HTTP配置对象
+
+
+
+ 告警中心控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 告警列表(分页)
+ GET /api/admin/alert
+
+
+
+
+ 告警统计
+ GET /api/admin/alert/statistics
+
+
+
+
+ 处理单条告警
+ PUT /api/admin/alert/{id}/resolve
+
+
+
+
+ 批量处理告警
+ POST /api/admin/alert/batch-resolve
+
+
+
+
+ 登录认证控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 管理员登录
+ POST /api/admin/login
+
+
+
+
+ 品牌模板控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 品牌列表
+ GET /api/admin/brand
+
+
+
+
+ 品牌详情(含字段映射)
+ GET /api/admin/brand/{id}
+
+
+
+
+ 新增品牌
+ POST /api/admin/brand
+
+
+
+
+ 编辑品牌
+ PUT /api/admin/brand/{id}
+
+
+
+
+ 删除品牌
+ DELETE /api/admin/brand/{id}
+
+
+
+
+ 复制品牌
+ POST /api/admin/brand/{id}/copy
+
+
+
+
+ 启停品牌
+ PUT /api/admin/brand/{id}/toggle
+
+
+
+
+ 标准字段列表
+ GET /api/admin/brand/standard-fields
+
+
+
+
+ 采集地址控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 地址列表(分页)
+ GET /api/admin/collect-address
+
+
+
+
+ 地址详情
+ GET /api/admin/collect-address/{id}
+
+
+
+
+ 新增地址
+ POST /api/admin/collect-address
+
+
+
+
+ 编辑地址
+ PUT /api/admin/collect-address/{id}
+
+
+
+
+ 删除地址
+ DELETE /api/admin/collect-address/{id}
+
+
+
+
+ 启停地址
+ PUT /api/admin/collect-address/{id}/toggle
+
+
+
+
+ 地址下关联机床列表
+ GET /api/admin/collect-address/{id}/machines
+
+
+
+
+ 地址近期采集记录
+ GET /api/admin/collect-address/{id}/collect-records
+
+
+
+
+ 地址最新原始JSON
+ GET /api/admin/collect-address/{id}/raw-json
+
+
+
+
+ 仪表盘控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 8个统计卡片数据
+ GET /api/admin/dashboard/summary
+
+
+
+
+ 车间平均单机产量
+ GET /api/admin/dashboard/workshop-production
+
+
+
+
+ 机床产量排行TOP10
+ GET /api/admin/dashboard/machine-rank
+
+
+
+
+ 工人产量排行TOP10
+ GET /api/admin/dashboard/worker-rank
+
+
+
+
+ 产量趋势(近7天)
+ GET /api/admin/dashboard/trend
+
+
+
+
+ 机床状态分布
+ GET /api/admin/dashboard/machine-status-distribution
+
+
+
+
+ 最新5条告警
+ GET /api/admin/dashboard/recent-alerts
+
+
+
+
+ 采集服务状态
+ GET /api/admin/collector/status
+
+
+
+
+ 健康检查控制器
+ 用于验证API服务是否正常运行
+
+
+
+
+ 健康检查端点
+ GET /api/health
+
+
+
+
+ 操作日志控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 系统运行日志(分页)
+ GET /api/admin/log/system
+
+
+
+
+ 产量修正日志(分页)
+ GET /api/admin/log/adjustment
+
+
+
+
+ 导出修正日志(占位,暂返回提示)
+ GET /api/admin/log/adjustment/export
+
+
+
+
+ 设备管理控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 机床列表(分页)
+ GET /api/admin/machine
+
+
+
+
+ 机床详情
+ GET /api/admin/machine/{id}
+
+
+
+
+ 新增机床
+ POST /api/admin/machine
+
+
+
+
+ 编辑机床
+ PUT /api/admin/machine/{id}
+
+
+
+
+ 删除机床
+ DELETE /api/admin/machine/{id}
+
+
+
+
+ 启停机床
+ PUT /api/admin/machine/{id}/toggle
+
+
+
+
+ 机床实时采集状态
+ GET /api/admin/machine/{id}/status
+
+
+
+
+ 机床今日产量明细
+ GET /api/admin/machine/{id}/production/today
+
+
+
+
+ 机床7天产量趋势
+ GET /api/admin/machine/{id}/production/trend
+
+
+
+
+ 机床近期采集记录
+ GET /api/admin/machine/{id}/collect-records
+
+
+
+
+ 公共下拉选项控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 车间下拉
+ GET /api/admin/workshop/list
+
+
+
+
+ 品牌下拉
+ GET /api/admin/brand/list
+
+
+
+
+ 机床下拉
+ GET /api/admin/machine/list
+
+
+
+
+ 工人下拉
+ GET /api/admin/worker/list
+
+
+
+
+ 采集地址下拉
+ GET /api/admin/collect-address/list
+
+
+
+
+ 产量报表控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 日产量列表(分页)
+ GET /api/admin/production/daily
+
+
+
+
+ 日汇总统计
+ GET /api/admin/production/daily-summary
+
+
+
+
+ 修正产量
+ POST /api/admin/production/adjust
+
+
+
+
+ 修正历史
+ GET /api/admin/production/{recordId}/adjustment-history
+
+
+
+
+ 导出报表(占位,暂返回空结果)
+ GET /api/admin/production/export
+
+
+
+
+ 大屏配置控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 卡片配置列表
+ GET /api/admin/screen-config
+
+
+
+
+ 编辑卡片
+ PUT /api/admin/screen-config/{id}
+
+
+
+
+ 删除卡片
+ DELETE /api/admin/screen-config/{id}
+
+
+
+
+ 启停卡片
+ PUT /api/admin/screen-config/{id}/toggle
+
+
+
+
+ 筛选配置列表
+ GET /api/admin/screen-filter
+
+
+
+
+ 新增筛选项
+ POST /api/admin/screen-filter
+
+
+
+
+ 编辑筛选项
+ PUT /api/admin/screen-filter/{id}
+
+
+
+
+ 删除筛选项
+ DELETE /api/admin/screen-filter/{id}
+
+
+
+
+ 大屏看板控制器(无需认证)
+
+
+
+
+ 构造函数
+
+
+
+
+ 大屏汇总统计
+ GET /api/screen/summary
+
+
+
+
+ 采集服务状态
+ GET /api/screen/collector-status
+
+
+
+
+ 各车间产量
+ GET /api/screen/workshop-production
+
+
+
+
+ 7天产量趋势
+ GET /api/screen/production-trend
+
+
+
+
+ 机床产量排行
+ GET /api/screen/machine-rank
+
+
+
+
+ 工人产量排行
+ GET /api/screen/worker-rank
+
+
+
+
+ 机床状态总览
+ GET /api/screen/machine-status
+
+
+
+
+ 大屏筛选条件
+ GET /api/screen/filters
+
+
+
+
+ 刷新间隔配置
+ GET /api/screen/refresh-interval
+
+
+
+
+ 系统设置控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 配置项列表
+ GET /api/admin/sys-config
+
+
+
+
+ 编辑配置项
+ PUT /api/admin/sys-config/{id}
+
+
+
+
+ 修改密码
+ POST /api/admin/change-password
+
+
+
+
+ 车间列表
+ GET /api/admin/workshop
+
+
+
+
+ 新增车间
+ POST /api/admin/workshop
+
+
+
+
+ 编辑车间
+ PUT /api/admin/workshop/{id}
+
+
+
+
+ 删除车间
+ DELETE /api/admin/workshop/{id}
+
+
+
+
+ 启停车间
+ PUT /api/admin/workshop/{id}/toggle
+
+
+
+
+ 员工管理控制器
+
+
+
+
+ 构造函数
+
+
+
+
+ 工人列表(分页)
+ GET /api/admin/worker
+
+
+
+
+ 工人详情
+ GET /api/admin/worker/{id}
+
+
+
+
+ 新增工人
+ POST /api/admin/worker
+
+
+
+
+ 编辑工人
+ PUT /api/admin/worker/{id}
+
+
+
+
+ 删除工人
+ DELETE /api/admin/worker/{id}
+
+
+
+
+ 启停工人
+ PUT /api/admin/worker/{id}/toggle
+
+
+
+
+ 绑定机床
+ POST /api/admin/worker/{id}/bind
+
+
+
+
+ 解绑机床
+ POST /api/admin/worker/{id}/unbind
+
+
+
+
+ 绑定机床列表
+ GET /api/admin/worker/{id}/machines
+
+
+
+
+ 工人今日产量明细
+ GET /api/admin/worker/{id}/production/today
+
+
+
+
+ 工人7天产量趋势
+ GET /api/admin/worker/{id}/production/trend
+
+
+
+
+ 可绑定机床列表(未绑定其他工人的)
+ GET /api/admin/worker/available-machines
+
+
+
+
+ 绑定/解绑机床请求
+
+
+
+ 机床ID
+
+
+
+ 全局异常过滤器
+ 统一捕获所有未处理异常,转换为标准ApiResponse格式
+ Controller层不需要 try-catch,异常会自动被此过滤器捕获
+
+
+
+
+ 异常发生时自动调用
+
+ 异常上下文
+
+
+
+ Web API 应用程序入口
+ IIS 启动时自动调用 Application_Start
+
+
+
+
+ 应用启动时执行,注册路由和全局配置
+
+
+
+
+ SPA 路由回退:/admin/ 下的非文件请求重写到 index.html
+ 用于支持前端 Vue Router 的 HTML5 History 模式
+
+
+
+
+ JWT 认证过滤器
+ 验证请求 Header 中的 Bearer Token
+ 管理 /api/admin/** 接口需要认证,大屏 /api/screen/** 不需要
+
+
+
+
+
+
+
+ 简单的依赖注入解析器
+ 手动注册 Repository 和 Service 的映射关系
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/CncWebApi/Dapper.dll b/src/CncWebApi/Dapper.dll
new file mode 100644
index 0000000..a4d613a
Binary files /dev/null and b/src/CncWebApi/Dapper.dll differ
diff --git a/src/CncWebApi/Filters/GlobalExceptionFilter.cs b/src/CncWebApi/Filters/GlobalExceptionFilter.cs
index 40ae815..f596ab1 100644
--- a/src/CncWebApi/Filters/GlobalExceptionFilter.cs
+++ b/src/CncWebApi/Filters/GlobalExceptionFilter.cs
@@ -29,26 +29,11 @@ namespace CncWebApi.Filters
}
else
{
- // 未预期异常:返回详细错误信息用于诊断(生产环境应改为记录日志)
- var ex = context.Exception;
- var sb = new System.Text.StringBuilder();
- sb.AppendLine($"[{ex.GetType().FullName}] {ex.Message}");
- // 堆栈跟踪
- if (ex.StackTrace != null) sb.AppendLine(ex.StackTrace);
- // InnerException 递归
- var inner = ex.InnerException;
- int depth = 1;
- while (inner != null && depth <= 5)
- {
- sb.AppendLine($"--- InnerException ({depth}) ---");
- sb.AppendLine($"[{inner.GetType().FullName}] {inner.Message}");
- if (inner.StackTrace != null) sb.AppendLine(inner.StackTrace);
- inner = inner.InnerException;
- depth++;
- }
+ // 未预期异常:返回通用错误提示,不暴露内部细节
+ // 详细异常信息由log4net记录到日志文件
var response = ApiResponse