123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package mcndao
- import (
- "time"
- adminmodel "go-common/app/admin/main/mcn/model"
- "go-common/app/interface/main/mcn/model"
- "go-common/app/interface/main/mcn/model/mcnmodel"
- "go-common/app/interface/main/mcn/tool/validate"
- "go-common/library/ecode"
- "go-common/library/log"
- "github.com/jinzhu/gorm"
- "github.com/pkg/errors"
- )
- var (
- signNotInStates = []model.MCNSignState{model.MCNSignStateOnDelete, model.MCNSignStateOnPreOpen, model.MCNSignStateOnExpire, model.MCNSignStateOnClear}
- // 从高到低,先找到的返回
- // 状态优先级:
- // 0: 封禁
- // 1: 签约
- // 2:
- statePriority = []model.MCNSignState{
- model.MCNSignStateOnBlock,
- model.MCNSignStateOnSign,
- model.MCNSignStateOnReject,
- model.MCNSignStateOnReview,
- model.MCNSignStateNoApply,
- }
- // mcnSign = mcnmodel.McnSign{}
- // mcnUp = mcnmodel.McnUp{}
- // UpPermissionApplyCannotApplyStates 在这此状态下,不能再申请改变Up主
- UpPermissionApplyCannotApplyStates = []adminmodel.MCNUPPermissionState{
- adminmodel.MCNUPPermissionStateNoAuthorize, // 待Up主同意
- adminmodel.MCNUPPermissionStateReview, // 待审核
- }
- // UpSignedStates up signed state
- UpSignedStates = []model.MCNUPState{
- model.MCNUPStateOnSign,
- model.MCNUPStateOnPreOpen,
- }
- )
- // GetMcnSignState .
- // mcnList, it's all mcn sign found with the state
- // state, the mcn's state of qualified, if multiple state found, will be return in priority
- func (d *Dao) GetMcnSignState(fields string, mcnMid int64) (mcn *mcnmodel.McnSign, state model.MCNSignState, err error) {
- var mcnList []*mcnmodel.McnSign
- if err = d.mcndb.Select(fields).Where("mcn_mid=? and state not in(?)", mcnMid, signNotInStates).Find(&mcnList).Error; err != nil {
- err = errors.WithStack(err)
- return
- }
- if len(mcnList) == 0 {
- log.Warn("mcn not exist, mcn id=%d", mcnMid)
- err = ecode.NothingFound
- return
- }
- var stateMap = make(map[model.MCNSignState]*mcnmodel.McnSign)
- for _, v := range mcnList {
- stateMap[model.MCNSignState(v.State)] = v
- }
- for _, v := range statePriority {
- if mcnValue, ok := stateMap[v]; ok {
- state = v
- mcn = mcnValue
- break
- }
- }
- return
- }
- // GetUpBind .
- func (d *Dao) GetUpBind(query interface{}, args ...interface{}) (upList []*mcnmodel.McnUp, err error) {
- if err = d.mcndb.Select("*").Where(query, args...).Find(&upList).Error; err != nil {
- if err == gorm.ErrRecordNotFound {
- err = nil
- } else {
- log.Error("fail to get bind up from db, err=%s", err)
- return
- }
- }
- return
- }
- // BindUp .
- func (d *Dao) BindUp(up *mcnmodel.McnUp, sign *mcnmodel.McnSign, arg *mcnmodel.McnBindUpApplyReq) (result *mcnmodel.McnUp, affectedRow int64, err error) {
- if arg == nil || sign == nil {
- return nil, 0, ecode.ServerErr
- }
- var db *gorm.DB
- if up == nil {
- up = &mcnmodel.McnUp{
- SignID: sign.ID,
- }
- }
- arg.CopyTo(up)
- // 如果绑定自己,那么直接接受
- if sign.McnMid == arg.UpMid {
- up.State = model.MCNUPStateOnSign
- // 签约周期为MCN的签约周期
- if up.BeginDate == 0 {
- up.BeginDate = sign.BeginDate
- }
- if up.EndDate == 0 {
- up.EndDate = sign.EndDate
- }
- var (
- now = time.Now()
- date = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
- )
- if up.BeginDate.Time().After(date) {
- up.State = model.MCNUPStateOnPreOpen
- }
- } else {
- // 清除状态为未授权
- up.State = model.MCNUPStateNoAuthorize
- if !validate.RegHTTPCheck.MatchString(arg.ContractLink) || !validate.RegHTTPCheck.MatchString(arg.UpAuthLink) {
- log.Error("contract link or up auth link is not http, arg=%v", arg)
- err = ecode.RequestErr
- return
- }
- }
- // 判断开始时间与结束时间
- if up.BeginDate == 0 || up.EndDate < up.BeginDate {
- log.Error("begin date is after end date, arg=%v", arg)
- err = ecode.MCNUpBindUpDateError
- return
- }
- db = d.mcndb.Save(up)
- affectedRow, err = db.RowsAffected, db.Error
- if err != nil {
- log.Error("save bind up info fail, err=%s, sign=%v", err, sign)
- err = ecode.ServerErr
- }
- result = up
- return
- }
- // UpdateBindUp .
- func (d *Dao) UpdateBindUp(values map[string]interface{}, query interface{}, args ...interface{}) (affectedRow int64, err error) {
- var db = d.mcndb.Table(mcnmodel.TableNameMcnUp).Where(query, args...).Updates(values)
- affectedRow, err = db.RowsAffected, db.Error
- if err != nil {
- log.Error("fail to update bind up, err=%s", err)
- }
- return
- }
- //UpConfirm up confrim
- func (d *Dao) UpConfirm(arg *mcnmodel.McnUpConfirmReq, state model.MCNUPState) (err error) {
- var tx = d.mcndb.Begin()
- defer func() {
- if r := recover(); r != nil || err != nil {
- tx.Rollback()
- }
- }()
- var changeMap = map[string]interface{}{
- "state": state,
- "state_change_time": time.Now(),
- }
- if arg.Choice {
- changeMap["confirm_time"] = time.Now()
- }
- err = tx.Table(mcnmodel.TableNameMcnUp).
- Where("id=? and up_mid=? and state=?", arg.BindID, arg.UpMid, model.MCNUPStateNoAuthorize).
- Updates(changeMap).Error
- if err != nil {
- log.Error("fail to update db, err=%s", err)
- return
- }
- // 表示同意
- if arg.Choice {
- // 驳回其他的绑定请求
- err = tx.Table(mcnmodel.TableNameMcnUp).
- Where("id !=? and up_mid=? and state=?", arg.BindID, arg.UpMid, model.MCNUPStateNoAuthorize).
- Updates(map[string]interface{}{
- "state": model.MCNUPStateOnRefuse,
- "state_change_time": time.Now(),
- }).Error
- if err != nil {
- log.Error("fail to update db, err=%s", err)
- return
- }
- }
- return tx.Commit().Error
- }
- // GetBindInfo .
- func (d *Dao) GetBindInfo(arg *mcnmodel.McnUpGetBindReq) (res *mcnmodel.McnGetBindReply, err error) {
- var result mcnmodel.McnGetBindReply
- err = d.mcndb.Raw(`select s.company_name, s.mcn_mid, u.up_auth_link, u.id as bind_id, u.permission as new_permission
- from mcn_up as u inner join mcn_sign as s
- on s.id = u.sign_id
- where u.id = ? and u.up_mid=? and u.state = 0;`, arg.BindID, arg.UpMid).Find(&result).Error
- res = &result
- return
- }
- //GetMcnOldInfo 获取冷却中的信息
- func (d *Dao) GetMcnOldInfo(mcnMid int64) (res *mcnmodel.McnSign, err error) {
- res = new(mcnmodel.McnSign)
- err = d.mcndb.Where("mcn_mid=? and state=?", mcnMid, model.MCNSignStateOnCooling).Order("id desc").Limit(1).Find(res).Error
- if err != nil && err != gorm.ErrRecordNotFound {
- log.Error("fail to get db, err=%s", err)
- return
- }
- return
- }
- //GetUpPermissionApply 从permission apply表中读取数据
- func (d *Dao) GetUpPermissionApply(fields string, query interface{}, args ...interface{}) (res []*mcnmodel.McnUpPermissionApply, err error) {
- err = d.mcndb.Select(fields).Where(query, args...).Find(&res).Error
- if err != nil {
- log.Error("fail to get db, err=%v", err)
- return
- }
- return
- }
- // GetUpPermissionBindInfo .
- func (d *Dao) GetUpPermissionBindInfo(arg *mcnmodel.McnUpGetBindReq) (res *mcnmodel.McnGetBindReply, err error) {
- var result mcnmodel.McnGetBindReply
- err = d.mcndb.Raw(`select s.company_name, u.mcn_mid, u.up_auth_link, u.id as bind_id, u.old_permission, u.new_permission
- from mcn_up_permission_apply as u inner join mcn_sign as s
- on s.id = u.sign_id
- where u.id = ? and u.up_mid=? and u.state = 0;`, arg.BindID, arg.UpMid).Find(&result).Error
- res = &result
- return
- }
- //UpPermissionConfirm up confrim
- func (d *Dao) UpPermissionConfirm(arg *mcnmodel.McnUpConfirmReq, state adminmodel.MCNUPPermissionState) (err error) {
- var db = d.mcndb
- var changeMap = map[string]interface{}{
- "state": state,
- }
- err = db.Table(mcnmodel.TableMcnUpPermissionApply).
- Where("id=? and up_mid=? and state=?", arg.BindID, arg.UpMid, adminmodel.MCNUPPermissionStateNoAuthorize).
- Updates(changeMap).Error
- if err != nil {
- log.Error("fail to update db, err=%s", err)
- return
- }
- return
- }
|