From e476abd2d3b8aa14f328e77a97ff66bb18b978ca Mon Sep 17 00:00:00 2001 From: jjxu <428192774@qq.com> Date: Thu, 6 Apr 2023 14:49:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E9=94=81=E7=94=A8=E6=88=B7=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=88=A4=E6=96=AD=EF=BC=8C=E6=B2=A1=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8D=E8=AE=A9=E8=A7=A3=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/internal/controller/artistInfo_user.go | 2 + cmd/internal/dao/artistInfo_user.go | 63 +++++++++++++++++++++- cmd/model/artist_operation_records.go | 5 ++ pkg/util/qrcode.go | 1 - 4 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 cmd/model/artist_operation_records.go diff --git a/cmd/internal/controller/artistInfo_user.go b/cmd/internal/controller/artistInfo_user.go index c99669d..dcf29a3 100644 --- a/cmd/internal/controller/artistInfo_user.go +++ b/cmd/internal/controller/artistInfo_user.go @@ -118,9 +118,11 @@ func (a *ArtistInfoUserProvider) FinishVerify(ctx context.Context, req *artistIn } return rep, nil } + func (a *ArtistInfoUserProvider) UserLock(ctx context.Context, req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLockRespond, err error) { return a.artistInfoLogic.UserLock(req) } + func (a *ArtistInfoUserProvider) CheckUserLock(ctx context.Context, req *artistInfoUser.CheckUserLockRequest) (rep *artistInfoUser.CheckUserLockRespond, err error) { fmt.Println("第一处") // backup := &artistinfoUser.GetUserInfoRespond{} diff --git a/cmd/internal/dao/artistInfo_user.go b/cmd/internal/dao/artistInfo_user.go index 7650588..ad44101 100644 --- a/cmd/internal/dao/artistInfo_user.go +++ b/cmd/internal/dao/artistInfo_user.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "sort" + "strings" "time" _ "dubbo.apache.org/dubbo-go/v3/imports" @@ -303,27 +304,39 @@ func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLock } rep.LockTime = now if !req.IsLock { - fmt.Println("122312312312331") + fmt.Println("进入解锁流程") + // 如果当前锁定状态下没有任何数据变动,则报错 + if hasChanged, _ := WhetherAnyChangedAfterLocked(thisUser.MgmtArtistUid); !hasChanged { + tx.Rollback() + err = errors.New("此用户在锁定后未作任何修改,无法解锁") + return + } // 解锁时与另外4个模块联动 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 } 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 } 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 } 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 } // 与画家宝的合同表进行联动 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 } } else { fmt.Println("else 更新最新上锁时间") 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 } fmt.Println("更新结束") @@ -333,6 +346,54 @@ func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLock 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) { rep = &artistInfoUser.GetUserRespond{} // service := &artist.UserUpdateInfoService{} diff --git a/cmd/model/artist_operation_records.go b/cmd/model/artist_operation_records.go new file mode 100644 index 0000000..82c3fcf --- /dev/null +++ b/cmd/model/artist_operation_records.go @@ -0,0 +1,5 @@ +package model + +type OperationRecord struct { + Model +} diff --git a/pkg/util/qrcode.go b/pkg/util/qrcode.go index 85d0537..251152d 100644 --- a/pkg/util/qrcode.go +++ b/pkg/util/qrcode.go @@ -25,7 +25,6 @@ func CreateQrCode(invitedCode, userName string) error { tmp, err := os.Open(QrCodePath) if err != nil { return err - } defer tmp.Close()