运维知识2026-06-17
N 型双面组件增发 10% 的底层逻辑:智能跟踪支架与避阴算法
光伏施工现场管理是 EPC 公司核心。**多项目 + 多施工队 + 多设备 → 容易乱**。这篇用 Next.js + Drizzle 搭一套。
#N 型双面#跟踪支架#发电增益
光伏施工现场管理是 EPC 公司核心。多项目 + 多施工队 + 多设备 → 容易乱。这篇用 Next.js + Drizzle 搭一套。
一、核心模块
graph TB
A["施工管理"] --> B["项目"]
A --> C["进度"]
A --> D["质量"]
A --> E["设备"]
A --> F["人员"]
A --> G["照片 + 验收"]
二、Drizzle Schema
import { pgTable, uuid, varchar, integer, timestamp, jsonb } from "drizzle-orm/pg-core";
export const projects = pgTable("projects", {
id: uuid("id").primaryKey().defaultRandom(),
code: varchar("code", { length: 64 }).unique(),
name: varchar("name", { length: 256 }),
capacity_kw: integer("capacity_kw"),
status: varchar("status", { length: 32 }), // planning / construction / completed
start_date: timestamp("start_date"),
target_complete: timestamp("target_complete"),
client_id: uuid("client_id"),
});
export const milestones = pgTable("milestones", {
id: uuid("id").primaryKey().defaultRandom(),
project_id: uuid("project_id").references(() => projects.id),
name: varchar("name", { length: 128 }),
order_num: integer("order_num"),
planned_date: timestamp("planned_date"),
actual_date: timestamp("actual_date"),
status: varchar("status", { length: 32 }), // pending / in_progress / completed
});
export const inspections = pgTable("inspections", {
id: uuid("id").primaryKey().defaultRandom(),
project_id: uuid("project_id"),
milestone_id: uuid("milestone_id"),
inspection_type: varchar("inspection_type", { length: 64 }), // 隐蔽 / 自检 / 监理 / 业主
result: varchar("result", { length: 32 }), // pass / fail / pending
inspector: varchar("inspector"),
photos: jsonb("photos"),
notes: text("notes"),
inspected_at: timestamp("inspected_at"),
});

三、API(tRPC)
import { router, protectedProcedure } from "../trpc";
import { z } from "zod";
import { projects, milestones } from "@/db/schema";
import { eq } from "drizzle-orm";
export const projectRouter = router({
list: protectedProcedure
.input(z.object({ status: z.string().optional() }))
.query(async ({ input }) => {
return await db.query.projects.findMany({
where: input.status ? eq(projects.status, input.status) : undefined,
});
}),
detail: protectedProcedure
.input(z.string().uuid())
.query(async ({ input }) => {
return await db.query.projects.findFirst({
where: eq(projects.id, input),
with: { milestones: true, inspections: true }
});
}),
updateMilestone: protectedProcedure
.input(z.object({
milestoneId: z.string().uuid(),
status: z.enum(["pending", "in_progress", "completed"]),
actualDate: z.date().optional(),
}))
.mutation(async ({ input }) => {
await db.update(milestones)
.set({ status: input.status, actual_date: input.actualDate })
.where(eq(milestones.id, input.milestoneId));
}),
});
四、进度仪表盘
export default async function ProjectDetailPage({ params }) {
const project = await api.projects.detail.fetch(params.id);
const completedMs = project.milestones.filter(m => m.status === "completed").length;
const progress = (completedMs / project.milestones.length) * 100;
return (
<div>
<h1>{project.name}</h1>
<ProgressBar value={progress} max={100} />
<Timeline>
{project.milestones.map(m => (
<TimelineItem
key={m.id}
title={m.name}
date={m.actual_date ?? m.planned_date}
status={m.status}
/>
))}
</Timeline>
</div>
);
}
五、施工照片上传(自动地理标记)
"use client";
import { useState } from "react";
export function PhotoUploader({ inspectionId }) {
async function handleUpload(file: File) {
// 提取 EXIF 地理信息
const exif = await parseExif(file);
const formData = new FormData();
formData.append("file", file);
formData.append("inspection_id", inspectionId);
formData.append("location", JSON.stringify(exif.location));
formData.append("timestamp", exif.timestamp.toString());
await fetch("/api/upload-photo", { method: "POST", body: formData });
}
return <input type="file" accept="image/*" onChange={(e) => handleUpload(e.target.files![0])} />;
}
六、质量验收 5 个关键节点
□ 隐蔽工程验收(电缆 / 桥架 / 接地)
□ 组件安装验收
□ 逆变器调试验收
□ 联调试运行
□ 业主最终验收
每个节点要拍照 + 签字 + 时间戳 + 地理位置。

七、移动端工人 APP
// React Native 或 Flutter
function FieldWorkerApp() {
return (
<View>
<Text>今日任务</Text>
<TaskList tasks={todaysTasks} onComplete={completeTask} />
<Button title="拍照 + 上报" onPress={uploadPhoto} />
</View>
);
}
八、ZenovaOS 视角
ZenovaOS 给 EPC 提供项目管理 + 资产运营一体化平台,验收完即转运营。
总结
光伏施工管理 SaaS 用 Next.js + Drizzle + tRPC 全栈。进度 + 质量 + 照片 + 移动端全套就绪。
常见问题
这套方案需要替换现有系统吗?+
不需要。ZenovaOS 支持渐进式接入 — ZEL 采集器可以并联到现有逆变器,数据双发到原系统和 ZenovaOS,验证后再决定迁移节奏。
N 型双面组件增发 10% 的底层逻辑:智能跟踪支架与避阴算... 适用于什么规模的电站?+
1MW 以上的工商业 / 分布式 / 集中式都适用。从单站到 50+ 站点的集团资产都有落地案例。具体方案根据 N 型双面 实际情况调整。
怎么衡量 ROI?+
建议 3 个量化指标:1) 告警闭环时间通常 -40-60%;2) 真实损失发现率从 30% 提升到 80%+;3) 运营人时 -50%+。
下一步
如果你在管理分布式光伏、工商业电站或多站点资产,我们可以根据你的场景准备一份对应的 ZenovaOS 演示。
