import { request } from "./request";
|
import type { PageResult } from "./basic-data";
|
|
function header(accessToken: string) { return { Authorization: `Bearer ${accessToken}` }; }
|
function query(params: Record<string, unknown>) {
|
const content = Object.entries(params)
|
.filter(([, value]) => value !== undefined && value !== "" && value !== null)
|
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)
|
.join("&");
|
return content ? `?${content}` : "";
|
}
|
|
export type EnergyType = "ELECTRICITY" | "STEAM" | "WATER";
|
export interface EnergyRecord {
|
id?: number;
|
recordDate: string;
|
energyType: EnergyType;
|
usageArea: string;
|
productCategory: string;
|
usagePurpose: string;
|
quantity: number;
|
unitPrice: number;
|
amount?: number;
|
recorder: string;
|
remark?: string;
|
createTime?: string;
|
}
|
export interface EnergyFilters {
|
startDate?: string;
|
endDate?: string;
|
energyType?: EnergyType;
|
usageArea?: string;
|
productCategory?: string;
|
}
|
export interface EnergySummary {
|
energyType: EnergyType;
|
quantity: number;
|
amount: number;
|
recordCount: number;
|
}
|
export interface EnergyBucket extends EnergySummary {
|
label: string;
|
}
|
export interface EnergyAnalysis {
|
totalAmount: number;
|
recordCount: number;
|
summary: EnergySummary[];
|
trend: EnergyBucket[];
|
areas: EnergyBucket[];
|
}
|
export type EnergyAlertMetric = "AMOUNT" | "QUANTITY" | "MONTH_AMOUNT" | "MONTH_QUANTITY";
|
export interface EnergyAlertRule {
|
id?: number;
|
name: string;
|
energyType: EnergyType;
|
usageArea?: string;
|
productCategory?: string;
|
metric: EnergyAlertMetric;
|
threshold: number;
|
enabled: boolean;
|
recipientIds: number[];
|
}
|
export interface EnergyAlertLog {
|
id: number;
|
ruleName: string;
|
recordDate: string;
|
energyType: EnergyType;
|
scope: string;
|
metric: EnergyAlertMetric;
|
periodType: "DAY" | "MONTH";
|
actualValue: number;
|
threshold: number;
|
recipientName: string;
|
status: "FAILED" | "SENT";
|
errorMessage: string;
|
createTime: string;
|
}
|
export interface EnergyAlertRecipient {
|
id: number;
|
nickname: string;
|
}
|
|
export function getEnergyRecordPage(accessToken: string, params: EnergyFilters & { pageNo: number; pageSize: number }) {
|
return request<PageResult<EnergyRecord>>(`/energy/record/page${query(params)}`, { header: header(accessToken) });
|
}
|
export function getEnergyRecord(accessToken: string, id: number) {
|
return request<EnergyRecord>(`/energy/record/get${query({ id })}`, { header: header(accessToken) });
|
}
|
export function createEnergyRecord(accessToken: string, data: EnergyRecord) {
|
return request<number>("/energy/record/create", { method: "POST", data: data as unknown as Record<string, unknown>, header: header(accessToken) });
|
}
|
export function updateEnergyRecord(accessToken: string, data: EnergyRecord) {
|
return request<boolean>("/energy/record/update", { method: "PUT", data: data as unknown as Record<string, unknown>, header: header(accessToken) });
|
}
|
export function deleteEnergyRecord(accessToken: string, id: number) {
|
return request<boolean>(`/energy/record/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
export function getEnergyAnalysis(accessToken: string, params: EnergyFilters & { startDate: string; endDate: string; groupBy: "DAY" | "MONTH" }) {
|
return request<EnergyAnalysis>(`/energy/record/analysis${query(params)}`, { header: header(accessToken) });
|
}
|
export async function getEnergyAlertRules(accessToken: string, params: { pageNo: number; pageSize: number }) {
|
const result = await request<PageResult<Omit<EnergyAlertRule, "recipientIds"> & { recipientIds: string }>>(`/energy/alert/page${query(params)}`, { header: header(accessToken) });
|
return { ...result, list: (result.list || []).map(row => ({ ...row, recipientIds: row.recipientIds?.split(",").filter(Boolean).map(Number) || [] })) };
|
}
|
export function getEnergyAlertLogs(accessToken: string, params: { pageNo: number; pageSize: number; date?: string; status?: string }) {
|
return request<PageResult<EnergyAlertLog>>(`/energy/alert/logs${query(params)}`, { header: header(accessToken) });
|
}
|
export function getEnergyAlertRecipients(accessToken: string) {
|
return request<EnergyAlertRecipient[]>("/energy/alert/recipients", { header: header(accessToken) });
|
}
|
export function saveEnergyAlertRule(accessToken: string, data: EnergyAlertRule) {
|
return request<boolean>(data.id ? "/energy/alert/update" : "/energy/alert/create", { method: data.id ? "PUT" : "POST", data: data as unknown as Record<string, unknown>, header: header(accessToken) });
|
}
|
export function deleteEnergyAlertRule(accessToken: string, id: number) {
|
return request<boolean>(`/energy/alert/delete${query({ id })}`, { method: "DELETE", header: header(accessToken) });
|
}
|
export function checkEnergyAlerts(accessToken: string, date: string) {
|
return request<{ sent: number; failed: number }>(`/energy/alert/check${query({ date })}`, { method: "POST", header: header(accessToken) });
|
}
|