|
@@ -290,35 +290,42 @@ func (channel *Channel) Delete() error {
|
|
|
|
|
|
|
|
var channelStatusLock sync.Mutex
|
|
var channelStatusLock sync.Mutex
|
|
|
|
|
|
|
|
-func UpdateChannelStatusById(id int, status int, reason string) {
|
|
|
|
|
|
|
+func UpdateChannelStatusById(id int, status int, reason string) bool {
|
|
|
if common.MemoryCacheEnabled {
|
|
if common.MemoryCacheEnabled {
|
|
|
channelStatusLock.Lock()
|
|
channelStatusLock.Lock()
|
|
|
|
|
+ defer channelStatusLock.Unlock()
|
|
|
|
|
+
|
|
|
channelCache, _ := CacheGetChannel(id)
|
|
channelCache, _ := CacheGetChannel(id)
|
|
|
// 如果缓存渠道存在,且状态已是目标状态,直接返回
|
|
// 如果缓存渠道存在,且状态已是目标状态,直接返回
|
|
|
if channelCache != nil && channelCache.Status == status {
|
|
if channelCache != nil && channelCache.Status == status {
|
|
|
- channelStatusLock.Unlock()
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ return false
|
|
|
}
|
|
}
|
|
|
// 如果缓存渠道不存在(说明已经被禁用),且要设置的状态不为启用,直接返回
|
|
// 如果缓存渠道不存在(说明已经被禁用),且要设置的状态不为启用,直接返回
|
|
|
if channelCache == nil && status != common.ChannelStatusEnabled {
|
|
if channelCache == nil && status != common.ChannelStatusEnabled {
|
|
|
- channelStatusLock.Unlock()
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ return false
|
|
|
}
|
|
}
|
|
|
CacheUpdateChannelStatus(id, status)
|
|
CacheUpdateChannelStatus(id, status)
|
|
|
- channelStatusLock.Unlock()
|
|
|
|
|
}
|
|
}
|
|
|
err := UpdateAbilityStatus(id, status == common.ChannelStatusEnabled)
|
|
err := UpdateAbilityStatus(id, status == common.ChannelStatusEnabled)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
common.SysError("failed to update ability status: " + err.Error())
|
|
common.SysError("failed to update ability status: " + err.Error())
|
|
|
|
|
+ return false
|
|
|
}
|
|
}
|
|
|
channel, err := GetChannelById(id, true)
|
|
channel, err := GetChannelById(id, true)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
// find channel by id error, directly update status
|
|
// find channel by id error, directly update status
|
|
|
- err = DB.Model(&Channel{}).Where("id = ?", id).Update("status", status).Error
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- common.SysError("failed to update channel status: " + err.Error())
|
|
|
|
|
|
|
+ result := DB.Model(&Channel{}).Where("id = ?", id).Update("status", status)
|
|
|
|
|
+ if result.Error != nil {
|
|
|
|
|
+ common.SysError("failed to update channel status: " + result.Error.Error())
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ if result.RowsAffected == 0 {
|
|
|
|
|
+ return false
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ if channel.Status == status {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
// find channel by id success, update status and other info
|
|
// find channel by id success, update status and other info
|
|
|
info := channel.GetOtherInfo()
|
|
info := channel.GetOtherInfo()
|
|
|
info["status_reason"] = reason
|
|
info["status_reason"] = reason
|
|
@@ -328,9 +335,10 @@ func UpdateChannelStatusById(id int, status int, reason string) {
|
|
|
err = channel.Save()
|
|
err = channel.Save()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
common.SysError("failed to update channel status: " + err.Error())
|
|
common.SysError("failed to update channel status: " + err.Error())
|
|
|
|
|
+ return false
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ return true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func EnableChannelByTag(tag string) error {
|
|
func EnableChannelByTag(tag string) error {
|