device.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package tables
  2. import (
  3. "Wine-Server/utils"
  4. "fmt"
  5. )
  6. type deviceWine struct {
  7. Id uint16 `json:"id"`
  8. Name string `json:"name"`
  9. Price uint16 `json:"price"`
  10. Density float64 `json:"density"`
  11. Picture string `json:"picture"`
  12. Describe string `json:"describe"`
  13. Remain uint16 `json:"remain"`
  14. }
  15. func (dv *deviceWine) Get() error {
  16. if dv.Id == 0 {
  17. return nil
  18. }
  19. src := &WineTable{Id: dv.Id}
  20. err := src.Get()
  21. if err != nil {
  22. return err
  23. }
  24. dv.Name = src.Name
  25. dv.Price = src.Price
  26. dv.Density = src.Density
  27. dv.Picture = src.Picture
  28. dv.Describe = src.Describe
  29. return nil
  30. }
  31. type DeviceTable struct {
  32. Id string
  33. Addr string
  34. First utils.TimeType
  35. Last utils.TimeType
  36. Wines [4]deviceWine // db col-name: wine1, remain1, ...
  37. Manager string
  38. Mark string
  39. OrderCount uint32
  40. TotalIncome float64
  41. }
  42. func CreateDeviceTable() error {
  43. sql := "CREATE TABLE IF NOT EXISTS `device`(" +
  44. "`id` VARCHAR(32) PRIMARY KEY," +
  45. "`addr` VARCHAR(128) NOT NULL," +
  46. "`first` DATETIME DEFAULT CURRENT_TIMESTAMP," +
  47. "`last` DATETIME DEFAULT CURRENT_TIMESTAMP," +
  48. "`wine1` SMALLINT UNSIGNED,`remain1` SMALLINT UNSIGNED DEFAULT 0," +
  49. "`wine2` SMALLINT UNSIGNED,`remain2` SMALLINT UNSIGNED DEFAULT 0," +
  50. "`wine3` SMALLINT UNSIGNED,`remain3` SMALLINT UNSIGNED DEFAULT 0," +
  51. "`wine4` SMALLINT UNSIGNED,`remain4` SMALLINT UNSIGNED DEFAULT 0," +
  52. "`manager` VARCHAR(16),`mark` VARCHAR(256)," +
  53. "`order` INT UNSIGNED DEFAULT 0,`income` DOUBLE DEFAULT 0);"
  54. _, err := utils.Mysql.Exec(sql)
  55. if err != nil {
  56. return err
  57. }
  58. return nil
  59. }
  60. func (row *DeviceTable) Insert() error {
  61. pre, err := utils.Mysql.Prepare("INSERT INTO `device` (`id`, `addr`) VALUES (?, ?);")
  62. if err != nil {
  63. return err
  64. }
  65. _, err = pre.Exec(row.Id, row.Addr)
  66. if err != nil {
  67. return err
  68. }
  69. return nil
  70. }
  71. func (row *DeviceTable) Delete() error {
  72. pre, err := utils.Mysql.Prepare("DELETE FROM `device` WHERE `id`=?;")
  73. if err != nil {
  74. return err
  75. }
  76. _, err = pre.Exec(row.Id)
  77. if err != nil {
  78. return err
  79. }
  80. return nil
  81. }
  82. func (row *DeviceTable) Update(args utils.JsonType) error {
  83. keys, values := utils.UnZip(args)
  84. sql := fmt.Sprintf("UPDATE `device` SET %s WHERE `id`='%s';", utils.SqlFields(keys), row.Id)
  85. pre, err := utils.Mysql.Prepare(sql)
  86. if err != nil {
  87. return err
  88. }
  89. _, err = pre.Exec(values...)
  90. if err != nil {
  91. return err
  92. }
  93. return nil
  94. }
  95. func (row *DeviceTable) Get() error {
  96. sql := "SELECT `addr`, `first`, `last`, IFNULL(`wine1`, 10100), `remain1`, IFNULL(`wine2`, 10100), `remain2`, " +
  97. "IFNULL(`wine3`, 10100), `remain3`, IFNULL(`wine4`, 10100), `remain4`, IFNULL(`manager`, '-'), " +
  98. "IFNULL(`mark`, '-'), `order`, `income` " +
  99. "FROM `device` WHERE `id`=?;"
  100. pre, err := utils.Mysql.Prepare(sql)
  101. if err != nil {
  102. return err
  103. }
  104. err = pre.QueryRow(row.Id).Scan(
  105. &row.Addr, &row.First, &row.Last, &row.Wines[0].Id, &row.Wines[0].Remain,
  106. &row.Wines[1].Id, &row.Wines[1].Remain, &row.Wines[2].Id, &row.Wines[2].Remain,
  107. &row.Wines[3].Id, &row.Wines[3].Remain, &row.Manager, &row.Mark, &row.OrderCount, &row.TotalIncome,
  108. )
  109. if err != nil {
  110. return err
  111. }
  112. return nil
  113. }