123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- package dao
- import (
- "context"
- xsql "database/sql"
- "fmt"
- "strconv"
- "strings"
- "go-common/app/admin/main/vip/model"
- "go-common/library/database/sql"
- "github.com/pkg/errors"
- )
- // SelBatchCodeCount .
- func (d *Dao) SelBatchCodeCount(c context.Context, arg *model.ArgBatchCode) (n int64, err error) {
- autoSQLStr := d.batchCodeAutoArg(arg)
- row := d.db.QueryRow(c, _selBatchCodeCountSQL+autoSQLStr)
- if err = row.Scan(&n); err != nil {
- if err == sql.ErrNoRows {
- n = 0
- err = nil
- return
- }
- err = errors.WithStack(err)
- return
- }
- return
- }
- func (d *Dao) selBatchCodeIDs(c context.Context, poolID, businessID, batchID int64) (ids []int64, err error) {
- var rows *sql.Rows
- autoSQL := d.batchCodeAutoArg(&model.ArgBatchCode{
- BusinessID: businessID,
- PoolID: poolID,
- ID: batchID,
- })
- if rows, err = d.db.Query(c, _selBatchCodeIDSQL+autoSQL); err != nil {
- err = errors.WithStack(err)
- d.errProm.Incr("db_query")
- return
- }
- for rows.Next() {
- var r int64
- if err = rows.Scan(&r); err != nil {
- err = errors.WithStack(err)
- ids = nil
- d.errProm.Incr("db_scan")
- return
- }
- ids = append(ids, r)
- }
- return
- }
- func (d *Dao) codeAutoArgSQL(arg *model.ArgCode) string {
- autoSQLStr := ""
- if len(arg.BatchCodeIDs) > 0 {
- idStr := ""
- for _, v := range arg.BatchCodeIDs {
- idStr += "," + strconv.Itoa(int(v))
- }
- autoSQLStr += fmt.Sprintf(" AND batch_code_id in(%s) ", idStr[1:])
- }
- if arg.Status != 0 {
- autoSQLStr += fmt.Sprintf(" AND status = %v ", arg.Status)
- }
- if arg.UseStartTime > 0 && arg.UseEndTime > 0 {
- autoSQLStr += fmt.Sprintf(" AND use_time >='%v' AND use_time <= '%v'", arg.UseStartTime.Time().Format("2006-01-02 15:04:05"), arg.UseEndTime.Time().Format("2006-01-02 15:04:05"))
- }
- if len(arg.Code) > 0 {
- autoSQLStr += fmt.Sprintf(" AND code = '%v' ", arg.Code)
- }
- if arg.Mid != 0 {
- autoSQLStr += fmt.Sprintf(" AND mid = %v ", arg.Mid)
- }
- return autoSQLStr
- }
- // SelCode .
- func (d *Dao) SelCode(c context.Context, arg *model.ArgCode, cursor int64, ps int) (res []*model.ResourceCode, err error) {
- var batchIDs []int64
- if batchIDs, err = d.selBatchCodeIDs(c, arg.PoolID, arg.BusinessID, arg.BatchCodeID); err != nil {
- err = errors.WithStack(err)
- return
- }
- arg.BatchCodeIDs = batchIDs
- argSQL := d.codeAutoArgSQL(arg)
- if ps <= 0 || ps > 2000 {
- ps = _defps
- }
- var rows *sql.Rows
- argSQL += fmt.Sprintf(" AND id>%v LIMIT %v", cursor, ps)
- if rows, err = d.db.Query(c, _selCodeSQL+argSQL); err != nil {
- err = errors.WithStack(err)
- return
- }
- for rows.Next() {
- r := new(model.ResourceCode)
- if err = rows.Scan(&r.ID, &r.BatchCodeID, &r.Status, &r.Code, &r.Mid, &r.UseTime, &r.Ctime); err != nil {
- err = errors.WithStack(err)
- res = nil
- return
- }
- res = append(res, r)
- }
- return
- }
- // batchCodeAutoArg .
- func (d *Dao) batchCodeAutoArg(arg *model.ArgBatchCode) string {
- autoSQLStr := ""
- if arg.BusinessID > 0 {
- autoSQLStr += fmt.Sprintf(" AND business_id=%v ", arg.BusinessID)
- }
- if arg.PoolID > 0 {
- autoSQLStr += fmt.Sprintf(" AND pool_id = %v ", arg.PoolID)
- }
- if arg.ID > 0 {
- autoSQLStr += fmt.Sprintf(" AND id = %v ", arg.ID)
- }
- if len(arg.Name) > 0 {
- autoSQLStr += " AND batch_name like '%" + arg.Name + "%'"
- }
- if arg.Status > 0 {
- autoSQLStr += fmt.Sprintf(" AND status = %v", arg.Status)
- }
- if arg.StartTime > 0 && arg.EndTime > 0 {
- autoSQLStr += fmt.Sprintf(" AND ctime >='%v' AND ctime <= '%v'", arg.StartTime.Time().Format("2006-01-02 15:04:05"), arg.EndTime.Time().Format("2006-01-02 15:04:05"))
- }
- return autoSQLStr
- }
- // SelBatchCodes .
- func (d *Dao) SelBatchCodes(c context.Context, batchIds []int64) (res []*model.BatchCode, err error) {
- var (
- rows *sql.Rows
- ids []string
- )
- if len(batchIds) <= 0 {
- return
- }
- for _, v := range batchIds {
- ids = append(ids, fmt.Sprintf("%v", v))
- }
- if rows, err = d.db.Query(c, fmt.Sprintf(_selBatchCodesSQL, strings.Join(ids, ","))); err != nil {
- err = errors.WithStack(err)
- return
- }
- for rows.Next() {
- r := new(model.BatchCode)
- if err = rows.Scan(&r.ID, &r.BusinessID, &r.PoolID, &r.Status, &r.Type, &r.LimitDay, &r.MaxCount, &r.BatchName, &r.Reason, &r.Unit, &r.Count, &r.SurplusCount, &r.Price, &r.StartTime, &r.EndTime, &r.Contacts, &r.ContactsNumber, &r.Ctime); err != nil {
- err = errors.WithStack(err)
- res = nil
- return
- }
- res = append(res, r)
- }
- return
- }
- // SelBatchCode .
- func (d *Dao) SelBatchCode(c context.Context, arg *model.ArgBatchCode, pn, ps int) (res []*model.BatchCode, err error) {
- var rows *sql.Rows
- autoSQLStr := d.batchCodeAutoArg(arg)
- if pn <= 0 {
- pn = _defpn
- }
- if ps <= 0 || ps > _maxps {
- ps = _defps
- }
- autoSQLStr += fmt.Sprintf(" LIMIT %v,%v", (pn-1)*ps, ps)
- if rows, err = d.db.Query(c, _selBatchCodeSQL+autoSQLStr); err != nil {
- err = errors.WithStack(err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- r := new(model.BatchCode)
- if err = rows.Scan(&r.ID, &r.BusinessID, &r.PoolID, &r.Status, &r.Type, &r.LimitDay, &r.MaxCount, &r.BatchName, &r.Reason, &r.Unit, &r.Count, &r.SurplusCount, &r.Price, &r.StartTime, &r.EndTime, &r.Contacts, &r.ContactsNumber, &r.Ctime); err != nil {
- err = errors.WithStack(err)
- res = nil
- return
- }
- res = append(res, r)
- }
- return
- }
- // SelBatchCodeName .
- func (d *Dao) SelBatchCodeName(c context.Context, name string) (r *model.BatchCode, err error) {
- row := d.db.QueryRow(c, _selBatchCodeByNameSQL, name)
- r = new(model.BatchCode)
- if err = row.Scan(&r.ID, &r.BusinessID, &r.PoolID, &r.Status, &r.Type, &r.LimitDay, &r.MaxCount, &r.BatchName, &r.Reason, &r.Unit, &r.Count, &r.SurplusCount, &r.Price, &r.StartTime, &r.EndTime, &r.Contacts, &r.ContactsNumber, &r.Ctime); err != nil {
- if err == sql.ErrNoRows {
- r = nil
- err = nil
- fmt.Printf("this is %+v", err)
- return
- }
- err = errors.WithStack(err)
- return
- }
- return
- }
- // SelBatchCodeID .
- func (d *Dao) SelBatchCodeID(c context.Context, batchCodeID int64) (r *model.BatchCode, err error) {
- row := d.db.QueryRow(c, _selBatchCodeByIDSQL, batchCodeID)
- r = new(model.BatchCode)
- if err = row.Scan(&r.ID, &r.BusinessID, &r.PoolID, &r.Status, &r.Type, &r.LimitDay, &r.MaxCount, &r.BatchName, &r.Reason, &r.Unit, &r.Count, &r.SurplusCount, &r.Price, &r.StartTime, &r.EndTime, &r.Contacts, &r.ContactsNumber, &r.Ctime); err != nil {
- if err == sql.ErrNoRows {
- r = nil
- err = nil
- return
- }
- err = errors.WithStack(err)
- return
- }
- return
- }
- // SelCodeID .
- func (d *Dao) SelCodeID(c context.Context, codeID int64) (r *model.ResourceCode, err error) {
- row := d.db.QueryRow(c, _selCodeByIDSQL, codeID)
- r = new(model.ResourceCode)
- if err = row.Scan(&r.ID, &r.BatchCodeID, &r.Status, &r.Code, &r.Mid, &r.UseTime, &r.Ctime); err != nil {
- if err == sql.ErrNoRows {
- r = nil
- err = nil
- }
- err = errors.WithStack(err)
- return
- }
- return
- }
- // TxAddBatchCode .
- func (d *Dao) TxAddBatchCode(tx *sql.Tx, bc *model.BatchCode) (ID int64, err error) {
- var result xsql.Result
- if result, err = tx.Exec(_addBatchCodeSQL, bc.BusinessID, bc.PoolID, bc.Status, bc.BatchName, bc.Reason, bc.Unit, bc.Count, bc.SurplusCount, bc.Price, bc.StartTime, bc.EndTime, bc.Contacts, bc.ContactsNumber, bc.Type, bc.LimitDay, bc.MaxCount, bc.Operator); err != nil {
- err = errors.WithStack(err)
- return
- }
- if ID, err = result.LastInsertId(); err != nil {
- err = errors.WithStack(err)
- return
- }
- return
- }
- // UpdateBatchCode .
- func (d *Dao) UpdateBatchCode(c context.Context, bc *model.BatchCode) (eff int64, err error) {
- var result xsql.Result
- if result, err = d.db.Exec(c, _updateBatchCodeSQL, &bc.Status, &bc.BatchName, &bc.Reason, &bc.Price, &bc.Contacts, &bc.ContactsNumber, &bc.Type, &bc.LimitDay, &bc.MaxCount, &bc.Operator, &bc.ID); err != nil {
- err = errors.WithStack(err)
- return
- }
- if eff, err = result.RowsAffected(); err != nil {
- err = errors.WithStack(err)
- return
- }
- return
- }
- // UpdateCode .
- func (d *Dao) UpdateCode(c context.Context, codeID int64, status int8) (eff int64, err error) {
- var result xsql.Result
- if result, err = d.db.Exec(c, _updateCodeSQL, status, codeID); err != nil {
- err = errors.WithStack(err)
- return
- }
- if eff, err = result.RowsAffected(); err != nil {
- err = errors.WithStack(err)
- return
- }
- return
- }
- // BatchAddCode .
- func (d *Dao) BatchAddCode(tx *sql.Tx, codes []*model.ResourceCode) (err error) {
- values := make([]string, 0)
- for _, v := range codes {
- s := fmt.Sprintf("('%v','%v','%v')", v.BatchCodeID, v.Status, v.Code)
- values = append(values, s)
- }
- valuesStr := strings.Join(values, ",")
- if _, err = tx.Exec(_batchAddCodeSQL + valuesStr); err != nil {
- err = errors.WithStack(err)
- return
- }
- return
- }
|