|
@@ -2,49 +2,46 @@ package tables
|
|
|
|
|
|
import (
|
|
|
"Wine-Server/utils"
|
|
|
+ "database/sql"
|
|
|
)
|
|
|
|
|
|
type TradeTable struct {
|
|
|
- Id string `json:"id"`
|
|
|
- Trade string `json:"trade"`
|
|
|
- Device string `json:"device"`
|
|
|
- Time utils.TimeType `json:"time"`
|
|
|
- Payer string `json:"payer"`
|
|
|
- Wine uint16 `json:"wine"`
|
|
|
- Weight uint16 `json:"weight"`
|
|
|
- Cash int `json:"cash"`
|
|
|
- Manager string `json:"manager"`
|
|
|
+ Id string
|
|
|
+ Trade string
|
|
|
+ Device string
|
|
|
+ Time utils.TimeType
|
|
|
+ Payer string
|
|
|
+ Wine uint16
|
|
|
+ Price uint16
|
|
|
+ Weight uint16
|
|
|
+ Cash uint32
|
|
|
+ Manager string
|
|
|
}
|
|
|
|
|
|
func CreateTradeTable() error {
|
|
|
- sql := "CREATE TABLE IF NOT EXISTS `trade`(" +
|
|
|
+ SQL := "CREATE TABLE IF NOT EXISTS `trade`(" +
|
|
|
"`id` VARCHAR(32) PRIMARY KEY NOT NULL," +
|
|
|
"`trade` VARCHAR(64) NOT NULL," +
|
|
|
"`device` VARCHAR(32) NOT NULL," +
|
|
|
"`time` DATETIME DEFAULT CURRENT_TIMESTAMP," +
|
|
|
"`payer` VARCHAR(64) NOT NULL," +
|
|
|
"`wine` SMALLINT UNSIGNED NOT NULL," +
|
|
|
+ "`price` SMALLINT UNSIGNED NOT NULL," +
|
|
|
"`weight` SMALLINT UNSIGNED NOT NULL," +
|
|
|
"`cash` INT UNSIGNED NOT NULL," +
|
|
|
"`manager` VARCHAR(16));"
|
|
|
- _, err := utils.Mysql.Exec(sql)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return nil
|
|
|
+ _, err := utils.Mysql.Exec(SQL)
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
func (row *TradeTable) Insert() error {
|
|
|
- sql := "INSERT INTO `trade`(`id`,`trade`,`device`,`payer`,`wine`,`weight`,`cash`,`manager`) VALUES(?,?,?,?,?,?,?,?);"
|
|
|
- pre, err := utils.Mysql.Prepare(sql)
|
|
|
+ SQL := "INSERT INTO `trade`(`id`,`trade`,`device`,`payer`,`wine`,`price`,`weight`,`cash`,`manager`) VALUES(?,?,?,?,?,?,?,?,?);"
|
|
|
+ pre, err := utils.Mysql.Prepare(SQL)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- _, err = pre.Exec(row.Id, row.Trade, row.Device, row.Payer, row.Wine, row.Weight, row.Cash, row.Manager)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return nil
|
|
|
+ _, err = pre.Exec(row.Id, row.Trade, row.Device, row.Payer, row.Wine, row.Price, row.Weight, row.Cash, row.Manager)
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
func (row *TradeTable) Delete() error {
|
|
@@ -53,53 +50,81 @@ func (row *TradeTable) Delete() error {
|
|
|
return err
|
|
|
}
|
|
|
_, err = pre.Exec(row.Id)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return nil
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
func (row *TradeTable) Update(args utils.JsonType) error {
|
|
|
keys, values := utils.UnZip(args)
|
|
|
- sql := utils.Format("UPDATE `trade` SET %s WHERE `id`=%s;", utils.SqlFields(keys), row.Id)
|
|
|
- pre, err := utils.Mysql.Prepare(sql)
|
|
|
+ SQL := utils.Format("UPDATE `trade` SET %s WHERE `id`='%s';", utils.SqlFields(keys), row.Id)
|
|
|
+ pre, err := utils.Mysql.Prepare(SQL)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
_, err = pre.Exec(values...)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return nil
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
func (row *TradeTable) UpdateSelf() error {
|
|
|
- sql := "UPDATE `trade` SET `trade`=?,`device`=?,`time`=?,`payer`=?,`wine`=?,`weight`=?,`cash`=?,`manager`=? WHERE `id`=?;"
|
|
|
- pre, err := utils.Mysql.Prepare(sql)
|
|
|
+ SQL := "UPDATE `trade` SET `trade`=?,`device`=?,`time`=?,`payer`=?,`wine`=?`price`=?,`weight`=?,`cash`=?,`manager`=? WHERE `id`=?;"
|
|
|
+ pre, err := utils.Mysql.Prepare(SQL)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- _, err = pre.Exec(row.Trade, row.Device, row.Time, row.Payer, row.Wine, row.Weight, row.Cash, row.Manager, row.Id)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return nil
|
|
|
+ _, err = pre.Exec(row.Trade, row.Device, row.Time, row.Payer, row.Wine, row.Price, row.Weight, row.Cash, row.Manager, row.Id)
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
func (row *TradeTable) Get() error {
|
|
|
- sql := "SELECT `trade`,`device`,`time`,`payer`,`wine`,`weight`,`cash`,`manager` FROM `trade` WHERE `id`=?;"
|
|
|
- pre, err := utils.Mysql.Prepare(sql)
|
|
|
+ SQL := "SELECT `trade`,`device`,`time`,`payer`,`wine`,`price`,`weight`,`cash`,`manager` FROM `trade` WHERE `id`=?;"
|
|
|
+ pre, err := utils.Mysql.Prepare(SQL)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
err = pre.QueryRow(row.Id).Scan(
|
|
|
&row.Trade, &row.Device, &row.Time, &row.Payer,
|
|
|
- &row.Wine, &row.Weight, &row.Cash, &row.Manager,
|
|
|
+ &row.Wine, &row.Price, &row.Weight, &row.Cash, &row.Manager,
|
|
|
)
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+func TradeQuery(cond, uid string, limit, page int) (int, []utils.JsonType, error) {
|
|
|
+ like := utils.Format("%%%s%%", cond)
|
|
|
+ SQL := "SELECT COUNT(t.`id`) FROM `trade` AS t LEFT JOIN `wine` AS w ON t.`wine`=w.`id` WHERE t.`payer`=? AND (t.`id` LIKE ? OR w.`name` LIKE ?);"
|
|
|
+ pre, err := utils.Mysql.Prepare(SQL)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return 0, nil, err
|
|
|
+ }
|
|
|
+ total := 0
|
|
|
+ err = pre.QueryRow(uid, like, like).Scan(&total)
|
|
|
+ if err != nil {
|
|
|
+ return 0, nil, err
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ return 0, []utils.JsonType{}, nil
|
|
|
}
|
|
|
- return nil
|
|
|
+ SQL = "SELECT t.`id`,t.`device`,t.`time`,w.`name`,t.`price`,t.`weight`,t.`cash`,r.`cash`,r.`reason` " +
|
|
|
+ "FROM `trade` AS t LEFT JOIN `wine` AS w ON t.`wine`=w.`id` LEFT JOIN `refund` AS r ON t.`id`=r.`tid` " +
|
|
|
+ "WHERE t.`payer`=? AND (t.`id` LIKE ? OR w.`name` LIKE ?) ORDER BY t.`time` DESC LIMIT ? OFFSET ?;"
|
|
|
+ pre, err = utils.Mysql.Prepare(SQL)
|
|
|
+ if err != nil {
|
|
|
+ return 0, nil, err
|
|
|
+ }
|
|
|
+ var rows *sql.Rows
|
|
|
+ rows, err = pre.Query(uid, like, like, limit, (page-1)*limit)
|
|
|
+ if err != nil {
|
|
|
+ return 0, nil, err
|
|
|
+ }
|
|
|
+ res := make([]utils.JsonType, 0)
|
|
|
+ for rows.Next() {
|
|
|
+ var one TradeTable
|
|
|
+ refund := 0
|
|
|
+ wineName, reason := "", ""
|
|
|
+ _ = rows.Scan(&one.Id, &one.Device, &one.Time, &wineName, &one.Price, &one.Weight, &one.Cash, &refund, &reason)
|
|
|
+ res = append(res, utils.JsonType{
|
|
|
+ "id": one.Id, "device": one.Device, "time": one.Time, "wine": wineName, "price": one.Price,
|
|
|
+ "weight": one.Weight, "cash": one.Cash, "refund": refund, "reason": reason,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ _ = rows.Close()
|
|
|
+ return total, res, nil
|
|
|
}
|
|
|
-
|
|
|
-// TODO: list by: <device>, <manager>, <payer> with time-duration
|