Init
This commit is contained in:
commit
50e482fbd4
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
*.csv
|
||||||
|
./out
|
||||||
|
*.exe
|
151
main.go
Normal file
151
main.go
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
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())
|
||||||
|
}
|
||||||
|
}
|
26
main_test.go
Normal file
26
main_test.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestParseFile(t *testing.T) {
|
||||||
|
// assertCorrectMessage := func(t *testing.T, got, want string) {
|
||||||
|
// t.Helper()
|
||||||
|
// if got != want {
|
||||||
|
// t.Errorf("got %q want %q", got, want)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// t.Run("Error is fileName os empty", func(t *testing.T) {
|
||||||
|
// got := ParseFile("").Error()
|
||||||
|
// want := "Empty file path"
|
||||||
|
|
||||||
|
// assertCorrectMessage(t, got, want)
|
||||||
|
// })
|
||||||
|
// t.Run("No error", func(t *testing.T) {
|
||||||
|
// got := ParseFile("test.csv")
|
||||||
|
|
||||||
|
// if got != nil {
|
||||||
|
// assertCorrectMessage(t, "nil", "nil")
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
}
|
27
models.go
Normal file
27
models.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
// Cis ...
|
||||||
|
type Cis struct {
|
||||||
|
Ki string `json:"ki"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Document ...
|
||||||
|
type Document struct {
|
||||||
|
DocNum string `json:"docnumber"`
|
||||||
|
Inn string `json:"trade_participant_inn"`
|
||||||
|
ProductsList []Cis `json:"products_list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewDocument ...
|
||||||
|
func NewDocument(docNum string, products []Cis) *Document {
|
||||||
|
return &Document{
|
||||||
|
DocNum: docNum,
|
||||||
|
Inn: "5042013346",
|
||||||
|
ProductsList: products,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCis ...
|
||||||
|
func NewCis(cis string) Cis {
|
||||||
|
return Cis{Ki: cis}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user