123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package guard
- import (
- "context"
- "fmt"
- "go-common/library/xstr"
- "time"
- confm "go-common/app/service/live/xuser/conf"
- "go-common/app/service/live/xuser/model"
- dhhm "go-common/app/service/live/xuser/model/dhh"
- "go-common/library/log"
- "github.com/pkg/errors"
- )
- const (
- _guardTable = "ap_user_privilege"
- )
- var (
- // add guard info
- _addGuardInfo = "REPLACE INTO `%s` (`uid`,`target_id`,`privilege_type`,`start_time`,`expired_time`) VALUES(?,?,?,?,?);"
- // get guard info
- _getGuardInfo = "SELECT `id`,`uid`,`target_id`,`privilege_type`,`start_time`,`expired_time` FROM `%s` WHERE `uid`=? AND `expired_time`>=? ORDER BY `privilege_type` ASC;"
- // get guard info
- _getGuardInfo2 = "SELECT `id`,`uid`,`target_id`,`privilege_type`,`start_time`,`expired_time` FROM `%s` WHERE `uid`=? AND `target_id`=? AND `expired_time`>=? ORDER BY `privilege_type` ASC;"
- // update guard info
- _updGuardInfo = "UPDATE `%s` SET `expired_time`=date_add(expired_time, interval ? day) WHERE `uid`=? AND `target_id`=? AND `expired_time`>=? AND `privilege_type`%s?"
- // upsert guard info
- _upsertGuardInfo = "INSERT INTO `%s` (`uid`,`target_id`,`privilege_type`,`start_time`,`expired_time`) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE `start_time`=?,`expired_time`=?;"
- // 查询大航海信息
- _selUID = "SELECT id,uid,target_id,privilege_type,start_time,expired_time,ctime,utime FROM ap_user_privilege where uid IN (%s) AND expired_time >= '%s' "
- _selAnchorUID = "SELECT id,uid,target_id,privilege_type,start_time,expired_time,ctime,utime FROM ap_user_privilege where target_id IN (%s) AND expired_time >= '%s' "
- _errorDBLogPrefix = "xuser.dahanghai.dao.mysql|"
- )
- // GetByUIDs 批量查询
- func (d *GuardDao) GetByUIDs(c context.Context, uids []int64) (dhhs []*dhhm.DHHDB, err error) {
- reqStartTime := confm.RecordTimeCost()
- dhhs = make([]*dhhm.DHHDB, 0)
- tm := time.Now()
- timeNow := tm.Format("2006-1-2 15:04:05")
- rows, err1 := d.db.Query(c, fmt.Sprintf(_selUID, xstr.JoinInts(uids), timeNow))
- if err1 != nil {
- reqAfterTime := confm.RecordTimeCost()
- err = err1
- log.Error(_errorDBLogPrefix+confm.GetFromDHHDBError+"|GetByUIDs err: %v|cost:%dms", err, reqAfterTime-reqStartTime)
- return
- }
- for rows.Next() {
- ele := &dhhm.DHHDB{}
- if err = rows.Scan(&ele.ID, &ele.UID, &ele.TargetId, &ele.PrivilegeType, &ele.StartTime, &ele.ExpiredTime, &ele.Ctime, &ele.Utime); err != nil {
- log.Error(_errorDBLogPrefix+confm.ScanFromDHHDBError+"|GetByUIDs rows.Scan err: %v", err)
- return
- }
- dhhs = append(dhhs, ele)
- }
- return
- }
- // GetByUIDsWithMap 批量查询
- func (d *GuardDao) GetByUIDsWithMap(c context.Context, uids []int64) (dhhs map[int64][]*dhhm.DHHDB, err error) {
- reqStartTime := confm.RecordTimeCost()
- dhhs = make(map[int64][]*dhhm.DHHDB)
- tm := time.Now()
- timeNow := tm.Format("2006-1-2 15:04:05")
- rows, err1 := d.db.Query(c, fmt.Sprintf(_selUID, xstr.JoinInts(uids), timeNow))
- if err1 != nil {
- reqAfterTime := confm.RecordTimeCost()
- err = err1
- log.Error(_errorDBLogPrefix+confm.GetFromDHHDBError+"|GetByUIDs err: %v|cost:%dms", err, reqAfterTime-reqStartTime)
- return
- }
- for rows.Next() {
- ele := &dhhm.DHHDB{}
- if err = rows.Scan(&ele.ID, &ele.UID, &ele.TargetId, &ele.PrivilegeType, &ele.StartTime, &ele.ExpiredTime, &ele.Ctime, &ele.Utime); err != nil {
- log.Error(_errorDBLogPrefix+confm.ScanFromDHHDBError+"|GetByUIDs rows.Scan err: %v", err)
- return
- }
- if _, exist := dhhs[ele.UID]; !exist {
- dhhs[ele.UID] = make([]*dhhm.DHHDB, 0)
- }
- dhhs[ele.UID] = append(dhhs[ele.UID], ele)
- }
- return
- }
- // GetByAnchorUIDs 批量查询
- func (d *GuardDao) GetByAnchorUIDs(c context.Context, uids []int64) (dhhs []*dhhm.DHHDB, err error) {
- reqStartTime := confm.RecordTimeCost()
- dhhs = make([]*dhhm.DHHDB, 0)
- tm := time.Now()
- timeNow := tm.Format("2006-1-2 15:04:05")
- rows, err1 := d.db.Query(c, fmt.Sprintf(_selAnchorUID, xstr.JoinInts(uids), timeNow))
- if err1 != nil {
- reqAfterTime := confm.RecordTimeCost()
- err = err1
- log.Error(_errorDBLogPrefix+confm.GetFromDHHDBError+"|GetByUIDs err: %v|cost:%dms", err, reqAfterTime-reqStartTime)
- return
- }
- for rows.Next() {
- ele := &dhhm.DHHDB{}
- if err = rows.Scan(&ele.ID, &ele.UID, &ele.TargetId, &ele.PrivilegeType, &ele.StartTime, &ele.ExpiredTime, &ele.Ctime, &ele.Utime); err != nil {
- log.Error(_errorDBLogPrefix+confm.ScanFromDHHDBError+"|GetByUIDs rows.Scan err: %v", err)
- return
- }
- dhhs = append(dhhs, ele)
- }
- return
- }
- // GetGuardByUID get guard info by uid
- func (d *GuardDao) GetGuardByUID(ctx context.Context, uid int64) (info []*model.GuardInfo, err error) {
- sql := fmt.Sprintf(_getGuardInfo, _guardTable)
- rows, err := d.db.Query(ctx, sql, uid, time.Now().Format("2006-01-02 15:04:05"))
- if err != nil {
- log.Error("[dao.guard.mysql|GetGuardByUID] get user guard record error(%v), uid(%d)", err, uid)
- return nil, err
- }
- defer rows.Close()
- for rows.Next() {
- var inf model.GuardInfo
- err = rows.Scan(&inf.Id, &inf.Uid, &inf.TargetId, &inf.PrivilegeType, &inf.StartTime, &inf.ExpiredTime)
- if err != nil {
- log.Error("[dao.guard.mysql|GetGuardByUID] scan user guard record error(%v), uid(%d)", err, uid)
- return nil, err
- }
- info = append(info, &inf)
- }
- return
- }
- // GetGuardByUIDRuid get guard info by uid and ruid
- func (d *GuardDao) GetGuardByUIDRuid(ctx context.Context, uid int64, ruid int64) (info []*model.GuardInfo, err error) {
- sql := fmt.Sprintf(_getGuardInfo2, _guardTable)
- rows, err := d.db.Query(ctx, sql, uid, ruid, time.Now().Format("2006-01-02 15:04:05"))
- if err != nil {
- log.Error("[dao.guard.mysql|GetGuardByUIDRuid] get user guard record error(%v), uid(%d), ruid(%d)", err, uid, ruid)
- return nil, err
- }
- defer rows.Close()
- for rows.Next() {
- var inf model.GuardInfo
- err = rows.Scan(&inf.Id, &inf.Uid, &inf.TargetId, &inf.PrivilegeType, &inf.StartTime, &inf.ExpiredTime)
- if err != nil {
- log.Error("[dao.guard.mysql|GetGuardByUIDRuid] scan user guard record error(%v), uid(%d), ruid(%d)", err, uid, ruid)
- return nil, err
- }
- info = append(info, &inf)
- }
- return
- }
- // AddGuard insert guard
- func (d *GuardDao) AddGuard(ctx context.Context, req *model.GuardBuy) (err error) {
- sql := fmt.Sprintf(_addGuardInfo, _guardTable)
- now := time.Now()
- endTime := time.Date(now.Year(), now.Month(), now.Day(), int(23), int(59), int(59), int(999), time.Local).AddDate(0, 0, req.Num*30)
- res, err := d.db.Exec(ctx, sql, req.Uid, req.Ruid, req.GuardLevel, now.Format("2006-01-02 15:04:05"), endTime.Format("2006-01-02 15:04:05"))
- if err != nil {
- // unique key exists error
- log.Error("[dao.guard.mysql|AddGuard] add user guard record error(%v), req(%v)", err, req)
- return
- }
- if _, err = res.LastInsertId(); err != nil {
- err = errors.WithStack(err)
- log.Error("[dao.guard.mysql|AddGuard] get last insert id error(%v), req(%v)", err, req)
- }
- return
- }
- // UpdateGuard update guard info
- func (d *GuardDao) UpdateGuard(ctx context.Context, req *model.GuardBuy, cond string) (err error) {
- sql := fmt.Sprintf(_updGuardInfo, _guardTable, cond)
- _, err = d.db.Exec(ctx, sql, req.Num*30, req.Uid, req.Ruid, time.Now().Format("2006-01-02 15:04:05"), req.GuardLevel)
- if err != nil {
- log.Error("[dao.guard.mysql|UpdateGuard] update user guard record error(%v), req(%v)", err, req)
- return
- }
- return
- }
- // UpsertGuard upsert guard info
- func (d *GuardDao) UpsertGuard(ctx context.Context, req *model.GuardBuy, expiredTime string) (err error) {
- sql := fmt.Sprintf(_upsertGuardInfo, _guardTable)
- now := time.Now()
- _, err = d.db.Exec(ctx, sql, req.Uid, req.Ruid, req.GuardLevel, now.Format("2006-01-02 15:04:05"), expiredTime, now.Format("2006-01-02 15:04:05"), expiredTime)
- if err != nil {
- log.Error("[dao.guard.mysql|UpsertGuard] upsert user guard record error(%v), req(%v)", err, req)
- return
- }
- return
- }
|