@cpzxrobot/sdk 1.2.13 → 1.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/device_gateway.ts +76 -29
- package/device_types/readme.md +1 -0
- package/dist/device_gateway.js +71 -18
- package/package.json +1 -1
- package/readme.md +719 -7
package/device_gateway.ts
CHANGED
|
@@ -8,13 +8,57 @@ import type {
|
|
|
8
8
|
Factory,
|
|
9
9
|
} from ".";
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
class DeviceFault {
|
|
12
12
|
category: string;
|
|
13
13
|
time: Date;
|
|
14
14
|
resolved: boolean;
|
|
15
15
|
repeated?: number;
|
|
16
16
|
value?: any;
|
|
17
17
|
message?: string;
|
|
18
|
+
|
|
19
|
+
constructor(params: {
|
|
20
|
+
category: string;
|
|
21
|
+
time: Date;
|
|
22
|
+
resolved: boolean;
|
|
23
|
+
repeated?: number;
|
|
24
|
+
value?: any;
|
|
25
|
+
message?: string;
|
|
26
|
+
});
|
|
27
|
+
constructor(values: string[], columns: string[]);
|
|
28
|
+
constructor(paramsOrValues: any, columns?: string[]) {
|
|
29
|
+
if (Array.isArray(paramsOrValues)) {
|
|
30
|
+
// 处理values和columns的构造函数
|
|
31
|
+
const values = paramsOrValues;
|
|
32
|
+
const params: any = {};
|
|
33
|
+
for (let i = 0; i < columns!.length; i++) {
|
|
34
|
+
const column = columns![i];
|
|
35
|
+
const value = values[i];
|
|
36
|
+
|
|
37
|
+
if (column === 'category') params.category = value;
|
|
38
|
+
else if (column === 'time') params.time = new Date(value);
|
|
39
|
+
else if (column === 'resolved') params.resolved = value === 'true';
|
|
40
|
+
else if (column === 'repeated') params.repeated = parseInt(value);
|
|
41
|
+
else if (column === 'value') params.value = value;
|
|
42
|
+
else if (column === 'message') params.message = value;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
this.category = params.category;
|
|
46
|
+
this.time = params.time;
|
|
47
|
+
this.resolved = params.resolved;
|
|
48
|
+
this.repeated = params.repeated;
|
|
49
|
+
this.value = params.value;
|
|
50
|
+
this.message = params.message;
|
|
51
|
+
} else {
|
|
52
|
+
// 处理原始对象参数的构造函数
|
|
53
|
+
const params = paramsOrValues;
|
|
54
|
+
this.category = params.category;
|
|
55
|
+
this.time = params.time;
|
|
56
|
+
this.resolved = params.resolved;
|
|
57
|
+
this.repeated = params.repeated;
|
|
58
|
+
this.value = params.value;
|
|
59
|
+
this.message = params.message;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
18
62
|
}
|
|
19
63
|
import { FeedTowerGateway } from "./device_types/feedtower";
|
|
20
64
|
import { ElectricMeterGateway } from "./device_types/electricmeter";
|
|
@@ -242,34 +286,37 @@ export class DeviceGateway extends Object {
|
|
|
242
286
|
);
|
|
243
287
|
|
|
244
288
|
const json = response.data;
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
})
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
289
|
+
var faultsData = json.faults as string;
|
|
290
|
+
|
|
291
|
+
// #group,false,false,true,true,false,false,true,true,true,true,true,true
|
|
292
|
+
// #datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,boolean,string,string,string,string,string,string
|
|
293
|
+
// #default,last,,,,,,,,,,,
|
|
294
|
+
// ,result,table,_start,_stop,_time,_value,DeviceId,_field,_measurement,category,field,status
|
|
295
|
+
// ,,0,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:27:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,bool_value,DeviceStatus,离线报警,online,fault
|
|
296
|
+
// ,,0,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:30:00Z,true,004a05c1-7b5b-471c-ab68-f583039ddcfe,bool_value,DeviceStatus,离线报警,online,fault
|
|
297
|
+
// ,,1,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:27:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,repeated,DeviceStatus,离线报警,online,fault
|
|
298
|
+
// ,,1,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:30:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,repeated,DeviceStatus,离线报警,online,fault
|
|
299
|
+
// ,,2,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:27:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,resolved,DeviceStatus,离线报警,online,fault
|
|
300
|
+
// ,,2,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:30:00Z,true,004a05c1-7b5b-471c-ab68-f583039ddcfe,resolved,DeviceStatus,离线报警,online,fault
|
|
301
|
+
|
|
302
|
+
faultsData = faultsData.replace(/\r/g, "");
|
|
303
|
+
var arr = faultsData.split("\n");
|
|
304
|
+
var inAnnotation = false;
|
|
305
|
+
var columns: string[] = [];
|
|
306
|
+
var faults: DeviceFault[] = [];
|
|
307
|
+
for (var i = 0; i < arr.length; i++) {
|
|
308
|
+
var values = arr[i].split(",");
|
|
309
|
+
if (arr[i].startsWith("#")) {
|
|
310
|
+
} else if (arr[i] != "") {
|
|
311
|
+
if (inAnnotation) {
|
|
312
|
+
inAnnotation = false;
|
|
313
|
+
columns = values;
|
|
314
|
+
} else {
|
|
315
|
+
faults.push(new DeviceFault(values, columns));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return faults;
|
|
273
320
|
|
|
274
321
|
}
|
|
275
322
|
}
|
package/device_types/readme.md
CHANGED
package/dist/device_gateway.js
CHANGED
|
@@ -2,6 +2,47 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DeviceGateway = void 0;
|
|
4
4
|
const device_type_gateway_1 = require("./device_type_gateway");
|
|
5
|
+
class DeviceFault {
|
|
6
|
+
constructor(paramsOrValues, columns) {
|
|
7
|
+
if (Array.isArray(paramsOrValues)) {
|
|
8
|
+
// 处理values和columns的构造函数
|
|
9
|
+
const values = paramsOrValues;
|
|
10
|
+
const params = {};
|
|
11
|
+
for (let i = 0; i < columns.length; i++) {
|
|
12
|
+
const column = columns[i];
|
|
13
|
+
const value = values[i];
|
|
14
|
+
if (column === 'category')
|
|
15
|
+
params.category = value;
|
|
16
|
+
else if (column === 'time')
|
|
17
|
+
params.time = new Date(value);
|
|
18
|
+
else if (column === 'resolved')
|
|
19
|
+
params.resolved = value === 'true';
|
|
20
|
+
else if (column === 'repeated')
|
|
21
|
+
params.repeated = parseInt(value);
|
|
22
|
+
else if (column === 'value')
|
|
23
|
+
params.value = value;
|
|
24
|
+
else if (column === 'message')
|
|
25
|
+
params.message = value;
|
|
26
|
+
}
|
|
27
|
+
this.category = params.category;
|
|
28
|
+
this.time = params.time;
|
|
29
|
+
this.resolved = params.resolved;
|
|
30
|
+
this.repeated = params.repeated;
|
|
31
|
+
this.value = params.value;
|
|
32
|
+
this.message = params.message;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// 处理原始对象参数的构造函数
|
|
36
|
+
const params = paramsOrValues;
|
|
37
|
+
this.category = params.category;
|
|
38
|
+
this.time = params.time;
|
|
39
|
+
this.resolved = params.resolved;
|
|
40
|
+
this.repeated = params.repeated;
|
|
41
|
+
this.value = params.value;
|
|
42
|
+
this.message = params.message;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
5
46
|
const feedtower_1 = require("./device_types/feedtower");
|
|
6
47
|
const electricmeter_1 = require("./device_types/electricmeter");
|
|
7
48
|
const normal_type_1 = require("./device_types/normal_type");
|
|
@@ -160,25 +201,37 @@ class DeviceGateway extends Object {
|
|
|
160
201
|
const endTimeRfc3339 = endTime.toISOString();
|
|
161
202
|
const response = await axios.get(`/api/v1/device/${deviceId}/faults?start=${startTimeRfc3339}&stop=${endTimeRfc3339}`);
|
|
162
203
|
const json = response.data;
|
|
163
|
-
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
204
|
+
var faultsData = json.faults;
|
|
205
|
+
// #group,false,false,true,true,false,false,true,true,true,true,true,true
|
|
206
|
+
// #datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,boolean,string,string,string,string,string,string
|
|
207
|
+
// #default,last,,,,,,,,,,,
|
|
208
|
+
// ,result,table,_start,_stop,_time,_value,DeviceId,_field,_measurement,category,field,status
|
|
209
|
+
// ,,0,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:27:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,bool_value,DeviceStatus,离线报警,online,fault
|
|
210
|
+
// ,,0,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:30:00Z,true,004a05c1-7b5b-471c-ab68-f583039ddcfe,bool_value,DeviceStatus,离线报警,online,fault
|
|
211
|
+
// ,,1,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:27:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,repeated,DeviceStatus,离线报警,online,fault
|
|
212
|
+
// ,,1,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:30:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,repeated,DeviceStatus,离线报警,online,fault
|
|
213
|
+
// ,,2,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:27:00Z,false,004a05c1-7b5b-471c-ab68-f583039ddcfe,resolved,DeviceStatus,离线报警,online,fault
|
|
214
|
+
// ,,2,2025-04-20T22:07:43.623582865Z,2025-04-21T04:07:43.623582865Z,2025-04-21T00:30:00Z,true,004a05c1-7b5b-471c-ab68-f583039ddcfe,resolved,DeviceStatus,离线报警,online,fault
|
|
215
|
+
faultsData = faultsData.replace(/\r/g, "");
|
|
216
|
+
var arr = faultsData.split("\n");
|
|
217
|
+
var inAnnotation = false;
|
|
218
|
+
var columns = [];
|
|
219
|
+
var faults = [];
|
|
220
|
+
for (var i = 0; i < arr.length; i++) {
|
|
221
|
+
var values = arr[i].split(",");
|
|
222
|
+
if (arr[i].startsWith("#")) {
|
|
223
|
+
}
|
|
224
|
+
else if (arr[i] != "") {
|
|
225
|
+
if (inAnnotation) {
|
|
226
|
+
inAnnotation = false;
|
|
227
|
+
columns = values;
|
|
179
228
|
}
|
|
180
|
-
|
|
181
|
-
|
|
229
|
+
else {
|
|
230
|
+
faults.push(new DeviceFault(values, columns));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return faults;
|
|
182
235
|
}
|
|
183
236
|
}
|
|
184
237
|
exports.DeviceGateway = DeviceGateway;
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,22 +1,618 @@
|
|
|
1
|
-
# 正芯数智SDK
|
|
1
|
+
# 正芯数智SDK 文档
|
|
2
2
|
|
|
3
|
+
## 目录
|
|
4
|
+
- [概述](#概述)
|
|
5
|
+
- [快速开始](#快速开始)
|
|
6
|
+
- [安装](#安装)
|
|
7
|
+
- [初始化](#初始化)
|
|
8
|
+
- [开发环境配置](#开发环境配置)
|
|
9
|
+
- [核心功能模块](#核心功能模块)
|
|
10
|
+
- [接口参考](#接口参考)
|
|
11
|
+
- [工厂管理](#工厂管理)
|
|
12
|
+
- [设备管理](#设备管理)
|
|
13
|
+
- [摄像头管理](#摄像头管理)
|
|
14
|
+
- [保温灯管理](#保温灯管理)
|
|
15
|
+
- [用户管理](#用户管理)
|
|
16
|
+
- [项目管理](#项目管理)
|
|
17
|
+
- [合同管理](#合同管理)
|
|
18
|
+
- [日志管理](#日志管理)
|
|
19
|
+
- [附录](#附录)
|
|
20
|
+
- [通用参数说明](#通用参数说明)
|
|
21
|
+
- [错误处理](#错误处理)
|
|
22
|
+
- [常见错误码](#常见错误码)
|
|
23
|
+
|
|
24
|
+
## 概述
|
|
3
25
|
这是提供给上海正芯数智APP第三方H5应用使用的SDK模块,包含相关物联网设备的获取方式和接口功能
|
|
4
26
|
|
|
5
|
-
##
|
|
27
|
+
## 快速开始
|
|
28
|
+
### 安装
|
|
29
|
+
```bash
|
|
30
|
+
npm i @cpzxrobot/sdk
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 初始化
|
|
34
|
+
```javascript
|
|
35
|
+
import cpzxrobot from "@cpzxrobot/sdk"
|
|
6
36
|
|
|
37
|
+
cpzxrobot({
|
|
38
|
+
devAuth: "从上海正芯获得的开发临时token",
|
|
39
|
+
appCode: "上海正芯分配的App Code",
|
|
40
|
+
selectedFarm: {
|
|
41
|
+
code: "xxxx",
|
|
42
|
+
company_code: "xxxx",
|
|
43
|
+
id: 123456,
|
|
44
|
+
name: "自定义用户测试的工厂,请从后台根据业务选择合适的工厂",
|
|
45
|
+
},
|
|
46
|
+
selectedUnit: {
|
|
47
|
+
id: 123456,
|
|
48
|
+
name: "自定义用户测试的单元,请从后台根据业务选择合适的单元",
|
|
49
|
+
workshopName: 'A栋'
|
|
50
|
+
},
|
|
51
|
+
});
|
|
7
52
|
```
|
|
8
|
-
|
|
53
|
+
|
|
54
|
+
### 开发环境配置
|
|
55
|
+
如果出现CORS问题,请配置代理:
|
|
56
|
+
```javascript
|
|
57
|
+
// vite.config.js
|
|
58
|
+
server: {
|
|
59
|
+
proxy: {
|
|
60
|
+
"/api": {
|
|
61
|
+
target: "https://www.cpzxrobot.com/",
|
|
62
|
+
changeOrigin: true,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
}
|
|
9
66
|
```
|
|
10
67
|
|
|
11
|
-
##
|
|
68
|
+
## 核心功能模块
|
|
69
|
+
1. 工厂管理
|
|
70
|
+
2. 设备管理
|
|
71
|
+
3. 摄像头管理
|
|
72
|
+
4. 料塔管理
|
|
73
|
+
5. 保温灯管理
|
|
74
|
+
6. 用户管理
|
|
75
|
+
7. 项目管理
|
|
76
|
+
8. 合同管理
|
|
77
|
+
9. 客户管理
|
|
78
|
+
10. 公司管理
|
|
79
|
+
11. 车辆管理
|
|
80
|
+
12. 新闻管理
|
|
81
|
+
13. 日志管理
|
|
12
82
|
|
|
13
|
-
|
|
83
|
+
## 接口参考
|
|
84
|
+
### 工厂管理
|
|
85
|
+
#### 获取工厂信息
|
|
86
|
+
```javascript
|
|
87
|
+
cpzxrobot().factory.workshops(factory_id)
|
|
88
|
+
```
|
|
89
|
+
参数:
|
|
90
|
+
- factory_id: 工厂id
|
|
14
91
|
|
|
92
|
+
#### 获取工厂单元
|
|
93
|
+
```javascript
|
|
94
|
+
cpzxrobot().factory.units(factory_id)
|
|
15
95
|
```
|
|
16
|
-
|
|
96
|
+
参数:
|
|
97
|
+
- factory_id: 工厂id
|
|
98
|
+
|
|
99
|
+
### 设备管理
|
|
100
|
+
#### 设备基础接口
|
|
101
|
+
```javascript
|
|
102
|
+
// 获取设备列表
|
|
103
|
+
cpzxrobot().device.list()
|
|
104
|
+
|
|
105
|
+
// 获取单个设备数据
|
|
106
|
+
cpzxrobot().device.data(deviceId)
|
|
107
|
+
|
|
108
|
+
// 验证设备有效性
|
|
109
|
+
cpzxrobot().device.validate(serialNumbers)
|
|
110
|
+
|
|
111
|
+
// 获取设备报警阈值
|
|
112
|
+
cpzxrobot().device.thresholdConfig.list()
|
|
113
|
+
|
|
114
|
+
// 获取设备报警列表
|
|
115
|
+
|
|
116
|
+
## faults函数说明
|
|
117
|
+
|
|
118
|
+
获取设备故障记录
|
|
119
|
+
|
|
120
|
+
### 参数
|
|
121
|
+
- `deviceId`: number - 设备ID
|
|
122
|
+
- `startTime`: Date - 开始时间
|
|
123
|
+
- `endTime`: Date - 结束时间
|
|
124
|
+
|
|
125
|
+
### 返回值
|
|
126
|
+
Promise<DeviceFault[]> - 按时间排序的故障记录数组
|
|
127
|
+
|
|
128
|
+
### 使用示例
|
|
129
|
+
```typescript
|
|
130
|
+
const faults = await cpzxrobot().device.faults(
|
|
131
|
+
123,
|
|
132
|
+
new Date('2023-01-01'),
|
|
133
|
+
new Date('2023-01-31')
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
faults.forEach(fault => {
|
|
137
|
+
console.log(`时间: ${fault.time}, 类别: ${fault.category}`);
|
|
138
|
+
});
|
|
17
139
|
```
|
|
18
140
|
|
|
19
|
-
###
|
|
141
|
+
### DeviceFault接口
|
|
142
|
+
```typescript
|
|
143
|
+
interface DeviceFault {
|
|
144
|
+
category: string; // 故障类别
|
|
145
|
+
time: Date; // 发生时间
|
|
146
|
+
resolved: boolean; // 是否已解决
|
|
147
|
+
repeated?: number; // 重复次数(可选)
|
|
148
|
+
value?: any; // 故障值(可选)
|
|
149
|
+
message?: string; // 故障消息(可选)
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### 料塔设备接口
|
|
154
|
+
```javascript
|
|
155
|
+
// 获取料塔列表
|
|
156
|
+
cpzxrobot().device.feedTower.list()
|
|
157
|
+
cpzxrobot().device.feedTower.v2.list()
|
|
158
|
+
|
|
159
|
+
// 料塔清零
|
|
160
|
+
cpzxrobot().device.feedTower.v2.adzero(towerId)
|
|
161
|
+
|
|
162
|
+
// 获取料塔统计
|
|
163
|
+
cpzxrobot().device.feedTower.stat(towerId)
|
|
164
|
+
|
|
165
|
+
// 料塔报警参数
|
|
166
|
+
cpzxrobot().device.feedTower.setAlarmParam(params)
|
|
167
|
+
cpzxrobot().device.feedTower.getAlarmParam(towerId)
|
|
168
|
+
cpzxrobot().device.feedTower.updateAlarmParam(params)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### 设备管理V2接口
|
|
172
|
+
```javascript
|
|
173
|
+
// 设备增删改查
|
|
174
|
+
cpzxrobot().device.v2.add(deviceInfo)
|
|
175
|
+
cpzxrobot().device.v2.update(deviceInfo)
|
|
176
|
+
cpzxrobot().device.v2.list(params)
|
|
177
|
+
cpzxrobot().device.v2.delete(deviceId)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### 设备故障记录
|
|
181
|
+
```javascript
|
|
182
|
+
// 获取设备故障记录
|
|
183
|
+
cpzxrobot().device.faults(deviceId, startTime, endTime)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 摄像头管理
|
|
187
|
+
#### 摄像头搜索
|
|
188
|
+
```javascript
|
|
189
|
+
// 按单元搜索
|
|
190
|
+
cpzxrobot().camera.search({unit_id: unitId})
|
|
191
|
+
|
|
192
|
+
// 按工厂搜索
|
|
193
|
+
cpzxrobot().camera.search({factory_id: factoryId})
|
|
194
|
+
|
|
195
|
+
// 按车间搜索
|
|
196
|
+
cpzxrobot().camera.search({workshop_id: workshopId})
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### 摄像头控制
|
|
200
|
+
```javascript
|
|
201
|
+
// 控制摄像头移动
|
|
202
|
+
cpzxrobot().camera.control({
|
|
203
|
+
cameraId: string,
|
|
204
|
+
direction: 'left'|'right'|'up'|'down',
|
|
205
|
+
start: boolean, // 开始移动
|
|
206
|
+
stop: boolean // 停止移动
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
// 默认3秒自动停止
|
|
210
|
+
cpzxrobot().camera.control({
|
|
211
|
+
cameraId: string,
|
|
212
|
+
direction: 'left'|'right'|'up'|'down'
|
|
213
|
+
})
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
#### 摄像头状态获取
|
|
217
|
+
```javascript
|
|
218
|
+
// 获取摄像头实时画面
|
|
219
|
+
cpzxrobot().camera.liveView(cameraId)
|
|
220
|
+
|
|
221
|
+
// 获取摄像头信息
|
|
222
|
+
cpzxrobot().camera.info(cameraId)
|
|
223
|
+
|
|
224
|
+
// 获取摄像头历史记录
|
|
225
|
+
cpzxrobot().camera.history(cameraId, startTime, endTime)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 保温灯管理
|
|
229
|
+
#### 保温灯配置管理
|
|
230
|
+
```javascript
|
|
231
|
+
// 添加保温灯配置
|
|
232
|
+
cpzxrobot().pigfarm.heatlamp.add(unitId, {
|
|
233
|
+
name: string,
|
|
234
|
+
dayAge: number,
|
|
235
|
+
temperature: number
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
// 获取保温灯列表
|
|
239
|
+
cpzxrobot().pigfarm.heatlamp.list(unitId)
|
|
240
|
+
|
|
241
|
+
// 获取保温灯详情
|
|
242
|
+
cpzxrobot().pigfarm.heatlamp.get(heatlampId)
|
|
243
|
+
|
|
244
|
+
// 更新保温灯配置
|
|
245
|
+
cpzxrobot().pigfarm.heatlamp.update({
|
|
246
|
+
id: number,
|
|
247
|
+
name?: string,
|
|
248
|
+
dayAge?: number,
|
|
249
|
+
temperature?: number
|
|
250
|
+
})
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
#### 保温灯状态控制
|
|
254
|
+
```javascript
|
|
255
|
+
// 设置保温灯工作日龄
|
|
256
|
+
cpzxrobot().pigfarm.heatlamp.set(heatlampId, {
|
|
257
|
+
action: "dayage",
|
|
258
|
+
argc: number // 天数
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
// 开关保温灯
|
|
262
|
+
cpzxrobot().pigfarm.heatlamp.switch(heatlampId, {
|
|
263
|
+
action: "on"|"off"
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
// 按单元批量控制
|
|
267
|
+
cpzxrobot().pigfarm.heatlamp.switchByUnit(unitId, {
|
|
268
|
+
action: "on"|"off"
|
|
269
|
+
})
|
|
270
|
+
|
|
271
|
+
// 获取任务状态
|
|
272
|
+
cpzxrobot().pigfarm.heatlamp.taskStatus(taskId)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### 保温灯模板管理
|
|
276
|
+
```javascript
|
|
277
|
+
// 添加保温灯模板
|
|
278
|
+
cpzxrobot().pigfarm.heatlamp.template.add({
|
|
279
|
+
name: string,
|
|
280
|
+
stages: Array<{
|
|
281
|
+
dayAge: number,
|
|
282
|
+
temperature: number
|
|
283
|
+
}>
|
|
284
|
+
})
|
|
285
|
+
|
|
286
|
+
// 获取模板列表
|
|
287
|
+
cpzxrobot().pigfarm.heatlamp.template.list()
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
#### 单元统计信息
|
|
291
|
+
```javascript
|
|
292
|
+
// 获取单元统计信息
|
|
293
|
+
cpzxrobot().pigfarm.unitStat(unitId)
|
|
294
|
+
|
|
295
|
+
// 获取单元阈值配置
|
|
296
|
+
cpzxrobot().unit.thresholdConfig.get(unitId)
|
|
297
|
+
|
|
298
|
+
// 绑定单元阈值配置
|
|
299
|
+
cpzxrobot().unit.thresholdConfig.bind(unitId, config)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 用户管理
|
|
303
|
+
#### 用户基础操作
|
|
304
|
+
```javascript
|
|
305
|
+
// 添加用户
|
|
306
|
+
cpzxrobot().user.add({
|
|
307
|
+
name: string,
|
|
308
|
+
mobile: string,
|
|
309
|
+
roleId: number,
|
|
310
|
+
factoryId: number
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
// 更新用户信息
|
|
314
|
+
cpzxrobot().user.update(userId, {
|
|
315
|
+
name?: string,
|
|
316
|
+
mobile?: string,
|
|
317
|
+
roleId?: number
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
// 获取用户列表
|
|
321
|
+
cpzxrobot().user.list({
|
|
322
|
+
factoryId: number,
|
|
323
|
+
page?: number,
|
|
324
|
+
size?: number
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
// 获取用户详情
|
|
328
|
+
cpzxrobot().user.info(userId)
|
|
329
|
+
|
|
330
|
+
// 按角色获取用户
|
|
331
|
+
cpzxrobot().user.listByRole({
|
|
332
|
+
companyId: number,
|
|
333
|
+
roleId: number
|
|
334
|
+
})
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
#### 用户审批流程
|
|
338
|
+
```javascript
|
|
339
|
+
// 获取审批列表
|
|
340
|
+
cpzxrobot().user.approval.list({
|
|
341
|
+
userId: number,
|
|
342
|
+
status: 'pending'|'approved'|'rejected'
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
// 获取审批数量
|
|
346
|
+
cpzxrobot().user.approval.count({
|
|
347
|
+
userId: number,
|
|
348
|
+
status: 'pending'|'approved'|'rejected'
|
|
349
|
+
})
|
|
350
|
+
|
|
351
|
+
// 提交审批
|
|
352
|
+
cpzxrobot().user.approval.submit({
|
|
353
|
+
userId: number,
|
|
354
|
+
type: string,
|
|
355
|
+
content: string
|
|
356
|
+
})
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
#### 用户考勤管理
|
|
360
|
+
```javascript
|
|
361
|
+
// 添加签到记录
|
|
362
|
+
cpzxrobot().user.checkin.add({
|
|
363
|
+
userId: number,
|
|
364
|
+
address: string
|
|
365
|
+
})
|
|
366
|
+
|
|
367
|
+
// 获取签到记录
|
|
368
|
+
cpzxrobot().user.checkin.list({
|
|
369
|
+
userId: number,
|
|
370
|
+
date: string // YYYY-MM-DD
|
|
371
|
+
})
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
#### 用户工作报告
|
|
375
|
+
```javascript
|
|
376
|
+
// 获取工作报告列表
|
|
377
|
+
cpzxrobot().user.workReport.list(userId)
|
|
378
|
+
|
|
379
|
+
// 添加工作报告
|
|
380
|
+
cpzxrobot().user.workReport.add({
|
|
381
|
+
userId: number,
|
|
382
|
+
content: string
|
|
383
|
+
})
|
|
384
|
+
|
|
385
|
+
// 更新工作报告
|
|
386
|
+
cpzxrobot().user.workReport.update(reportId, {
|
|
387
|
+
content: string
|
|
388
|
+
})
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
#### 用户统计分析
|
|
392
|
+
```javascript
|
|
393
|
+
// 全国用户统计
|
|
394
|
+
cpzxrobot().user.stat.china()
|
|
395
|
+
|
|
396
|
+
// 按地区统计
|
|
397
|
+
cpzxrobot().user.listByProvince(province)
|
|
398
|
+
cpzxrobot().user.listByCity(city)
|
|
399
|
+
|
|
400
|
+
// 部门关系查询
|
|
401
|
+
cpzxrobot().user.position.leader() // 获取领导信息
|
|
402
|
+
cpzxrobot().user.position.team() // 获取下属团队
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### 项目管理
|
|
406
|
+
#### 项目基础信息
|
|
407
|
+
```javascript
|
|
408
|
+
// 获取项目列表
|
|
409
|
+
cpzxrobot().project.list({
|
|
410
|
+
factoryId: number,
|
|
411
|
+
page?: number,
|
|
412
|
+
size?: number
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
// 获取项目详情
|
|
416
|
+
cpzxrobot().project.get(projectId)
|
|
417
|
+
|
|
418
|
+
// 全国项目统计
|
|
419
|
+
cpzxrobot().project.stat.china()
|
|
420
|
+
|
|
421
|
+
// 按地区统计
|
|
422
|
+
cpzxrobot().project.listByProvince(province)
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
#### 项目反馈管理
|
|
426
|
+
```javascript
|
|
427
|
+
// 获取反馈列表
|
|
428
|
+
cpzxrobot().project.feedback.list(projectId)
|
|
429
|
+
|
|
430
|
+
// 添加项目反馈
|
|
431
|
+
cpzxrobot().project.feedback.add({
|
|
432
|
+
projectId: number,
|
|
433
|
+
content: string
|
|
434
|
+
})
|
|
435
|
+
|
|
436
|
+
// 回复项目反馈
|
|
437
|
+
cpzxrobot().project.feedback.reply({
|
|
438
|
+
feedbackId: number,
|
|
439
|
+
content: string
|
|
440
|
+
})
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
#### 项目询盘管理
|
|
444
|
+
```javascript
|
|
445
|
+
// 获取询盘列表
|
|
446
|
+
cpzxrobot().project.inquiry.list(projectId)
|
|
447
|
+
|
|
448
|
+
// 添加询盘
|
|
449
|
+
cpzxrobot().project.inquiry.add({
|
|
450
|
+
projectId: number,
|
|
451
|
+
content: string
|
|
452
|
+
})
|
|
453
|
+
|
|
454
|
+
// 询盘审批
|
|
455
|
+
cpzxrobot().project.inquiry.approval({
|
|
456
|
+
inquiryId: number,
|
|
457
|
+
opinion: string
|
|
458
|
+
})
|
|
459
|
+
|
|
460
|
+
// 导出询盘
|
|
461
|
+
cpzxrobot().project.inquiry.export({
|
|
462
|
+
projectId: number,
|
|
463
|
+
fileName?: string
|
|
464
|
+
})
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
#### 项目资源管理
|
|
468
|
+
```javascript
|
|
469
|
+
// 获取项目文档
|
|
470
|
+
cpzxrobot().project.document.list(projectId)
|
|
471
|
+
|
|
472
|
+
// 获取物料到货
|
|
473
|
+
cpzxrobot().project.material.list(projectId)
|
|
474
|
+
|
|
475
|
+
// 获取施工队信息
|
|
476
|
+
cpzxrobot().project.constructionTeam.list(projectId)
|
|
477
|
+
|
|
478
|
+
// 获取考勤记录
|
|
479
|
+
cpzxrobot().project.attendance.list(projectId)
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
#### 项目关联产品
|
|
483
|
+
```javascript
|
|
484
|
+
// 获取产品列表
|
|
485
|
+
cpzxrobot().product.list({
|
|
486
|
+
factoryId: number,
|
|
487
|
+
page?: number,
|
|
488
|
+
size?: number
|
|
489
|
+
})
|
|
490
|
+
|
|
491
|
+
// 产品报价管理
|
|
492
|
+
cpzxrobot().product.price.list(productId)
|
|
493
|
+
cpzxrobot().product.price.add({
|
|
494
|
+
productId: number,
|
|
495
|
+
price: number,
|
|
496
|
+
currency: string
|
|
497
|
+
})
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### 合同管理
|
|
501
|
+
#### 合同基础操作
|
|
502
|
+
```javascript
|
|
503
|
+
// 获取合同列表
|
|
504
|
+
cpzxrobot().contract.list({
|
|
505
|
+
factoryId: number,
|
|
506
|
+
page?: number,
|
|
507
|
+
size?: number
|
|
508
|
+
})
|
|
509
|
+
|
|
510
|
+
// 获取合同详情
|
|
511
|
+
cpzxrobot().contract.get(contractId)
|
|
512
|
+
|
|
513
|
+
// 添加合同
|
|
514
|
+
cpzxrobot().contract.add({
|
|
515
|
+
projectId: number,
|
|
516
|
+
contractType: number,
|
|
517
|
+
amount: number,
|
|
518
|
+
startDate: string, // YYYY-MM-DD
|
|
519
|
+
endDate: string, // YYYY-MM-DD
|
|
520
|
+
content: string
|
|
521
|
+
})
|
|
522
|
+
|
|
523
|
+
// 导出合同
|
|
524
|
+
cpzxrobot().contract.export({
|
|
525
|
+
contractId: number,
|
|
526
|
+
fileName?: string
|
|
527
|
+
})
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
#### 合同审批流程
|
|
531
|
+
```javascript
|
|
532
|
+
// 提交合同审批
|
|
533
|
+
cpzxrobot().contract.approval({
|
|
534
|
+
contractId: number,
|
|
535
|
+
opinion: string
|
|
536
|
+
})
|
|
537
|
+
|
|
538
|
+
// 重新提交审批
|
|
539
|
+
cpzxrobot().contract.restart({
|
|
540
|
+
contractId: number,
|
|
541
|
+
reason: string
|
|
542
|
+
})
|
|
543
|
+
|
|
544
|
+
// 获取合同类型列表
|
|
545
|
+
cpzxrobot().contract.types(factoryId)
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
#### 合同关联信息
|
|
549
|
+
```javascript
|
|
550
|
+
// 获取客户列表
|
|
551
|
+
cpzxrobot().customer.list({
|
|
552
|
+
factoryId: number,
|
|
553
|
+
page?: number,
|
|
554
|
+
size?: number
|
|
555
|
+
})
|
|
556
|
+
|
|
557
|
+
// 获取客户详情
|
|
558
|
+
cpzxrobot().customer.get(customerId)
|
|
559
|
+
|
|
560
|
+
// 添加客户
|
|
561
|
+
cpzxrobot().customer.add({
|
|
562
|
+
name: string,
|
|
563
|
+
type: number,
|
|
564
|
+
contact: string,
|
|
565
|
+
mobile: string,
|
|
566
|
+
factoryId: number
|
|
567
|
+
})
|
|
568
|
+
|
|
569
|
+
// 客户拜访记录
|
|
570
|
+
cpzxrobot().customer.visit.add({
|
|
571
|
+
customerId: number,
|
|
572
|
+
content: string
|
|
573
|
+
})
|
|
574
|
+
|
|
575
|
+
// 获取客户拜访列表
|
|
576
|
+
cpzxrobot().customer.visit.list({
|
|
577
|
+
customerId: number,
|
|
578
|
+
page?: number
|
|
579
|
+
})
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
#### 公司管理
|
|
583
|
+
```javascript
|
|
584
|
+
// 获取公司列表
|
|
585
|
+
cpzxrobot().company.list({
|
|
586
|
+
page?: number,
|
|
587
|
+
size?: number
|
|
588
|
+
})
|
|
589
|
+
|
|
590
|
+
// 公司营收统计
|
|
591
|
+
cpzxrobot().company.revenue.list({
|
|
592
|
+
year?: number,
|
|
593
|
+
month?: number
|
|
594
|
+
})
|
|
595
|
+
|
|
596
|
+
// 公司排名
|
|
597
|
+
cpzxrobot().company.rank.byRevenue()
|
|
598
|
+
cpzxrobot().company.rank.byProfit()
|
|
599
|
+
cpzxrobot().company.rank.byOrder()
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
#### 车辆管理
|
|
603
|
+
```javascript
|
|
604
|
+
// 全国车辆统计
|
|
605
|
+
cpzxrobot().car.stat.china()
|
|
606
|
+
|
|
607
|
+
// 按地区统计
|
|
608
|
+
cpzxrobot().car.listByProvince(province)
|
|
609
|
+
cpzxrobot().car.listByCity(city)
|
|
610
|
+
cpzxrobot().car.listByDistrict(district)
|
|
611
|
+
|
|
612
|
+
// 获取车辆运单
|
|
613
|
+
cpzxrobot().car.orders(factoryId)
|
|
614
|
+
cpzxrobot().car.ordersByFactory(factoryId)
|
|
615
|
+
```
|
|
20
616
|
```
|
|
21
617
|
cpzxrobot({
|
|
22
618
|
devAuth: "从上海正芯获得的开发临时token",
|
|
@@ -382,3 +978,119 @@ heatlamp 属性提供了一组方法,用于管理猪场的热灯配置。它
|
|
|
382
978
|
|
|
383
979
|
注意:对于POST请求的接口,body参数统一使用 `any` 类型,具体参数结构需要根据实际API要求进行定义。
|
|
384
980
|
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
## 日志管理
|
|
984
|
+
### 操作日志
|
|
985
|
+
```javascript
|
|
986
|
+
// 查询操作日志
|
|
987
|
+
cpzxrobot().logs.operations({
|
|
988
|
+
userId?: number,
|
|
989
|
+
module?: string,
|
|
990
|
+
action?: string,
|
|
991
|
+
startTime?: string, // YYYY-MM-DD
|
|
992
|
+
endTime?: string, // YYYY-MM-DD
|
|
993
|
+
page?: number,
|
|
994
|
+
size?: number
|
|
995
|
+
})
|
|
996
|
+
|
|
997
|
+
// 获取设备操作日志
|
|
998
|
+
cpzxrobot().device.logs({
|
|
999
|
+
deviceId: number,
|
|
1000
|
+
startTime?: string,
|
|
1001
|
+
endTime?: string
|
|
1002
|
+
})
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
### 报警日志
|
|
1006
|
+
```javascript
|
|
1007
|
+
// 添加报警信息
|
|
1008
|
+
cpzxrobot().news.alarm.add({
|
|
1009
|
+
deviceId: number,
|
|
1010
|
+
type: string,
|
|
1011
|
+
level: 'info'|'warning'|'error',
|
|
1012
|
+
message: string
|
|
1013
|
+
})
|
|
1014
|
+
|
|
1015
|
+
// 获取报警列表
|
|
1016
|
+
cpzxrobot().news.alarm.list({
|
|
1017
|
+
deviceId?: number,
|
|
1018
|
+
type?: string,
|
|
1019
|
+
resolved?: boolean,
|
|
1020
|
+
startTime?: string,
|
|
1021
|
+
endTime?: string,
|
|
1022
|
+
page?: number,
|
|
1023
|
+
size?: number
|
|
1024
|
+
})
|
|
1025
|
+
|
|
1026
|
+
// 标记报警为已处理
|
|
1027
|
+
cpzxrobot().news.alarm.resolve(alarmId)
|
|
1028
|
+
```
|
|
1029
|
+
|
|
1030
|
+
### 系统日志
|
|
1031
|
+
```javascript
|
|
1032
|
+
// 获取系统运行日志
|
|
1033
|
+
cpzxrobot().logs.system({
|
|
1034
|
+
level?: 'info'|'warning'|'error',
|
|
1035
|
+
startTime?: string,
|
|
1036
|
+
endTime?: string,
|
|
1037
|
+
page?: number,
|
|
1038
|
+
size?: number
|
|
1039
|
+
})
|
|
1040
|
+
|
|
1041
|
+
// 获取API调用日志
|
|
1042
|
+
cpzxrobot().logs.api({
|
|
1043
|
+
path?: string,
|
|
1044
|
+
statusCode?: number,
|
|
1045
|
+
startTime?: string,
|
|
1046
|
+
endTime?: string
|
|
1047
|
+
})
|
|
1048
|
+
|
|
1049
|
+
// 获取登录日志
|
|
1050
|
+
cpzxrobot().logs.login({
|
|
1051
|
+
userId?: number,
|
|
1052
|
+
success?: boolean,
|
|
1053
|
+
startTime?: string,
|
|
1054
|
+
endTime?: string
|
|
1055
|
+
})
|
|
1056
|
+
```
|
|
1057
|
+
|
|
1058
|
+
### 巡检任务日志
|
|
1059
|
+
```javascript
|
|
1060
|
+
// 获取巡检任务日志
|
|
1061
|
+
cpzxrobot().robot.task.logs({
|
|
1062
|
+
taskId?: number,
|
|
1063
|
+
unitId?: number,
|
|
1064
|
+
status?: 'pending'|'in_progress'|'completed'|'failed',
|
|
1065
|
+
startTime?: string,
|
|
1066
|
+
endTime?: string
|
|
1067
|
+
})
|
|
1068
|
+
|
|
1069
|
+
// 获取巡检记录详情
|
|
1070
|
+
cpzxrobot().robot.record.details(recordId)
|
|
1071
|
+
```
|
|
1072
|
+
|
|
1073
|
+
## 附录
|
|
1074
|
+
### 通用参数说明
|
|
1075
|
+
- 所有列表查询接口都支持以下分页参数:
|
|
1076
|
+
- page: 页码(从1开始)
|
|
1077
|
+
- size: 每页数量(默认10)
|
|
1078
|
+
- 时间范围参数格式: YYYY-MM-DD
|
|
1079
|
+
- 所有ID参数均为数字类型
|
|
1080
|
+
|
|
1081
|
+
### 错误处理
|
|
1082
|
+
所有接口调用错误都会返回统一格式:
|
|
1083
|
+
```javascript
|
|
1084
|
+
{
|
|
1085
|
+
code: number, // 错误码
|
|
1086
|
+
message: string, // 错误信息
|
|
1087
|
+
details?: any // 错误详情(可选)
|
|
1088
|
+
}
|
|
1089
|
+
```
|
|
1090
|
+
|
|
1091
|
+
### 常见错误码
|
|
1092
|
+
- 400: 参数错误
|
|
1093
|
+
- 401: 未授权
|
|
1094
|
+
- 403: 权限不足
|
|
1095
|
+
- 404: 资源不存在
|
|
1096
|
+
- 500: 服务器错误
|