Kaynağa Gözat

Initial commit

Anton 4 yıl önce
işleme
2f237afe51
12 değiştirilmiş dosya ile 304 ekleme ve 0 silme
  1. BIN
      Kyocera M2040dn
  2. 21 0
      compatible.html
  3. 48 0
      generate.html
  4. 0 0
      gorm.db
  5. BIN
      main
  6. BIN
      main.exe
  7. 235 0
      main.go
  8. BIN
      printer.db
  9. BIN
      sdf.zip
  10. BIN
      sdf_2.zip
  11. BIN
      test.png
  12. BIN
      .png

BIN
Kyocera M2040dn


+ 21 - 0
compatible.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>{{ .Title }}</title>
+</head>
+<body>
+	<form action="/compatible" method="POST">
+		<select name="printer" id="printer">
+		{{ range .PrinterNames }}
+			<option value="{{ . }}">{{ . }}</option>
+		{{ end }}
+		</select><br><br><br>
+		<input type="submit" value="Найти совместимый картридж">
+	</form>
+	<ul>
+		{{ range .CartridgeNames }}
+		<li>{{ . }}</li>
+		{{ end }}
+	</ul>
+</body>
+</html>

+ 48 - 0
generate.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>{{ .Title }}</title>
+</head>
+<body>
+	<h4>Генерировать QR-код</h4>
+	<p>Выберите принтер</p>
+	<form action="/generate" method="POST">
+		<select name="printer" id="printer">
+		{{ range .PrinterNames }}
+			<option value="{{ . }}">{{ . }}</option>
+		{{ end }}
+		</select><br><br><br>
+		<input type="submit" value="Генерировать QR">
+	</form>
+	<form method="POST" action="/addprinter">
+		<h4>Добавить принтер</h4>
+		<input placeholder="Наименование принтера" type="text" name="printerName">
+		<input type="submit" name="addprinterbtn" value="Добавить принтер">
+	</form>
+	
+	<form method="POST" action="/addcartridge">
+		<h4>Добавить картридж</h4>
+		<input required type="text" name="cartridgeName" placeholder="Наименование картриджа">
+		<input type="submit" name="addcartridgebtn" value="Добавить картридж">
+	</form>
+
+	<h4>Добавить совместимость</h4>
+	<form name="addcartridgeofprinter" action="/cartridgeOfPrinter">
+		<select name="printers" id="printers" >
+			<option></option>
+			{{ range .PrinterNames }}
+			<option value="{{ . }}">{{ . }}</option>
+			{{ end }}
+		</select>
+		<select name="cartridges" id="cartridges">
+			<option></option>
+			{{ range .CartridgeNames }}
+			<option value="{{ . }}">{{ . }}</option>
+			{{ end }}
+		</select>
+		<input type="submit" value="Добавить совместимость">
+	</form>
+	<br><br>
+	<input type="button" value="Найти совместимый картридж">
+</body>
+</html>

+ 0 - 0
gorm.db



BIN
main.exe


+ 235 - 0
main.go

