vvod/main.go

152 lines
2.8 KiB
Go

package main
import (
"bufio"
"bytes"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"os"
)
var (
// TOKEN token
TOKEN = "08bb51ff-1eb6-4167-8ed2-eb19fc343703"
// MICROSERVICEURL url to microservie
MICROSERVICEURL = "http://microservice01:8081/api/v1/documents/create?crptDocType=LP_INTRODUCE_OST"
)
// Hello ...
func Hello(name string) string {
if name == "" {
name = "World"
}
return fmt.Sprintf("Hello, %s", name)
}
// ParseFile ...
func ParseFile(fileName string) ([]string, error) {
if fileName == "" {
return nil, errors.New("Empty file path")
}
file, err := os.Open(fileName)
if err != nil {
return nil, err
}
defer file.Close()
scanner := bufio.NewScanner(file)
var lines []string
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines, nil
}
// SplitSlice ...
func SplitSlice(lines []string) error {
l := len(lines)
max := 20
if l >= max {
filesNum := l / max
if l%max > 0 {
filesNum++
}
files := make([]string, filesNum)
start := 0
end := max
for i := 1; i <= filesNum; i++ {
if start+max <= filesNum {
end = start + max
} else {
end = start + l%max
}
fName := fmt.Sprintf("./out/part_%d.csv", i)
if err := MakePartFile(lines[start:end], fName); err != nil {
return err
}
files = append(files, fName)
}
for _, file := range files {
SendToMicroservice(file)
}
}
return nil
}
// SendToMicroservice ...
func SendToMicroservice(fileName string) error {
lines, err := ParseFile(fileName)
if err != nil {
return err
}
products := make([]Cis, 0)
for _, line := range lines {
if line != "" {
cis := NewCis(line)
products = append(products, cis)
}
}
document := NewDocument("122323", products)
data, err := json.Marshal(document)
if err != nil {
return err
}
req, err := http.NewRequest("POST", MICROSERVICEURL, bytes.NewBuffer(data))
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("token", TOKEN)
client := http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
return nil
}
// MakePartFile ...
func MakePartFile(lines []string, fName string) error {
file, err := os.OpenFile(fName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
if err != nil {
return err
}
defer file.Close()
for _, line := range lines {
if _, err := file.WriteString(fmt.Sprintln(line)); err != nil {
return err
}
}
return nil
}
func main() {
Hello("")
lines, err := ParseFile("codes.csv")
if err != nil {
fmt.Println(err.Error())
}
if err = SplitSlice(lines); err != nil {
fmt.Println(err.Error())
}
}