cronJobs.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package cronjob
  2. import (
  3. "encoding/xml"
  4. "fmt"
  5. "kng_feed_api/helper"
  6. "kng_feed_api/model"
  7. "os"
  8. "path/filepath"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. func CreateXMLFeed() {
  14. type Category struct {
  15. Text string `xml:",chardata"`
  16. Id string `xml:"id,attr"`
  17. ParentId string `xml:"parentId,attr"`
  18. URL string `xml:"url,attr"`
  19. }
  20. type Param struct {
  21. Text string `xml:",chardata"`
  22. Name string `xml:"name,attr"`
  23. }
  24. type Offer struct {
  25. Id string `xml:"id,attr"`
  26. Avalieble string `xml:"available,attr"`
  27. Name string `xml:"name"`
  28. URL string `xml:"url"`
  29. CategoryId string `xml:"categoryId"`
  30. Vendor string `xml:"vendor"`
  31. Param []Param `xml:"param"`
  32. }
  33. type Shop struct {
  34. Name string `xml:"name"`
  35. URL string `xml:"url"`
  36. Category []Category `xml:"categories>category"`
  37. Offer []Offer `xml:"offers>offer"`
  38. }
  39. type YamlCatalog struct {
  40. XMLName xml.Name `xml:"yml_catalog"`
  41. Date string `xml:"date,attr"`
  42. Shop Shop `xml:"shop"`
  43. }
  44. fmt.Println("CRON JOB WORK - FROM EXTERNAL FILE ", time.Now())
  45. categoryRows, err := model.GetAllCategories()
  46. if err != nil {
  47. return
  48. }
  49. rows, err := model.GetAllProducts()
  50. if err != nil {
  51. return
  52. }
  53. var yml_catalog = &YamlCatalog{}
  54. time_now := time.Now().UTC()
  55. yml_catalog.Date = time_now.Format("2006-01-02 15:04")
  56. var shop = &Shop{}
  57. shop.Name = "ООО \"Княгиня\""
  58. shop.URL = "https://b2bn.kngnn.ru"
  59. for _, value := range categoryRows {
  60. var category = Category{
  61. Text: value.Name,
  62. ParentId: value.ParentId,
  63. Id: value.Id,
  64. URL: value.Id,
  65. }
  66. shop.Category = append(shop.Category, category)
  67. }
  68. for _, value := range rows {
  69. var offer = Offer{
  70. Id: value.CodeUT10,
  71. Avalieble: "true",
  72. Name: value.Name,
  73. URL: "https://b2bn.kngnn.ru/?item-code=" + value.CodeUT10,
  74. CategoryId: value.CategoryId,
  75. Vendor: value.Manufacturer,
  76. }
  77. offer.Param = append(offer.Param, Param{
  78. Text: value.CodeUT10,
  79. Name: "code",
  80. })
  81. offer.Param = append(offer.Param, Param{
  82. Text: value.CodeUT10,
  83. Name: "code_ut10",
  84. })
  85. offer.Param = append(offer.Param, Param{
  86. Text: value.Manufacturer,
  87. Name: "manufacturer",
  88. })
  89. offer.Param = append(offer.Param, Param{
  90. Text: value.ArticleNumber,
  91. Name: "article_number",
  92. })
  93. offer.Param = append(offer.Param, Param{
  94. Text: value.Brand,
  95. Name: "brand",
  96. })
  97. offer.Param = append(offer.Param, Param{
  98. Text: value.Unit,
  99. Name: "unit",
  100. })
  101. offer.Param = append(offer.Param, Param{
  102. Text: value.GroupLimit,
  103. Name: "group_limit",
  104. })
  105. offer.Param = append(offer.Param, Param{
  106. Text: value.GroupPrice,
  107. Name: "group_price",
  108. })
  109. offer.Param = append(offer.Param, Param{
  110. Text: value.NumberCatalog,
  111. Name: "number_catalog",
  112. })
  113. offer.Param = append(offer.Param, Param{
  114. Text: value.NumberDrawing,
  115. Name: "number_drawing",
  116. })
  117. offer.Param = append(offer.Param, Param{
  118. Text: value.NumberBrand,
  119. Name: "number_brand",
  120. })
  121. offer.Param = append(offer.Param, Param{
  122. Text: value.NumberArticle,
  123. Name: "number_article",
  124. })
  125. offer.Param = append(offer.Param, Param{
  126. Text: value.NumberSuffix,
  127. Name: "number_suffix",
  128. })
  129. if value.IdNumbers != nil {
  130. numbers := strings.Split(*value.IdNumbers, ";")
  131. for idx, num := range numbers {
  132. offer.Param = append(offer.Param, Param{
  133. Text: num,
  134. Name: "article_number" + strconv.Itoa(idx+1),
  135. })
  136. }
  137. }
  138. shop.Offer = append(shop.Offer, offer)
  139. }
  140. yml_catalog.Shop = *shop
  141. byteXmlText, err := xml.MarshalIndent(yml_catalog, " ", " ")
  142. if err != nil {
  143. fmt.Printf("error: %v\n", err)
  144. } else {
  145. var Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
  146. var byteXmlText_withHeasder = []byte(Header + string(byteXmlText))
  147. os.WriteFile(filepath.Join(helper.RootDir(), "feed.xml"), byteXmlText_withHeasder, 0666)
  148. }
  149. }