/
import.go
74 lines (64 loc) · 1.23 KB
/
import.go
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
package curd
import (
"archive/zip"
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/zgwit/iot-master/v3/pkg/db"
"io"
)
func ApiImport(table string) gin.HandlerFunc {
return func(ctx *gin.Context) {
formFile, err := ctx.FormFile("file")
if err != nil {
Error(ctx, err)
return
}
file, err := formFile.Open()
if err != nil {
Error(ctx, err)
return
}
defer file.Close()
reader, err := zip.NewReader(file, formFile.Size)
if err != nil {
Error(ctx, err)
return
}
//数据解析
//var datum []map[string]any
var in int64
for _, file := range reader.File {
if file.FileInfo().IsDir() {
continue
}
reader, err := file.Open()
buf, err := io.ReadAll(reader)
if err != nil {
Error(ctx, err)
return
}
var data map[string]any
err = json.Unmarshal(buf, &data)
if err != nil {
Error(ctx, err)
return
}
has, err := db.Engine.Table(table).ID(data["id"]).Exist()
if err != nil {
Error(ctx, err)
return
}
if has {
_, _ = db.Engine.Table(table).Where("id=?", data["id"]).Delete()
}
//插入数据
n, err := db.Engine.Table(table).Insert(data)
if err != nil {
Error(ctx, err)
return
}
in += n
}
OK(ctx, in)
}
}