main.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package main
  2. // Golang - Сила!
  3. import(
  4. "fmt"
  5. "os"
  6. "github.com/boombuler/barcode"
  7. "github.com/boombuler/barcode/qr"
  8. "image"
  9. "image/png"
  10. "log"
  11. "net/http"
  12. "strings"
  13. "gorm.io/gorm"
  14. "gorm.io/driver/sqlite"
  15. "html/template"
  16. )
  17. type ViewData struct{
  18. Title string
  19. PrinterNames []string
  20. CartridgeNames []string
  21. }
  22. type Printers struct{
  23. ID uint `gorm:"type:integer"`
  24. Name string `gorm:"type:text"`
  25. }
  26. type Cartridges struct{
  27. ID uint `gorm:"type:integer"`
  28. Name string `gorm:"type:text"`
  29. }
  30. type Cartridgeofprinter struct{
  31. Cartridgeid uint `gorm:"type:integer"`
  32. Printerid uint `gorm:"type:integer"`
  33. }
  34. func main(){
  35. http.HandleFunc("/", PrinterList)
  36. http.HandleFunc("/generate", GenerateQR)
  37. http.HandleFunc("/addprinter", AddPrinter)
  38. http.HandleFunc("/addcartridge", AddCartridge)
  39. http.HandleFunc("/cartridgeOfPrinter", AddCartridgeOfPrinter)
  40. http.HandleFunc("/compatible", FindCompatibleCartridges)
  41. fmt.Println("Server is listening...")
  42. http.ListenAndServe(":8888", nil)
  43. }
  44. func FindCompatibleCartridges(w http.ResponseWriter, r *http.Request){
  45. db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
  46. var PrinterList []Printers
  47. db.Find(&PrinterList)
  48. var PrinterName []string
  49. for _, pr := range PrinterList{
  50. PrinterName = append(PrinterName, pr.Name)
  51. }
  52. var printer Printers
  53. r.ParseForm()
  54. selectedPrinter := strings.Join(r.Form["printer"], "")
  55. fmt.Println("Selected: " + selectedPrinter)
  56. if selectedPrinter != ""{
  57. db.Where("Name = ?", selectedPrinter).First(&printer)
  58. var cops []uint
  59. db.Table("CartridgeOfPrinters").Where("PrinterID = ?", printer.ID).Select("CartridgeID").Find(&cops)
  60. var cartridgeName []string
  61. for _, cop := range cops{
  62. var cart Cartridges
  63. db.Where("ID = ?", cop).First(&cart)
  64. cartridgeName = append(cartridgeName, cart.Name)
  65. }
  66. data := ViewData{
  67. Title: "Совместимость картриджей",
  68. PrinterNames: PrinterName,
  69. CartridgeNames: cartridgeName,
  70. }
  71. w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", selectedPrinter + ".png"))
  72. var cartText = strings.Join(cartridgeName, "\n")
  73. cartridgeQR(cartText, selectedPrinter)
  74. http.ServeFile(w, r, selectedPrinter)
  75. tmpl, _ := template.ParseFiles("compatible.html")
  76. tmpl.Execute(w, data)
  77. return
  78. }
  79. data := ViewData{
  80. Title: "Совместимость картриджей",
  81. PrinterNames: PrinterName,
  82. }
  83. tmpl, _ := template.ParseFiles("compatible.html")
  84. tmpl.Execute(w, data)
  85. }
  86. func AddCartridgeOfPrinter(w http.ResponseWriter, r *http.Request){
  87. db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
  88. r.ParseForm()
  89. cartridgeName := strings.Join(r.Form["cartridges"], "")
  90. printerName := strings.Join(r.Form["printers"], "")
  91. // printerName := strings.Join(r.Form["printers"], "")
  92. var cartridge Cartridges
  93. db.Where("Name = ?", cartridgeName).First(&cartridge)
  94. cartridgeID := cartridge.ID
  95. var printer Printers
  96. db.Where("Name = ?", printerName).First(&printer)
  97. printerID := printer.ID
  98. var cop Cartridgeofprinter
  99. cop.Cartridgeid = cartridgeID
  100. cop.Printerid = printerID
  101. db.Create(&cop)
  102. http.Redirect(w, r, "/", 302)
  103. }
  104. func AddCartridge(w http.ResponseWriter, r *http.Request){
  105. db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
  106. r.ParseForm()
  107. text := strings.Join(r.Form["cartridgeName"], "")
  108. var newCartridge Cartridges
  109. newCartridge.Name = text
  110. db.Create(&newCartridge)
  111. http.Redirect(w, r, "/", 302)
  112. }
  113. func AddPrinter(w http.ResponseWriter, r *http.Request){
  114. db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
  115. r.ParseForm()
  116. text := strings.Join(r.Form["printerName"], "")
  117. var newPrinter Printers
  118. newPrinter.Name = text
  119. db.Create(&newPrinter)
  120. http.Redirect(w, r, "/", 302)
  121. }
  122. func GenerateQR(w http.ResponseWriter, r *http.Request){
  123. r.ParseForm()
  124. text := strings.Join(r.Form["printer"], "")
  125. w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", text + ".png"))
  126. generateFromText(text)
  127. http.ServeFile(w, r, text)
  128. }
  129. func PrinterList(w http.ResponseWriter, r *http.Request){
  130. db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
  131. var PrinterList []Printers
  132. db.Find(&PrinterList)
  133. var PrinterName []string
  134. for _, pr := range PrinterList{
  135. PrinterName = append(PrinterName, pr.Name)
  136. }
  137. var CartridgeList []Cartridges
  138. db.Find(&CartridgeList)
  139. var CartridgeName []string
  140. for _, ca := range CartridgeList{
  141. CartridgeName = append(CartridgeName, ca.Name)
  142. }
  143. data := ViewData{
  144. Title: "Generate QR",
  145. PrinterNames: PrinterName,
  146. CartridgeNames: CartridgeName,
  147. }
  148. tmpl, _ := template.ParseFiles("generate.html")
  149. tmpl.Execute(w, data)
  150. }
  151. func generateCompatibleCartridges(printer Printers){
  152. db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
  153. var cops []Cartridgeofprinter
  154. var cartridges []Cartridges
  155. db.Where("Printerid = ?", printer.ID).Find(&cops)
  156. for _, cop := range cops{
  157. var cartridge Cartridges
  158. fmt.Println(cop.Cartridgeid)
  159. db.Where("ID = ?", cop.Cartridgeid).First(&cartridge)
  160. cartridges = append(cartridges, cartridge)
  161. }
  162. }
  163. func cartridgeQR(text string, filename string){
  164. code, err := qr.Encode(text, qr.L, qr.Auto)
  165. if err != nil {
  166. fmt.Println("Something went wrong...")
  167. }
  168. if text != code.Content() {
  169. log.Fatal("data differs")
  170. }
  171. code, err = barcode.Scale(code, 512, 512)
  172. if err != nil {
  173. log.Fatal(err)
  174. }
  175. writePng(filename, code)
  176. }
  177. func generateFromText(text string){
  178. code, err := qr.Encode(text, qr.L, qr.Auto)
  179. if err != nil {
  180. fmt.Println("Something went wrong...")
  181. }
  182. if text != code.Content() {
  183. log.Fatal("data differs")
  184. }
  185. code, err = barcode.Scale(code, 512, 512)
  186. if err != nil {
  187. log.Fatal(err)
  188. }
  189. writePng(text, code)
  190. }
  191. func writePng(filename string, img image.Image) {
  192. file, err := os.Create(filename)
  193. if err != nil {
  194. log.Fatal(err)
  195. }
  196. err = png.Encode(file, img)
  197. if err != nil {
  198. log.Fatal(err)
  199. }
  200. file.Close()
  201. }