-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
117 lines (101 loc) · 3.64 KB
/
main.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
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
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"log"
"os"
"path"
"strings"
"github.com/tealeg/xlsx"
)
const reportPach = "report"
// ReportList список данных для отчета
type ReportList struct {
Reports []Report
}
// Report данные для отчета
type Report struct {
ДатаСообщения string
КодОтказа string
ПризнНеобОперации []string
СтатусУчастника string
Фам string
Имя string
Отч string
ДатаРождения string
}
func main() {
reportListgo := ReportList{}
files, err := ioutil.ReadDir(reportPach)
if err != nil {
log.Fatal(err)
}
for _, file := range files {
xmlFile, err := os.Open(path.Join(reportPach, file.Name()))
if err != nil {
log.Println(err)
}
defer xmlFile.Close()
byteValue, _ := ioutil.ReadAll(xmlFile)
var message sbFile12
xml.Unmarshal(byteValue, &message)
if message.СлужЧасть.ВерсияФормата == "1.2" {
for i := 0; i < len(message.ИнформЧасть.Раздел2); i++ {
for p := 0; p < len(message.ИнформЧасть.Раздел2[i].Участник); p++ {
if message.ИнформЧасть.Раздел2[i].Участник[p].ТипУчастника == "2" {
var r Report
r.parse(message, i, p)
reportListgo.addItem(r)
}
}
}
} else {
log.Println(file.Name(), "файл версия не 1.2")
}
}
reportListgo.createXls()
}
func (l *ReportList) addItem(r Report) {
l.Reports = append(l.Reports, r)
}
func (l *ReportList) createXls() {
var file *xlsx.File
var sheet *xlsx.Sheet
var row *xlsx.Row
var cell *xlsx.Cell
var err error
file = xlsx.NewFile()
sheet, err = file.AddSheet("Sheet1")
if err != nil {
fmt.Printf(err.Error())
}
row = sheet.AddRow()
head := []string{"ДатаСообщения", "КодОтказа", "ПризнНеобОперации", "СтатусУчастника", "Фам", "Имя", "Отч", "ДатаРождения"}
for _, i := range head {
cell = row.AddCell()
cell.Value = i
}
for _, item := range l.Reports {
row = sheet.AddRow()
values := []string{item.ДатаСообщения, item.КодОтказа, strings.Join(item.ПризнНеобОперации, ", "), item.СтатусУчастника, item.Фам, item.Имя, item.Отч, item.ДатаРождения}
for _, i := range values {
cell = row.AddCell()
cell.Value = i
}
}
err = file.Save("result.xlsx")
if err != nil {
fmt.Printf(err.Error())
}
}
func (r *Report) parse(m sbFile12, section int, participant int) {
r.ДатаСообщения = m.СлужЧасть.ДатаСообщения
r.КодОтказа = m.ИнформЧасть.Раздел2[section].СведОперация.КодОтказа
r.ПризнНеобОперации = m.ИнформЧасть.Раздел2[section].СведОперация.ПризнНеобОперации
r.СтатусУчастника = m.ИнформЧасть.Раздел2[section].Участник[participant].СтатусУчастника
r.Фам = m.ИнформЧасть.Раздел2[section].Участник[participant].СведФЛИП.ФИОФЛИП.Фам
r.Имя = m.ИнформЧасть.Раздел2[section].Участник[participant].СведФЛИП.ФИОФЛИП.Имя
r.Отч = m.ИнформЧасть.Раздел2[section].Участник[participant].СведФЛИП.ФИОФЛИП.Отч
r.ДатаРождения = m.ИнформЧасть.Раздел2[section].Участник[participant].СведФЛИП.ДатаРождения
}