Merge branch 'dev' into jujin

This commit is contained in:
songchuang 2023-04-07 15:50:01 +08:00
commit 5d68278904
12 changed files with 95 additions and 19 deletions

View File

@ -5,7 +5,7 @@ cd ..
go build -ldflags "-s -w" -o ./build/artistinfo-dev ./cmd/app.go go build -ldflags "-s -w" -o ./build/artistinfo-dev ./cmd/app.go
docker rmi artistinfo-dev docker rmi artistinfo-dev
docker rmi 121.229.45.214:9006/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 tag artistinfo-dev 121.229.45.214:9006/artistinfo-dev
docker push 121.229.45.214:9006/artistinfo-dev docker push 121.229.45.214:9006/artistinfo-dev
pause pause

View File

@ -4,7 +4,7 @@ MAINTAINER GY "wangyitao@163.com"
RUN go env -w GO111MODULE=on && \ RUN go env -w GO111MODULE=on && \
go env -w GOPROXY=https://goproxy.cn,direct go env -w GOPROXY=https://goproxy.cn,direct
WORKDIR /app WORKDIR /app
COPY fonchain-artistinfo /app/fonchain-artistinfo COPY fonchain-artistinfo /app/fonchain-artistinfo

View File

@ -1,7 +1,10 @@
FROM busybox:glibc FROM busybox:glibc
ARG BUILD_DATE
ENV BUILD_DATE ${BUILD_DATE}
COPY ./docs/Shanghai /usr/share/zoneinfo/Asia/Shanghai COPY ./docs/Shanghai /usr/share/zoneinfo/Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#ENV TZ Asia/Shanghai #ENV TZ Asia/Shanghai
WORKDIR /app/main-client WORKDIR /app/main-client
@ -11,4 +14,6 @@ COPY ./conf/ /app/conf/
COPY ./conf/ ./conf/ COPY ./conf/ ./conf/
WORKDIR /app/main-client/bin WORKDIR /app/main-client/bin
# 在容器启动时输出环境变量BUILD_DATE的值
CMD ["./mainServer"] CMD ["./mainServer"]

View File

@ -21,6 +21,9 @@ WORKDIR /build
COPY ./build/artistinfo-dev /app/artistinfo-dev COPY ./build/artistinfo-dev /app/artistinfo-dev
FROM alpine 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 sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update --no-cache RUN apk update --no-cache
RUN apk add --no-cache ca-certificates RUN apk add --no-cache ca-certificates

View File

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"os"
"dubbo.apache.org/dubbo-go/v3/config" "dubbo.apache.org/dubbo-go/v3/config"
@ -27,5 +28,7 @@ func main() {
if err := config.Load(); err != nil { if err := config.Load(); err != nil {
panic(err) panic(err)
} }
buildDate := os.Getenv("BUILD_DATE")
fmt.Println("镜像生成时间:", buildDate)
select {} select {}
} }

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{}
@ -550,7 +611,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
datas = []model.User{} datas = []model.User{}
tx = db.DB.Model(model.User{}). tx = db.DB.Model(model.User{}).
Joins("LEFT JOIN real_name rn ON rn.id = sys_user.real_name_id"). 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 != "" { if req.InvitedCode != "" {
tx = tx.Where("invited_code = ?", req.InvitedCode) tx = tx.Where("invited_code = ?", req.InvitedCode)
@ -571,7 +632,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
}) })
} }
if req.IsArtist { if req.IsArtist {
tx = tx.Where("mgmt_artist_uid !='' ") tx = tx.Where("sys_user.mgmt_artist_uid !='' ")
} }
if req.IsLock { if req.IsLock {
tx = tx.Where("is_lock=true") tx = tx.Where("is_lock=true")

View File

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

View File

@ -34,7 +34,7 @@ type UserView struct {
IdcardFront string `json:"idcardFront" gorm:"column:idcard_front;comment:身份证反面"` IdcardFront string `json:"idcardFront" gorm:"column:idcard_front;comment:身份证反面"`
JoinAssoTime string `json:"joinAssoTime" gorm:"column:join_asso_time;comment:入会时间"` JoinAssoTime string `json:"joinAssoTime" gorm:"column:join_asso_time;comment:入会时间"`
InviterInviteCode string `json:"inviterInviteCode" gorm:"column:inviter_invite_code;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:"` CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;comment:"`
UpdatedAt time.Time `json:"updatedAt" gorm:"column:updated_at;comment:"` UpdatedAt time.Time `json:"updatedAt" gorm:"column:updated_at;comment:"`
DeletedAt int64 `json:"deletedAt" gorm:"column:deleted_at;comment:"` DeletedAt int64 `json:"deletedAt" gorm:"column:deleted_at;comment:"`
@ -75,7 +75,7 @@ SELECT
su.updated_at, su.updated_at,
su.deleted_at, su.deleted_at,
inviter.invited_code inviter_invite_code, inviter.invited_code inviter_invite_code,
inviter_rn.name inviter_name, inviter_rn.name inviter_real_name,
su.latest_lock_time, su.latest_lock_time,
su.join_asso_time, su.join_asso_time,
su.certificate_num, su.certificate_num,

0
conf/buildDate Normal file
View File

View File

@ -6,8 +6,6 @@ import (
"strings" "strings"
"time" "time"
"github.com/fonchain/fonchain-artistinfo/cmd/model/old"
"github.com/fonchain/fonchain-artistinfo/cmd/model" "github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pkg/m" "github.com/fonchain/fonchain-artistinfo/pkg/m"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -104,19 +102,19 @@ func Database(conn string) {
func migration() { func migration() {
//自迁移模式 //自迁移模式
err := DB.AutoMigrate( 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.RealName{},
&model.User{}, &model.User{},
&model.Invite{}, &model.Invite{},
&old.Artwork{},
//&model.Contract{},
//&model.SupplyInfo{},
//&model.ExhVideo{},
//&model.ExhExam{},
&old.ArtistInfo{},
&model.UserInvited{}, &model.UserInvited{},
&old.ArtworkState{},
&old.ArtworkBatch{},
&model.TempArtistInfo{}, &model.TempArtistInfo{},
&model.ArtworkLockRecord{}, &model.ArtworkLockRecord{},
&model.ArtshowVideoRecord{}, //画展视频记录 &model.ArtshowVideoRecord{}, //画展视频记录

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()