forked from davyxu/tabtoy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
datamodel.go
66 lines (48 loc) · 1.29 KB
/
datamodel.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
package model
import "sort"
type GlobalChecker interface {
CheckValueRepeat(fd *FieldDescriptor, value string) bool
GlobalFileDesc() *FileDescriptor
}
type FieldValue struct {
FieldDef *FieldDescriptor
RawValue string
R int
C int
SheetName string
FileName string
FieldRepeatedCount int // repeated拆成多列时, 这样重复列的数量
}
// 对应record
type LineData struct {
Values []*FieldValue
}
func (self *LineData) Len() int {
return len(self.Values)
}
func (self *LineData) Swap(i, j int) {
self.Values[i], self.Values[j] = self.Values[j], self.Values[i]
}
func (self *LineData) Less(i, j int) bool {
a := self.Values[i]
b := self.Values[j]
// repeated字段分多个单元格导出时, 由于进行数据排序, 所以需要增加对列排序因子保证最终数据正确性
return a.FieldDef.Order+int32(a.C) < b.FieldDef.Order+int32(b.C)
}
func (self *LineData) Add(fv *FieldValue) {
self.Values = append(self.Values, fv)
}
func NewLineData() *LineData {
return new(LineData)
}
// 对应table
type DataModel struct {
Lines []*LineData
}
func (self *DataModel) Add(data *LineData) {
sort.Sort(data)
self.Lines = append(self.Lines, data)
}
func NewDataModel() *DataModel {
return new(DataModel)
}