wine.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package tables
  2. import (
  3. "Wine-Server/utils"
  4. "database/sql"
  5. )
  6. type WineTable struct {
  7. Id uint16
  8. Name string
  9. Price uint16
  10. Degree uint16
  11. Density uint16
  12. Picture string
  13. Time utils.TimeType
  14. Describe string
  15. Deleted bool
  16. Order uint32
  17. Income uint64
  18. }
  19. func CreateWineTable() error {
  20. SQL := "CREATE TABLE IF NOT EXISTS `wine`(" +
  21. "`id` SMALLINT UNSIGNED PRIMARY KEY," +
  22. "`name` VARCHAR(16) NOT NULL," +
  23. "`price` SMALLINT UNSIGNED DEFAULT 9999," +
  24. "`degree` SMALLINT UNSIGNED DEFAULT 0," +
  25. "`density` SMALLINT UNSIGNED DEFAULT 1000," +
  26. "`picture` VARCHAR(128) NOT NULL," +
  27. "`time` DATETIME DEFAULT CURRENT_TIMESTAMP," +
  28. "`describe` VARCHAR(256) DEFAULT ''," +
  29. "`order` INT UNSIGNED DEFAULT 0," +
  30. "`income` BIGINT UNSIGNED DEFAULT 0," +
  31. "`deleted` TINYINT(1) DEFAULT 0);"
  32. _, err := utils.Mysql.Exec(SQL)
  33. if err != nil {
  34. return err
  35. }
  36. return nil
  37. }
  38. func (row *WineTable) Insert() error {
  39. SQL := "INSERT INTO `wine` (`name`,`price`,`degree`,`picture`,`describe`) VALUES (?,?,?,?,?);"
  40. pre, err := utils.Mysql.Prepare(SQL)
  41. if err != nil {
  42. return err
  43. }
  44. _, err = pre.Exec(row.Name, row.Price, row.Degree, row.Picture, row.Describe)
  45. if err != nil {
  46. return err
  47. }
  48. return nil
  49. }
  50. func (row *WineTable) Delete() error {
  51. row.Deleted = true
  52. return row.UpdateSelf()
  53. }
  54. func (row *WineTable) Update(args utils.JsonType) error {
  55. keys, values := utils.UnZip(args)
  56. SQL := utils.Format("UPDATE `wine` SET %s WHERE `id`=%d;", utils.SqlFields(keys), row.Id)
  57. pre, err := utils.Mysql.Prepare(SQL)
  58. if err != nil {
  59. return err
  60. }
  61. _, err = pre.Exec(values...)
  62. if err != nil {
  63. return err
  64. }
  65. return nil
  66. }
  67. func (row *WineTable) UpdateSelf() error {
  68. SQL := "UPDATE `wine` SET `name`=?,`price`=?,`degree`=?,`density`=?,`picture`=?,`describe`=?,`order`=?,`income`=?,`deleted`=? WHERE `id`=?;"
  69. pre, err := utils.Mysql.Prepare(SQL)
  70. if err != nil {
  71. return err
  72. }
  73. _, err = pre.Exec(row.Name, row.Price, row.Degree, row.Density, row.Picture, row.Describe, row.Order, row.Income, row.Deleted, row.Id)
  74. if err != nil {
  75. return err
  76. }
  77. return nil
  78. }
  79. func (row *WineTable) Get() error {
  80. SQL := "SELECT `name`,`price`,`degree`,`density`,`picture`,`describe`,`time`,`order`,`income`,`deleted` FROM `wine` WHERE `id`=?;"
  81. pre, err := utils.Mysql.Prepare(SQL)
  82. if err != nil {
  83. return err
  84. }
  85. err = pre.QueryRow(row.Id).Scan(
  86. &row.Name, &row.Price, &row.Degree, &row.Density, &row.Picture,
  87. &row.Describe, &row.Time, &row.Order, &row.Income, &row.Deleted,
  88. )
  89. if err != nil {
  90. return err
  91. }
  92. return nil
  93. }
  94. func extractJson(wine WineTable) utils.JsonType {
  95. return utils.JsonType{
  96. "id": wine.Id, "name": wine.Name, "time": wine.Time, "price": wine.Price,
  97. "degree": wine.Degree, "density": wine.Density, "picture": wine.Picture, "describe": wine.Describe,
  98. }
  99. }
  100. func QueryWines(cond string, limit, page int) (int, []utils.JsonType, error) {
  101. SQL, like := "none", utils.Format("%%%s%%", cond)
  102. if page == 1 {
  103. SQL = "SELECT COUNT(`id`) AS `total` FROM `wine` " +
  104. "WHERE (`id`=10100 OR `deleted`=FALSE) AND (`name` LIKE ? OR `describe` LIKE ?);"
  105. } else {
  106. SQL = "SELECT COUNT(`id`) AS `total` FROM `wine` WHERE `deleted`=FALSE AND (`name` LIKE ? OR `describe` LIKE ?);"
  107. }
  108. pre, err := utils.Mysql.Prepare(SQL)
  109. if err != nil {
  110. return 0, nil, err
  111. }
  112. total := 0
  113. err = pre.QueryRow(like, like).Scan(&total)
  114. if err != nil {
  115. return 0, nil, err
  116. }
  117. if page == 1 {
  118. SQL = "SELECT `id`,`name`,`time`,`price`,`degree`,`density`,`picture`,`describe` FROM `wine` " +
  119. "WHERE (`id`=10100 OR `deleted`=FALSE) AND (`name` LIKE ? OR `describe` LIKE ?) LIMIT ? OFFSET ?;"
  120. } else {
  121. SQL = "SELECT `id`,`name`,`time`,`price`,`degree`,`density`,`picture`,`describe` FROM `wine` " +
  122. "WHERE `deleted`=FALSE AND (`name` LIKE ? OR `describe` LIKE ?) LIMIT ? OFFSET ?;"
  123. }
  124. pre, err = utils.Mysql.Prepare(SQL)
  125. if err != nil {
  126. return 0, nil, err
  127. }
  128. var rows *sql.Rows
  129. res := make([]utils.JsonType, 0)
  130. rows, err = pre.Query(like, like, limit, (page-1)*limit)
  131. if err != nil {
  132. return 0, nil, err
  133. }
  134. for rows.Next() {
  135. tmp := WineTable{}
  136. _ = rows.Scan(&tmp.Id, &tmp.Name, &tmp.Time, &tmp.Price, &tmp.Degree, &tmp.Density, &tmp.Picture, &tmp.Describe)
  137. res = append(res, extractJson(tmp))
  138. }
  139. err = rows.Close()
  140. if err != nil {
  141. return 0, nil, err
  142. }
  143. return total, res, nil
  144. }
  145. func BatchDeleteWine(ids []uint16) error {
  146. SQL := utils.Format("UPDATE `wine` SET `deleted`=TRUE WHERE `id` IN (%s);", utils.SqlUint16ListJoin(ids))
  147. _, err := utils.Mysql.Exec(SQL)
  148. return err
  149. }