diff --git a/DockerBuildTest.bat b/DockerBuildTest.bat index 53bd56a..518ebcb 100644 --- a/DockerBuildTest.bat +++ b/DockerBuildTest.bat @@ -5,7 +5,7 @@ cd .. go build -ldflags "-s -w" -o ./build/artistinfo-dev ./cmd/app.go docker rmi artistinfo-dev docker rmi 121.229.45.214:9006/artistinfo-dev -docker build . -f .\DockerfileWindowsTest -t artistinfo-dev +docker build . -f .\DockerfileWindowsTest -t artistinfo-dev --build-arg BUILD_DATE=$(date) docker tag artistinfo-dev 121.229.45.214:9006/artistinfo-dev docker push 121.229.45.214:9006/artistinfo-dev pause \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 333bd0e..47b6d99 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ MAINTAINER GY "wangyitao@163.com" RUN go env -w GO111MODULE=on && \ go env -w GOPROXY=https://goproxy.cn,direct - + WORKDIR /app COPY fonchain-artistinfo /app/fonchain-artistinfo diff --git a/DockerfileSlim b/DockerfileSlim index c9108d9..2e1c48e 100644 --- a/DockerfileSlim +++ b/DockerfileSlim @@ -1,7 +1,10 @@ FROM busybox:glibc +ARG BUILD_DATE +ENV BUILD_DATE ${BUILD_DATE} COPY ./docs/Shanghai /usr/share/zoneinfo/Asia/Shanghai RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone + #ENV TZ Asia/Shanghai WORKDIR /app/main-client @@ -11,4 +14,6 @@ COPY ./conf/ /app/conf/ COPY ./conf/ ./conf/ WORKDIR /app/main-client/bin + +# 在容器启动时输出环境变量BUILD_DATE的值 CMD ["./mainServer"] \ No newline at end of file diff --git a/DockerfileWindowsTest b/DockerfileWindowsTest index 45e7697..a35c8b5 100644 --- a/DockerfileWindowsTest +++ b/DockerfileWindowsTest @@ -21,6 +21,9 @@ WORKDIR /build COPY ./build/artistinfo-dev /app/artistinfo-dev FROM alpine + +ARG BUILD_DATE +ENV BUILD_DATE ${BUILD_DATE} RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories RUN apk update --no-cache RUN apk add --no-cache ca-certificates diff --git a/cmd/app.go b/cmd/app.go index 0fb6b3d..1ebddb7 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "os" "dubbo.apache.org/dubbo-go/v3/config" @@ -27,5 +28,7 @@ func main() { if err := config.Load(); err != nil { panic(err) } + buildDate := os.Getenv("BUILD_DATE") + fmt.Println("镜像生成时间:", buildDate) select {} } 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 57fd7e8..755c1ae 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{} @@ -550,7 +611,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U datas = []model.User{} tx = db.DB.Model(model.User{}). Joins("LEFT JOIN real_name rn ON rn.id = sys_user.real_name_id"). - Preload("RealNameInfo").Where("sys_user.mgmt_artist_uid!=''") + Preload("RealNameInfo") //.Where("sys_user.mgmt_artist_uid!=''") ) if req.InvitedCode != "" { tx = tx.Where("invited_code = ?", req.InvitedCode) @@ -571,7 +632,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U }) } if req.IsArtist { - tx = tx.Where("mgmt_artist_uid !='' ") + tx = tx.Where("sys_user.mgmt_artist_uid !='' ") } if req.IsLock { tx = tx.Where("is_lock=true") 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/cmd/model/view_user.go b/cmd/model/view_user.go index 8b3edad..c3973e2 100644 --- a/cmd/model/view_user.go +++ b/cmd/model/view_user.go @@ -34,7 +34,7 @@ type UserView struct { IdcardFront string `json:"idcardFront" gorm:"column:idcard_front;comment:身份证反面"` JoinAssoTime string `json:"joinAssoTime" gorm:"column:join_asso_time;comment:入会时间"` InviterInviteCode string `json:"inviterInviteCode" gorm:"column:inviter_invite_code;comment:邀请人的邀请码"` - InviterRealName string `json:"inviterRealName" gorm:"column:inviter_name;comment:邀请人的真实姓名"` + InviterRealName string `json:"inviterRealName" gorm:"column:inviter_real_name;comment:邀请人的真实姓名"` CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;comment:"` UpdatedAt time.Time `json:"updatedAt" gorm:"column:updated_at;comment:"` DeletedAt int64 `json:"deletedAt" gorm:"column:deleted_at;comment:"` @@ -75,7 +75,7 @@ SELECT su.updated_at, su.deleted_at, inviter.invited_code inviter_invite_code, - inviter_rn.name inviter_name, + inviter_rn.name inviter_real_name, su.latest_lock_time, su.join_asso_time, su.certificate_num, diff --git a/conf/buildDate b/conf/buildDate new file mode 100644 index 0000000..e69de29 diff --git a/pkg/db/init.go b/pkg/db/init.go index 02307c0..12ec5ba 100644 --- a/pkg/db/init.go +++ b/pkg/db/init.go @@ -6,8 +6,6 @@ import ( "strings" "time" - "github.com/fonchain/fonchain-artistinfo/cmd/model/old" - "github.com/fonchain/fonchain-artistinfo/cmd/model" "github.com/fonchain/fonchain-artistinfo/pkg/m" "github.com/gin-gonic/gin" @@ -104,19 +102,19 @@ func Database(conn string) { func migration() { //自迁移模式 err := DB.AutoMigrate( - //&old.Bank{}, + // &old.Bank{}, + // &old.Artwork{}, + // &model.Contract{}, + // &model.SupplyInfo{}, + // &model.ExhVideo{}, + // &model.ExhExam{}, + // &old.ArtistInfo{}, + // &old.ArtworkState{}, + // &old.ArtworkBatch{}, &model.RealName{}, &model.User{}, &model.Invite{}, - &old.Artwork{}, - //&model.Contract{}, - //&model.SupplyInfo{}, - //&model.ExhVideo{}, - //&model.ExhExam{}, - &old.ArtistInfo{}, &model.UserInvited{}, - &old.ArtworkState{}, - &old.ArtworkBatch{}, &model.TempArtistInfo{}, &model.ArtworkLockRecord{}, &model.ArtshowVideoRecord{}, //画展视频记录 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()