123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package dao
- import (
- "context"
- "crypto/md5"
- "encoding/base64"
- "fmt"
- "net/url"
- "strings"
- "time"
- "go-common/app/admin/main/activity/model"
- "go-common/library/log"
- "go-common/library/xstr"
- "github.com/jinzhu/gorm"
- "github.com/pkg/errors"
- )
- const (
- _likeBatchSQL = "INSERT INTO likes(`sid`,`wid`,`mid`,`type`,`state`,`stick_top`,`ctime`,`mtime`) VALUES %s"
- _likeContentBatchSQL = "INSERT INTO like_content(`id`,`ipv6`,`ctime`,`mtime`) VALUES %s"
- )
- func imgAddKey(uri string) (url string) {
- if strings.Contains(uri, "http://drawyoo.hdslb.com") {
- path := strings.Replace(uri, "http://drawyoo.hdslb.com", "", -1)
- expire := time.Now().Unix() + 3600
- md5Byte := md5.Sum([]byte(fmt.Sprintf("rjZOPr8w%s%d", path, expire)))
- md5Key := md5Byte[:]
- afterKey := strings.Replace(base64.StdEncoding.EncodeToString(md5Key), "+/", "-_", -1)
- return uri + "?key=" + strings.Replace(afterKey, "=", "", -1) + "&expires=" + fmt.Sprintf("%d", expire)
- }
- return uri
- }
- // GetLikeContent .
- func (d *Dao) GetLikeContent(c context.Context, ids []int64) (outRes map[int64]*model.LikeContent, err error) {
- var likeContent []*model.LikeContent
- if err = d.DB.Where("id in (?)", ids).Find(&likeContent).Error; err != nil && err != gorm.ErrRecordNotFound {
- log.Error("s.DB.Where(id in %v).Find(),error(%v)", ids, err)
- return
- }
- outRes = make(map[int64]*model.LikeContent, len(likeContent))
- for _, item := range likeContent {
- outRes[item.ID] = item
- outRes[item.ID].Image = imgAddKey(item.Image)
- }
- return
- }
- // ActSubject get likesubject from db.
- func (d *Dao) ActSubject(c context.Context, sid int64) (rp *model.ActSubject, err error) {
- rp = new(model.ActSubject)
- if err = d.DB.Where("id = ?", sid).First(rp).Error; err != nil {
- log.Error(" s.DB.Where(id ,%d).First() error(%v)", sid, err)
- }
- return
- }
- // Musics get music info .
- func (d *Dao) Musics(c context.Context, aids []int64, ip string) (music *model.MusicRes, err error) {
- params := url.Values{}
- params.Set("songIds", xstr.JoinInts(aids))
- if err = d.client.Post(c, d.songsURL, ip, params, &music); err != nil {
- err = errors.Wrapf(err, "d.client.Post(%s)", d.songsURL)
- }
- if music.Code != 0 {
- err = errors.New("get music error")
- }
- return
- }
- // BatchLike .
- func (d *Dao) BatchLike(c context.Context, item *model.Like, wids []int64, ipv6 []byte) (err error) {
- var (
- likesVal []*model.Like
- )
- if len(wids) == 0 {
- return
- }
- lidString := make([]string, 0, len(wids))
- rowStrings := make([]string, 0, len(wids))
- ctime := time.Now()
- for _, v := range wids {
- rowStrings = append(rowStrings, fmt.Sprintf("(%d,%d,%d,%d,%d,%d,'%s','%s')", item.Sid, v, item.Mid, item.Type, item.State, item.StickTop, ctime, ctime))
- }
- tx := d.DB.Begin()
- if err = tx.Model(&model.Like{}).Exec(fmt.Sprintf(_likeBatchSQL, strings.Join(rowStrings, ","))).Error; err != nil {
- err = errors.Wrapf(err, " d.DB.Model(&model.Like{}).Exec(%s)", _likeBatchSQL)
- tx.Rollback()
- return
- }
- if err = tx.Model(&model.Like{}).Where(fmt.Sprintf("sid = ? and wid in (%s)", xstr.JoinInts(wids)), item.Sid).Find(&likesVal).Error; err != nil {
- err = errors.Wrapf(err, " d.DB.Model(&model.Like{}).find()")
- tx.Rollback()
- return
- }
- for _, itm := range likesVal {
- lidString = append(lidString, fmt.Sprintf("(%d,'%s','%s','%s')", itm.ID, ipv6, ctime, ctime))
- }
- if err = tx.Model(&model.LikeContent{}).Exec(fmt.Sprintf(_likeContentBatchSQL, strings.Join(lidString, ","))).Error; err != nil {
- err = errors.Wrapf(err, " d.DB.Model(&model.LikeContent{}).Exec(%s)", _likeContentBatchSQL)
- tx.Rollback()
- return
- }
- err = tx.Commit().Error
- return
- }
|