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.
145 lines
4.5 KiB
145 lines
4.5 KiB
package http |
|
|
|
import ( |
|
"go-common/app/admin/main/creative/model/logcli" |
|
"go-common/app/admin/main/creative/model/music" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/http/blademaster/binding" |
|
"go-common/library/xstr" |
|
|
|
"github.com/jinzhu/gorm" |
|
) |
|
|
|
func musicMaterialRelationInfo(c *bm.Context) { |
|
var ( |
|
req = c.Request.Form |
|
id = parseInt(req.Get("id")) |
|
err error |
|
) |
|
m := &music.WithMaterialParam{} |
|
if err = svc.DBArchive.Where("id=?", id).First(&m).Error; err != nil { |
|
c.JSON(nil, ecode.NothingFound) |
|
return |
|
} |
|
c.JSON(map[string]*music.WithMaterialParam{ |
|
"data": m, |
|
}, nil) |
|
} |
|
|
|
func editMaterialRelation(c *bm.Context) { |
|
var ( |
|
err error |
|
) |
|
uid, uname := getUIDName(c) |
|
m := &music.WithMaterialParam{} |
|
if err = c.BindWith(m, binding.Form); err != nil { |
|
return |
|
} |
|
exist := music.WithMaterial{} |
|
if err = svc.DBArchive.Where("sid=?", m.Sid).Where("state!=?", music.MusicDelete).First(&exist).Error; err != nil { |
|
c.JSON(nil, ecode.NothingFound) |
|
return |
|
} |
|
m.ID = exist.ID |
|
m.UID = uid |
|
m.Index = exist.Index |
|
if err = svc.DBArchive.Model(&music.WithMaterial{}).Where("id=?", exist.ID).Update(m).Error; err != nil { |
|
log.Error("svc.editMaterialRelation error(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
svc.SendMusicLog(c, logcli.LogClientArchiveMusicTypeMaterialRelation, &music.LogParam{ID: m.ID, UID: uid, UName: uname, Action: "update", Name: string(m.ID)}) |
|
c.JSON(map[string]int{ |
|
"code": 0, |
|
}, nil) |
|
} |
|
|
|
func addMaterialRelation(c *bm.Context) { |
|
var ( |
|
err error |
|
) |
|
m := &music.WithMaterialParam{} |
|
if err = c.BindWith(m, binding.Form); err != nil { |
|
return |
|
} |
|
exist := &music.WithMaterial{} |
|
//一期 sid tid 是 一一对应的关系 |
|
//check sid bind |
|
if err = svc.DBArchive.Where("state!=?", music.MusicDelete).Where("sid=?", m.Sid).First(&exist).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
if exist.ID > 0 { |
|
c.JSON(map[string]int64{ |
|
"id": exist.ID, |
|
}, nil) |
|
return |
|
} |
|
if err = svc.DBArchive.Create(m).Error; err != nil { |
|
log.Error("svc.addMaterialRelation error(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
uid, uname := getUIDName(c) |
|
svc.SendMusicLog(c, logcli.LogClientArchiveMusicTypeMaterialRelation, &music.LogParam{ID: m.ID, UID: uid, UName: uname, Action: "add", Name: string(m.ID)}) |
|
c.JSON(map[string]int64{ |
|
"id": m.ID, |
|
}, nil) |
|
} |
|
|
|
func batchAddMaterialRelation(c *bm.Context) { |
|
var ( |
|
err error |
|
sids []int64 |
|
) |
|
uid, uname := getUIDName(c) |
|
m := &music.BatchMusicWithMaterialParam{} |
|
if err = c.BindWith(m, binding.Form); err != nil { |
|
log.Error("svc.batchAddMaterialRelation bind error(%v)", err) |
|
return |
|
} |
|
//todo tid 必须是二级分类 |
|
if sids, err = xstr.SplitInts(m.SidList); err != nil { |
|
log.Error("svc.batchAddMaterialRelation SplitInts error(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
max := music.WithMaterial{} |
|
if err = svc.DBArchive.Model(&music.WithMaterial{}).Where("tid=?", m.Tid).Where("state!=?", music.MusicDelete).Order("music_with_material.index desc").First(&max).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
//sql err |
|
log.Error("svc.batchAddMaterialRelation max index error(%v)", err) |
|
return |
|
} |
|
thisIndex := max.Index |
|
i := int64(1) |
|
for _, sid := range sids { |
|
//check exists |
|
exists := music.WithMaterial{} |
|
if err = svc.DBArchive.Model(&music.WithMaterial{}).Where("sid=?", sid).Where("state!=?", music.MusicDelete).First(&exists).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("svc.batchAddMaterialRelation check exist sid tid (%d,%d) error(%v)", sid, m.Tid, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
if exists.ID > 0 { |
|
//覆盖 |
|
if err = svc.DBArchive.Model(&music.WithMaterial{}).Where("sid=?", sid).Where("state!=?", music.MusicDelete).Update("tid", m.Tid).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("svc.batchAddMaterialRelation Update error(%v)", err) |
|
continue |
|
} |
|
svc.SendMusicLog(c, logcli.LogClientArchiveMusicTypeMaterialRelation, &music.LogParam{ID: exists.Sid, UID: uid, UName: uname, Action: "update", Name: string(exists.Sid)}) |
|
} else { |
|
mp := &music.WithMaterialParam{Sid: sid, Tid: m.Tid, Index: thisIndex + i} |
|
if err = svc.DBArchive.Create(mp).Error; err != nil { |
|
log.Error("svc.batchAddMaterialRelation Create error(%v)", err) |
|
continue |
|
} |
|
i++ |
|
svc.SendMusicLog(c, logcli.LogClientArchiveMusicTypeMaterialRelation, &music.LogParam{ID: mp.Sid, UID: uid, UName: uname, Action: "add", Name: string(mp.Sid)}) |
|
} |
|
} |
|
c.JSON(map[string]int64{ |
|
"code": 0, |
|
}, nil) |
|
}
|
|
|