123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- package dao
- import (
- "context"
- "database/sql"
- "fmt"
- "time"
- "go-common/app/admin/main/vip/model"
- xsql "go-common/library/database/sql"
- xtime "go-common/library/time"
- "github.com/pkg/errors"
- )
- const (
- _inVipPriceConfigSQL = "INSERT INTO vip_price_config_v2(platform,product_name,product_id,suit_type,month,sub_type,original_price,selected,remark,status,operator,oper_id,superscript,start_build,end_build) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
- _inVipDPriceConfigSQL = "INSERT INTO vip_price_discount_config_v2(vpc_id,product_id,discount_price,stime,etime,remark,operator,oper_id,first_price) VALUES(?,?,?,?,?,?,?,?,?)"
- _upVipPriceConfigIDSQL = "UPDATE vip_price_config_v2 SET platform = ?, product_name = ?, product_id = ?, suit_type = ?, month = ?, sub_type = ?, original_price = ?, remark = ?, status = ?, operator = ?, oper_id = ?, selected = ?, superscript = ?, start_build = ?, end_build = ? WHERE id = ?"
- _upVipDPriceConfigSQL = "UPDATE vip_price_discount_config_v2 SET product_id = ?, discount_price = ?, stime = ?, etime =?, remark = ?, operator = ?, oper_id = ?,first_price = ? WHERE id = ?"
- _delVipPriceConfigIDSQL = "DELETE FROM vip_price_config_v2 WHERE id = ?"
- _delVipDPriceConfigIDSQL = "DELETE FROM vip_price_discount_config_v2 WHERE id = ?"
- _selVipPriceConfigUQCheckSQL = "SELECT COUNT(*) FROM vip_price_config_v2 WHERE platform = ? AND month = ? AND sub_type = ? AND suit_type = ? %s;"
- _selVipPriceConfigsSQL = "SELECT id,platform,product_name,product_id,suit_type,month,sub_type,original_price,selected,remark,status,operator,oper_id,ctime,mtime,superscript,start_build,end_build FROM vip_price_config_v2 ORDER BY id DESC"
- _selVipPriceConfigIDSQL = "SELECT id,platform,product_name,product_id,suit_type,month,sub_type,original_price,selected,remark,status,operator,oper_id,ctime,mtime,superscript,start_build,end_build FROM vip_price_config_v2 WHERE id = ?"
- _selVipDPriceConfigsSQL = "SELECT id,vpc_id,product_id,discount_price,stime,etime,remark,operator,oper_id,ctime,mtime,first_price FROM vip_price_discount_config_v2 WHERE vpc_id = ? ORDER BY stime ASC"
- _selVipDPriceConfigIDSQL = "SELECT id,vpc_id,product_id,discount_price,stime,etime,remark,operator,oper_id,ctime,mtime,first_price FROM vip_price_discount_config_v2 WHERE id = ?"
- _selVipDPriceConfigUQTimeSQL = "SELECT id,vpc_id,product_id,discount_price,stime,etime,remark,ctime,mtime FROM vip_price_discount_config_v2 WHERE vpc_id = ? AND ((etime <> '1970-01-01 08:00:00' AND (etime >= ? OR etime >= ?) AND stime <= ?) OR (etime = '1970-01-01 08:00:00' AND stime <= ?))"
- _selVipPriceDiscountConfigsSQL = "SELECT vpc_id,product_id,discount_price,stime,etime,remark,ctime,mtime FROM vip_price_discount_config_v2 WHERE stime <= ? AND ((etime > ? AND etime <> '1970-01-01 08:00:00') OR (etime = '1970-01-01 08:00:00'))"
- _selVipMaxPriceDiscountSQL = "SELECT MAX(discount_price) FROM vip_price_discount_config_v2 WHERE vpc_id = ?"
- _countVipPriceConfigByplatSQL = "SELECT COUNT(*) FROM vip_price_config_v2 WHERE platform = ?"
- )
- // AddVipPriceConfig insert vip price config .
- func (d *Dao) AddVipPriceConfig(c context.Context, v *model.VipPriceConfig) (err error) {
- if _, err = d.db.Exec(c, _inVipPriceConfigSQL, v.Plat, v.PdName, v.PdID, v.SuitType, v.Month, v.SubType, v.OPrice, v.Selected, v.Remark, v.Status, v.Operator, v.OpID, v.Superscript, v.StartBuild, v.EndBuild); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // AddVipDPriceConfig insert vip discount price config .
- func (d *Dao) AddVipDPriceConfig(c context.Context, v *model.VipDPriceConfig) (err error) {
- if _, err = d.db.Exec(c, _inVipDPriceConfigSQL, v.ID, v.PdID, v.DPrice, v.STime, v.ETime, v.Remark, v.Operator, v.OpID, v.FirstPrice); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // UpVipPriceConfig update vip price config .
- func (d *Dao) UpVipPriceConfig(c context.Context, v *model.VipPriceConfig) (err error) {
- if _, err = d.db.Exec(c, _upVipPriceConfigIDSQL, v.Plat, v.PdName, v.PdID, v.SuitType, v.Month, v.SubType, v.OPrice, v.Remark, v.Status, v.Operator, v.OpID, v.Selected, v.Superscript, v.StartBuild, v.EndBuild, v.ID); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // UpVipDPriceConfig update vip discount price config .
- func (d *Dao) UpVipDPriceConfig(c context.Context, v *model.VipDPriceConfig) (err error) {
- if _, err = d.db.Exec(c, _upVipDPriceConfigSQL, v.PdID, v.DPrice, v.STime, v.ETime, v.Remark, v.Operator, v.OpID, v.FirstPrice, v.DisID); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // DelVipPriceConfig delete vip price config .
- func (d *Dao) DelVipPriceConfig(c context.Context, arg *model.ArgVipPriceID) (err error) {
- if _, err = d.db.Exec(c, _delVipPriceConfigIDSQL, arg.ID); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // DelVipDPriceConfig delete vip discount price config .
- func (d *Dao) DelVipDPriceConfig(c context.Context, arg *model.ArgVipDPriceID) (err error) {
- if _, err = d.db.Exec(c, _delVipDPriceConfigIDSQL, arg.DisID); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // VipPriceConfigUQCheck count vip price config unquie check.
- func (d *Dao) VipPriceConfigUQCheck(c context.Context, arg *model.ArgAddOrUpVipPrice) (count int64, err error) {
- sqlPostfix := ""
- if arg.EndBuild > 0 {
- sqlPostfix += fmt.Sprintf(" AND (start_build<= %d )", arg.EndBuild)
- }
- if arg.StartBuild > 0 {
- sqlPostfix += fmt.Sprintf(" AND (end_build >= %d OR end_build = 0 )", arg.StartBuild)
- }
- if arg.ID > 0 {
- // for update
- sqlPostfix += fmt.Sprintf(" AND id != %d ", arg.ID)
- }
- if err = d.db.QueryRow(c,
- fmt.Sprintf(_selVipPriceConfigUQCheckSQL, sqlPostfix),
- arg.Plat,
- arg.Month,
- arg.SubType,
- arg.SuitType).Scan(&count); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // VipPriceConfigs vip price configs
- func (d *Dao) VipPriceConfigs(c context.Context) (vpcs []*model.VipPriceConfig, err error) {
- var rows *xsql.Rows
- if rows, err = d.db.Query(c, _selVipPriceConfigsSQL); err != nil {
- err = errors.WithStack(err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- vpc := new(model.VipPriceConfig)
- if err = rows.Scan(&vpc.ID, &vpc.Plat, &vpc.PdName, &vpc.PdID, &vpc.SuitType, &vpc.Month, &vpc.SubType,
- &vpc.OPrice, &vpc.Selected, &vpc.Remark, &vpc.Status, &vpc.Operator, &vpc.OpID, &vpc.CTime, &vpc.MTime,
- &vpc.Superscript, &vpc.StartBuild, &vpc.EndBuild); err != nil {
- if err == xsql.ErrNoRows {
- err = nil
- vpc = nil
- } else {
- err = errors.WithStack(err)
- }
- return
- }
- vpcs = append(vpcs, vpc)
- }
- return
- }
- // VipPriceConfigID vip price config by id
- func (d *Dao) VipPriceConfigID(c context.Context, arg *model.ArgVipPriceID) (vpc *model.VipPriceConfig, err error) {
- row := d.db.QueryRow(c, _selVipPriceConfigIDSQL, arg.ID)
- vpc = new(model.VipPriceConfig)
- if err = row.Scan(&vpc.ID, &vpc.Plat, &vpc.PdName, &vpc.PdID, &vpc.SuitType, &vpc.Month, &vpc.SubType, &vpc.OPrice, &vpc.Selected,
- &vpc.Remark, &vpc.Status, &vpc.Operator, &vpc.OpID, &vpc.CTime, &vpc.MTime, &vpc.Superscript, &vpc.StartBuild, &vpc.EndBuild); err != nil {
- if err != sql.ErrNoRows {
- err = errors.WithStack(err)
- return
- }
- err = nil
- vpc = nil
- }
- return
- }
- // VipDPriceConfigs vip discount price configs
- func (d *Dao) VipDPriceConfigs(c context.Context, arg *model.ArgVipPriceID) (res []*model.VipDPriceConfig, err error) {
- var rows *xsql.Rows
- if rows, err = d.db.Query(c, _selVipDPriceConfigsSQL, arg.ID); err != nil {
- err = errors.WithStack(err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- v := new(model.VipDPriceConfig)
- if err = rows.Scan(&v.DisID, &v.ID, &v.PdID, &v.DPrice, &v.STime, &v.ETime, &v.Remark, &v.Operator, &v.OpID, &v.CTime, &v.MTime, &v.FirstPrice); err != nil {
- if err == xsql.ErrNoRows {
- err = nil
- res = nil
- } else {
- err = errors.WithStack(err)
- }
- return
- }
- res = append(res, v)
- }
- return
- }
- // VipDPriceConfigID vip discount price config by id
- func (d *Dao) VipDPriceConfigID(c context.Context, arg *model.ArgVipDPriceID) (res *model.VipDPriceConfig, err error) {
- row := d.db.QueryRow(c, _selVipDPriceConfigIDSQL, arg.DisID)
- res = new(model.VipDPriceConfig)
- if err = row.Scan(&res.DisID, &res.ID, &res.PdID, &res.DPrice, &res.STime, &res.ETime, &res.Remark, &res.Operator, &res.OpID, &res.CTime, &res.MTime, &res.FirstPrice); err != nil {
- if err != xsql.ErrNoRows {
- err = errors.WithStack(err)
- return
- }
- err = nil
- res = nil
- }
- return
- }
- // VipDPriceConfigUQTime count vip discount price config unquie check time.
- func (d *Dao) VipDPriceConfigUQTime(c context.Context, arg *model.ArgAddOrUpVipDPrice) (mvd map[int64]*model.VipDPriceConfig, err error) {
- var (
- rows *xsql.Rows
- etime = arg.ETime
- )
- if etime == 0 {
- etime = xtime.Time(time.Now().AddDate(1000, 0, 0).Unix())
- }
- mvd = make(map[int64]*model.VipDPriceConfig)
- if rows, err = d.db.Query(c, _selVipDPriceConfigUQTimeSQL, arg.ID, arg.STime, etime, etime, arg.STime); err != nil {
- err = errors.WithStack(err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- vdc := new(model.VipDPriceConfig)
- if err = rows.Scan(&vdc.DisID, &vdc.ID, &vdc.PdID, &vdc.DPrice, &vdc.STime, &vdc.ETime, &vdc.Remark, &vdc.CTime, &vdc.MTime); err != nil {
- if err != xsql.ErrNoRows {
- err = errors.WithStack(err)
- return
- }
- mvd = nil
- err = nil
- return
- }
- mvd[vdc.DisID] = vdc
- }
- err = rows.Err()
- return
- }
- // VipPriceDiscountConfigs get vip price discount configs.
- func (d *Dao) VipPriceDiscountConfigs(c context.Context) (mvd map[int64]*model.VipDPriceConfig, err error) {
- var (
- rows *xsql.Rows
- now = time.Now()
- )
- mvd = make(map[int64]*model.VipDPriceConfig)
- if rows, err = d.db.Query(c, _selVipPriceDiscountConfigsSQL, now, now); err != nil {
- err = errors.WithStack(err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- vdc := new(model.VipDPriceConfig)
- if err = rows.Scan(&vdc.ID, &vdc.PdID, &vdc.DPrice, &vdc.STime, &vdc.ETime, &vdc.Remark, &vdc.CTime, &vdc.MTime); err != nil {
- if err != xsql.ErrNoRows {
- err = errors.WithStack(err)
- return
- }
- mvd = nil
- err = nil
- return
- }
- mvd[vdc.ID] = vdc
- }
- err = rows.Err()
- return
- }
- // VipMaxPriceDiscount max price discount.
- func (d *Dao) VipMaxPriceDiscount(c context.Context, arg *model.ArgAddOrUpVipPrice) (res float64, err error) {
- var max sql.NullFloat64
- row := d.db.QueryRow(c, _selVipMaxPriceDiscountSQL, arg.ID)
- if err = row.Scan(&max); err != nil {
- return
- }
- res = max.Float64
- return
- }
- // CountVipPriceConfigByPlat count vip price config by platform id.
- func (d *Dao) CountVipPriceConfigByPlat(c context.Context, plat int64) (count int64, err error) {
- row := d.db.QueryRow(c, _countVipPriceConfigByplatSQL, plat)
- if err = row.Scan(&count); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
|