@@ -0,0 +1,235 @@
+package main
+// Golang - Сила!
+import(
+	"fmt"
+	"os"
+	"github.com/boombuler/barcode"
+	"github.com/boombuler/barcode/qr"
+	"image"
+	"image/png"
+	"log"
+	"net/http"
+	"strings"
+	"gorm.io/gorm"
+  	"gorm.io/driver/sqlite"
+  	"html/template"
+)
+
+type ViewData struct{
+	Title string
+	PrinterNames []string
+	CartridgeNames []string
+}
+
+type Printers struct{
+	ID uint `gorm:"type:integer"`
+	Name string `gorm:"type:text"`
+}
+
+type Cartridges struct{
+	ID uint `gorm:"type:integer"`
+	Name string `gorm:"type:text"`
+}
+
+type Cartridgeofprinter struct{
+	Cartridgeid uint `gorm:"type:integer"`
+	Printerid uint `gorm:"type:integer"`
+}
+
+func main(){
+	http.HandleFunc("/", PrinterList)
+	http.HandleFunc("/generate", GenerateQR)
+	http.HandleFunc("/addprinter", AddPrinter)
+	http.HandleFunc("/addcartridge", AddCartridge)
+	http.HandleFunc("/cartridgeOfPrinter", AddCartridgeOfPrinter)
+	http.HandleFunc("/compatible", FindCompatibleCartridges)
+	fmt.Println("Server is listening...")
+
+	http.ListenAndServe(":8888", nil)
+}
+
+func FindCompatibleCartridges(w http.ResponseWriter, r *http.Request){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+
+	var PrinterList []Printers
+	db.Find(&PrinterList)
+	var PrinterName []string
+	for _, pr := range PrinterList{
+		PrinterName = append(PrinterName, pr.Name)
+	}
+
+	var printer Printers
+	r.ParseForm()
+	selectedPrinter := strings.Join(r.Form["printer"], "")
+	fmt.Println("Selected: " + selectedPrinter)
+
+	if selectedPrinter != ""{
+		db.Where("Name = ?", selectedPrinter).First(&printer)
+		var cops []uint
+		db.Table("CartridgeOfPrinters").Where("PrinterID = ?", printer.ID).Select("CartridgeID").Find(&cops)
+
+		var cartridgeName []string
+
+		for _, cop := range cops{
+			var cart Cartridges
+			db.Where("ID = ?", cop).First(&cart)
+			cartridgeName = append(cartridgeName, cart.Name)
+		}
+		data := ViewData{
+		Title: "Совместимость картриджей",
+		PrinterNames: PrinterName,
+		CartridgeNames: cartridgeName,
+		}
+
+		w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", selectedPrinter + ".png"))
+		var cartText = strings.Join(cartridgeName, "\n")
+		cartridgeQR(cartText, selectedPrinter)
+		http.ServeFile(w, r, selectedPrinter)
+
+		tmpl, _ := template.ParseFiles("compatible.html")
+	    tmpl.Execute(w, data)
+	    return
+	}
+
+	data := ViewData{
+		Title: "Совместимость картриджей",
+		PrinterNames: PrinterName,
+		}
+	
+	tmpl, _ := template.ParseFiles("compatible.html")
+	tmpl.Execute(w, data)
+
+	
+}
+
+func AddCartridgeOfPrinter(w http.ResponseWriter, r *http.Request){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	r.ParseForm()
+	cartridgeName := strings.Join(r.Form["cartridges"], "")
+	printerName := strings.Join(r.Form["printers"], "")
+	// printerName := strings.Join(r.Form["printers"], "")
+	var cartridge Cartridges
+	db.Where("Name = ?", cartridgeName).First(&cartridge)
+	cartridgeID := cartridge.ID
+	var printer Printers
+	db.Where("Name = ?", printerName).First(&printer)
+	printerID := printer.ID
+	var cop Cartridgeofprinter
+	cop.Cartridgeid = cartridgeID
+	cop.Printerid = printerID
+	db.Create(&cop)
+	http.Redirect(w, r, "/", 302)
+}
+
+func AddCartridge(w http.ResponseWriter, r *http.Request){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	r.ParseForm()
+	text := strings.Join(r.Form["cartridgeName"], "")
+	var newCartridge Cartridges
+	newCartridge.Name = text
+	db.Create(&newCartridge)
+	http.Redirect(w, r, "/", 302)
+}
+
+func AddPrinter(w http.ResponseWriter, r *http.Request){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	r.ParseForm()
+	text := strings.Join(r.Form["printerName"], "")
+	var newPrinter Printers
+	newPrinter.Name = text
+	db.Create(&newPrinter)
+	http.Redirect(w, r, "/", 302)
+}
+
+func GenerateQR(w http.ResponseWriter, r *http.Request){
+	r.ParseForm()
+	text := strings.Join(r.Form["printer"], "")
+	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", text + ".png"))
+	generateFromText(text)
+	http.ServeFile(w, r, text)
+}
+
+func PrinterList(w http.ResponseWriter, r *http.Request){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+
+	var PrinterList []Printers
+	db.Find(&PrinterList)
+	var PrinterName []string
+	for _, pr := range PrinterList{
+		PrinterName = append(PrinterName, pr.Name)
+	}
+
+	var CartridgeList []Cartridges
+	db.Find(&CartridgeList)
+	var CartridgeName []string
+	for _, ca := range CartridgeList{
+		CartridgeName = append(CartridgeName, ca.Name)
+	}
+
+
+	data := ViewData{
+		Title: "Generate QR",
+		PrinterNames: PrinterName,
+		CartridgeNames: CartridgeName,
+	}
+
+	tmpl, _ := template.ParseFiles("generate.html")
+    tmpl.Execute(w, data)
+}
+
+func generateCompatibleCartridges(printer Printers){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	var cops []Cartridgeofprinter
+	var cartridges []Cartridges
+	db.Where("Printerid = ?", printer.ID).Find(&cops)
+	for _, cop := range cops{
+		var cartridge Cartridges
+		fmt.Println(cop.Cartridgeid)
+		db.Where("ID = ?", cop.Cartridgeid).First(&cartridge)
+		cartridges = append(cartridges, cartridge)
+	}
+}
+
+func cartridgeQR(text string, filename string){
+	code, err := qr.Encode(text, qr.L, qr.Auto)
+	if err != nil {
+		fmt.Println("Something went wrong...")
+	}
+	if text != code.Content() {
+		log.Fatal("data differs")
+	}
+	code, err = barcode.Scale(code, 512, 512)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	writePng(filename, code)
+}
+
+func generateFromText(text string){
+	code, err := qr.Encode(text, qr.L, qr.Auto)
+	if err != nil {
+		fmt.Println("Something went wrong...")
+	}
+	if text != code.Content() {
+		log.Fatal("data differs")
+	}
+	code, err = barcode.Scale(code, 512, 512)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	writePng(text, code)
+}
+
+func writePng(filename string, img image.Image) {
+	file, err := os.Create(filename)
+	if err != nil {
+		log.Fatal(err)
+	}
+	err = png.Encode(file, img)
+	if err != nil {
+		log.Fatal(err)
+	}
+	file.Close()
+}

BIN
printer.db


BIN
sdf.zip


BIN
sdf_2.zip


BIN
test.png