zhangwencui
2026-10-28 7b0c52c4bfcd2c2bbcbb1cccdcfbe9f79027224b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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) });
}