You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
6.1 KiB
212 lines
6.1 KiB
package dao |
|
|
|
import ( |
|
"fmt" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/admin/main/vip/model" |
|
"go-common/library/log" |
|
|
|
"github.com/jinzhu/gorm" |
|
"github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
_welfareTypeTable = "vip_welfare_type" |
|
_welfareTable = "vip_welfare" |
|
_codeBatchTable = "vip_welfare_code_batch" |
|
_welfareCodeTable = "vip_welfare_code" |
|
_notDelete = 0 |
|
_nobody = 0 |
|
_noTid = 0 |
|
_batchInsertWelfareCode = "INSERT INTO vip_welfare_code (bid, wid, code) VALUES %s" |
|
) |
|
|
|
// WelfareTypeAdd add welfare type |
|
func (d *Dao) WelfareTypeAdd(wt *model.WelfareType) (err error) { |
|
if err = d.vip.Save(wt).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareTypeAdd(%+v)", wt) |
|
} |
|
return |
|
} |
|
|
|
// WelfareTypeUpd update welfare type |
|
func (d *Dao) WelfareTypeUpd(wt *model.WelfareType) (err error) { |
|
if err = d.vip.Table(_welfareTypeTable).Where("id = ? and state = ?", wt.ID, _notDelete). |
|
Update(map[string]interface{}{ |
|
"oper_id": wt.OperID, |
|
"oper_name": wt.OperName, |
|
"state": wt.State, |
|
"name": wt.Name, |
|
}).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareTypeUpd(%+v)", wt) |
|
} |
|
return |
|
} |
|
|
|
// WelfareTypeState delete welfare type |
|
func (d *Dao) WelfareTypeState(tx *gorm.DB, id, state, operId int, operName string) (err error) { |
|
if err = tx.Table(_welfareTypeTable).Where("id = ?", id). |
|
Update(map[string]interface{}{ |
|
"oper_id": operId, |
|
"oper_name": operName, |
|
"state": state, |
|
}).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareTypeState id(%v) state(%v)", id, state) |
|
} |
|
return |
|
} |
|
|
|
// WelfareTypeList get welfare type list |
|
func (d *Dao) WelfareTypeList() (wts []*model.WelfareTypeRes, err error) { |
|
if err = d.vip.Table(_welfareTypeTable).Where("state = ?", _notDelete).Find(&wts).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareTypeList") |
|
} |
|
return |
|
} |
|
|
|
// WelfareAdd add welfare |
|
func (d *Dao) WelfareAdd(wt *model.Welfare) (err error) { |
|
if err = d.vip.Save(wt).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareAdd(%+v)", wt) |
|
} |
|
return |
|
} |
|
|
|
// WelfareUpd update welfare |
|
func (d *Dao) WelfareUpd(wt *model.WelfareReq) (err error) { |
|
if err = d.vip.Table(_welfareTable).Where("id = ? and state = ?", wt.ID, _notDelete). |
|
Update(map[string]interface{}{ |
|
"welfare_name": wt.WelfareName, |
|
"welfare_desc": wt.WelfareDesc, |
|
"homepage_uri": wt.HomepageUri, |
|
"backdrop_uri": wt.BackdropUri, |
|
"recommend": wt.Recommend, |
|
"rank": wt.Rank, |
|
"tid": wt.Tid, |
|
"stime": wt.Stime, |
|
"etime": wt.Etime, |
|
"usage_form": wt.UsageForm, |
|
"receive_rate": wt.ReceiveRate, |
|
"receive_uri": wt.ReceiveUri, |
|
"vip_type": wt.VipType, |
|
"oper_id": wt.OperID, |
|
"oper_name": wt.OperName, |
|
}).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareUpd(%+v)", wt) |
|
} |
|
return |
|
} |
|
|
|
// WelfareState delete welfare |
|
func (d *Dao) WelfareState(id, state, operId int, operName string) (err error) { |
|
if err = d.vip.Table(_welfareTable).Where("id = ?", id). |
|
Update(map[string]interface{}{ |
|
"oper_id": operId, |
|
"oper_name": operName, |
|
"state": state, |
|
}).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareState id(%v) state(%v)", id, state) |
|
} |
|
return |
|
} |
|
|
|
// ResetWelfareTid reset welfare tid to 0 |
|
func (d *Dao) ResetWelfareTid(tx *gorm.DB, tid int) (err error) { |
|
if err = tx.Table(_welfareTable).Where("tid = ?", tid).Update("tid", _noTid).Error; err != nil { |
|
err = errors.Wrapf(err, "ResetWelfareTid(%v)", tid) |
|
} |
|
return |
|
} |
|
|
|
// WelfareList get welfare list |
|
func (d *Dao) WelfareList(tid int) (ws []*model.WelfareRes, err error) { |
|
db := d.vip.Table(_welfareTable) |
|
if tid != 0 { |
|
db = db.Where("tid = ?", tid) |
|
} |
|
if err = db.Where("state = ?", _notDelete).Order("recommend desc, rank").Find(&ws).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareList(%+v)", tid) |
|
} |
|
return |
|
} |
|
|
|
// WelfareBatchSave add welfare batch |
|
func (d *Dao) WelfareBatchSave(wcb *model.WelfareCodeBatch) (err error) { |
|
if err = d.vip.Table(_codeBatchTable).Save(wcb).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareBatchSave(%+v)", wcb) |
|
} |
|
return |
|
} |
|
|
|
// WelfareBatchList get welfare list |
|
func (d *Dao) WelfareBatchList(wid int) (wbs []*model.WelfareBatchRes, err error) { |
|
if err = d.vip.Table(_codeBatchTable).Where("wid = ? and state = ?", wid, _notDelete).Find(&wbs).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareBatchList(%+v)", wid) |
|
} |
|
return |
|
} |
|
|
|
// WelfareBatchState delete welfare batch |
|
func (d *Dao) WelfareBatchState(tx *gorm.DB, id, state, operId int, operName string) (err error) { |
|
if err = tx.Table(_codeBatchTable).Where("id = ?", id). |
|
Update(map[string]interface{}{ |
|
"oper_id": operId, |
|
"oper_name": operName, |
|
"state": state, |
|
}).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareBatchState(%+v)", id) |
|
} |
|
|
|
return |
|
} |
|
|
|
// WelfareCodeBatchInsert insert welfare batch code |
|
func (d *Dao) WelfareCodeBatchInsert(wcs []*model.WelfareCode) (err error) { |
|
log.Info("WelfareCodeBatchInsert start time (%s)", time.Now()) |
|
var ( |
|
buff = make([]*model.WelfareCode, 2000) |
|
buffEnd = 0 |
|
) |
|
for _, wc := range wcs { |
|
buff[buffEnd] = wc |
|
buffEnd++ |
|
if buffEnd >= 2000 { |
|
buffEnd = 0 |
|
stmt, valueArgs := getBatchInsertSQL(buff) |
|
if err = d.vip.Exec(stmt, valueArgs...).Error; err != nil { |
|
return |
|
} |
|
} |
|
} |
|
if buffEnd > 0 { |
|
stmt, valueArgs := getBatchInsertSQL(buff[:buffEnd]) |
|
buffEnd = 0 |
|
if err = d.vip.Exec(stmt, valueArgs...).Error; err != nil { |
|
return |
|
} |
|
} |
|
log.Info("WelfareCodeBatchInsert end time (%s)", time.Now()) |
|
return |
|
} |
|
|
|
// WelfareCodeStatus delete welfare batch code |
|
func (d *Dao) WelfareCodeStatus(tx *gorm.DB, bid, state int) (err error) { |
|
if err = tx.Table(_welfareCodeTable).Where("bid = ? and mid = ?", bid, _nobody). |
|
Update("state", state).Error; err != nil { |
|
err = errors.Wrapf(err, "WelfareCodeStatus(%+v) (%+v)", bid, state) |
|
} |
|
|
|
return |
|
} |
|
|
|
func getBatchInsertSQL(buff []*model.WelfareCode) (stmt string, valueArgs []interface{}) { |
|
values := []string{} |
|
for _, b := range buff { |
|
values = append(values, "(?,?,?)") |
|
valueArgs = append(valueArgs, b.Bid, b.Wid, b.Code) |
|
} |
|
stmt = fmt.Sprintf(_batchInsertWelfareCode, strings.Join(values, ",")) |
|
return |
|
}
|
|
|