解锁用户增加判断,没修改数据不让解锁

This commit is contained in:
徐俊杰 2023-04-06 14:49:54 +08:00
parent 9a7912b28a
commit e476abd2d3
4 changed files with 69 additions and 2 deletions

View File

@ -118,9 +118,11 @@ func (a *ArtistInfoUserProvider) FinishVerify(ctx context.Context, req *artistIn
} }
return rep, nil return rep, nil
} }
func (a *ArtistInfoUserProvider) UserLock(ctx context.Context, req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLockRespond, err error) { func (a *ArtistInfoUserProvider) UserLock(ctx context.Context, req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLockRespond, err error) {
return a.artistInfoLogic.UserLock(req) return a.artistInfoLogic.UserLock(req)
} }
func (a *ArtistInfoUserProvider) CheckUserLock(ctx context.Context, req *artistInfoUser.CheckUserLockRequest) (rep *artistInfoUser.CheckUserLockRespond, err error) { func (a *ArtistInfoUserProvider) CheckUserLock(ctx context.Context, req *artistInfoUser.CheckUserLockRequest) (rep *artistInfoUser.CheckUserLockRespond, err error) {
fmt.Println("第一处") fmt.Println("第一处")
// backup := &artistinfoUser.GetUserInfoRespond{} // backup := &artistinfoUser.GetUserInfoRespond{}

View File

@ -6,6 +6,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"sort" "sort"
"strings"
"time" "time"
_ "dubbo.apache.org/dubbo-go/v3/imports" _ "dubbo.apache.org/dubbo-go/v3/imports"
@ -303,27 +304,39 @@ func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLock
} }
rep.LockTime = now rep.LockTime = now
if !req.IsLock { if !req.IsLock {
fmt.Println("122312312312331") fmt.Println("进入解锁流程")
// 如果当前锁定状态下没有任何数据变动,则报错
if hasChanged, _ := WhetherAnyChangedAfterLocked(thisUser.MgmtArtistUid); !hasChanged {
tx.Rollback()
err = errors.New("此用户在锁定后未作任何修改,无法解锁")
return
}
// 解锁时与另外4个模块联动 // 解锁时与另外4个模块联动
if err = tx.Model(model.ArtworkLockRecord{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil { if err = tx.Model(model.ArtworkLockRecord{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil {
tx.Rollback()
return nil, err return nil, err
} }
if err = tx.Model(model.ArtshowArtistSupplement{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil { if err = tx.Model(model.ArtshowArtistSupplement{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil {
tx.Rollback()
return nil, err return nil, err
} }
if err = tx.Model(model.ArtshowArtistIndex{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil { if err = tx.Model(model.ArtshowArtistIndex{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil {
tx.Rollback()
return nil, err return nil, err
} }
if err = tx.Model(model.ArtshowVideoRecord{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil { if err = tx.Model(model.ArtshowVideoRecord{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil {
tx.Rollback()
return nil, err return nil, err
} }
// 与画家宝的合同表进行联动 // 与画家宝的合同表进行联动
if err = tx.Model(model.Contract{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil { if err = tx.Model(model.Contract{}).Where("artist_uid = ? AND status =2", thisUser.MgmtArtistUid).Update("status", 3).Error; err != nil {
tx.Rollback()
return nil, err return nil, err
} }
} else { } else {
fmt.Println("else 更新最新上锁时间") fmt.Println("else 更新最新上锁时间")
if err = tx.Model(model.User{}).Where("mgmt_artist_uid = ?", thisUser.MgmtArtistUid).Update("latest_lock_time", now).Error; err != nil { if err = tx.Model(model.User{}).Where("mgmt_artist_uid = ?", thisUser.MgmtArtistUid).Update("latest_lock_time", now).Error; err != nil {
tx.Rollback()
return nil, err return nil, err
} }
fmt.Println("更新结束") fmt.Println("更新结束")
@ -333,6 +346,54 @@ func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLock
return rep, nil return rep, nil
} }
// 简单判断锁定后数据是否有新增
func WhetherAnyChangedAfterLocked(artistUid string) (changed bool, err error) {
//查询锁定时间
var lockTime string
if err = db.DB.Model(model.User{}).Where("mgmt_artist_uid = ?", artistUid).Pluck("latest_lock_time", &lockTime).Error; err != nil {
return
}
//如果画作更新时间大于锁定时间,直接返回true
var artworks []model.ArtworkLockRecord
db.DB.Where("artist_uid = ? AND lock_time = ? ", artistUid, lockTime).Find(&artworks)
var lockTimeT, _ = stime.StringToTime(lockTime)
for _, a := range artworks {
if a.UpdatedAt.After(*lockTimeT) {
changed = true
return
}
}
//如果补充信息有新增则直接返回true
var sql = `
SELECT
u.mgmt_artist_uid
,u.latest_lock_time
,(SELECT COUNT(1) FROM artshow_artist_index WHERE artist_uid = '{{artistUid}}' AND lock_time = '{{lockTime}}' AND deleted_at = 0) as artist_index_count
,(SELECT COUNT(1) FROM artshow_artist_supplement WHERE artist_uid = '{{artistUid}}' AND lock_time = '{{lockTime}}' AND deleted_at = 0) as artist_supplement_count
,(SELECT COUNT(1) FROM artshow_video_record WHERE artist_uid = '{{artistUid}}' AND lock_time = '{{lockTime}}' AND deleted_at = 0) as video_count
,(SELECT COUNT(1) FROM contract WHERE artist_uid = '{{artistUid}}' AND lock_time = '{{lockTime}}' AND deleted_at = 0) as contract_count
FROM sys_user u
WHERE u.mgmt_artist_uid ='{{artistUid}}' AND u.deleted_at = 0
`
sql = strings.Replace(sql, "{{artistUid}}", artistUid, -1)
sql = strings.Replace(sql, "{{lockTime}}", lockTime, -1)
var data struct {
MgmtArtistUid string `gorm:"column:mgmt_artist_uid"`
LatestLockTime string `gorm:"column:latest_lock_time"`
ArtistIndexCount int `gorm:"column:artist_index_count"`
ArtistSupplementCount int `gorm:"column:artist_supplement_count"`
VideoCount int `gorm:"column:video_count"`
ContractCount int `gorm:"column:contract_count"`
}
if err = db.DB.Debug().Raw(sql).Find(&data).Error; err != nil {
return
}
if data.ArtistIndexCount > 0 || data.ArtistSupplementCount > 0 || data.VideoCount > 0 || data.ContractCount > 0 {
return true, nil
}
return false, nil
}
func CheckInvitedCode(req *artistInfoUser.CheckInvitedCodeRequest) (rep *artistInfoUser.GetUserRespond, err error) { func CheckInvitedCode(req *artistInfoUser.CheckInvitedCodeRequest) (rep *artistInfoUser.GetUserRespond, err error) {
rep = &artistInfoUser.GetUserRespond{} rep = &artistInfoUser.GetUserRespond{}
// service := &artist.UserUpdateInfoService{} // service := &artist.UserUpdateInfoService{}

View File

@ -0,0 +1,5 @@
package model
type OperationRecord struct {
Model
}

View File

@ -25,7 +25,6 @@ func CreateQrCode(invitedCode, userName string) error {
tmp, err := os.Open(QrCodePath) tmp, err := os.Open(QrCodePath)
if err != nil { if err != nil {
return err return err
} }
defer tmp.Close() defer tmp.Close()