package dao import ( "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model/app_model" "github.com/jmoiron/sqlx" "strings" ) // QueryPrintBill 查询打印机账户是否存在 func QueryPrintBill(db *sqlx.Tx, userId, printNo string) ([]*app_model.PrintBill, error) { if db == nil { db = globals.GetTxDb() } sql := `SELECT * FROM print_bill WHERE 1 = 1 ` var param []interface{} if userId != "" { sql += ` AND user_id = ? ` param = append(param, userId) } if printNo != "" { sql += ` AND print_no = ? ` param = append(param, printNo) } var result []*app_model.PrintBill if err := db.Select(&result, sql, param...); err != nil { return nil, err } return result, nil } // QueryPrintBillList 查询打印机余额 func QueryPrintBillList(userId string, printNo []string) ([]*app_model.PrintBill, error) { db := globals.GetDB() sql := `SELECT * FROM print_bill WHERE 1 = 1 ` var param []interface{} if userId != "" { sql += ` AND user_id = ? ` param = append(param, userId) } if len(printNo) > 0 { sql += " AND print_no IN (" + GenQuestionMarks(len(printNo)) + ")" param = append(param, printNo) } var result []*app_model.PrintBill if err := db.Select(&result, sql, param...); err != nil { return nil, err } return result, nil } // InitPrintBill 初始化打印机账户 func InitPrintBill(txDB *sqlx.Tx, param *app_model.PrintBill) error { if err := InsertTx(txDB, param); err != nil { return err } return nil } // AddMoney 添加充值金额 func AddMoney(db *sqlx.Tx, printNo string, money int64) error { sql := `UPDATE print_bill SET print_balance = print_balance + ? WHERE print_no = ?` if _, err := db.Exec(sql, []interface{}{printNo, money}...); err != nil { return err } return nil } // UpdateBillToUser 当打印机账户从菜市绑定时,未分配用户,用户再使用小程序绑定时,将打印机分配给用户! func UpdateBillToUser(db *sqlx.Tx, param *app_model.PrintBill) error { sql := `UPDATE print_bill SET user_id = ? WHERE print_no = ?` _, err := db.Exec(sql, []interface{}{param.UserId, param.PrintNo}...) return err } // UpdatePrintToSystem 修改打印机账户所属用户 func UpdatePrintToSystem(db *sqlx.Tx, printNo string) error { sql := `UPDATE print_bill SET user_id = ? WHERE print_no = ?` if _, err := db.Exec(sql, []interface{}{"system", printNo}...); err != nil { return err } return nil } func GenQuestionMarks(count int) (marks string) { if count > 0 { if count == 1 { marks = "?" } else { builder := &strings.Builder{} builder.Grow(1 + (count-1)*3) builder.WriteString("?") for i := 1; i < count; i++ { builder.WriteString(", ?") } marks = builder.String() } } return marks }