Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hilo-group
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hujiebin
hilo-group
Commits
4e9c0510
Commit
4e9c0510
authored
Apr 24, 2023
by
chenweijian
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/group_power_rank_act' into 'master'
家族月度活动 See merge request
!20
parents
8dcec28d
711aa915
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
442 additions
and
87 deletions
+442
-87
cron.go
cron/cron.go
+1
-0
group_power_month_act.go
cron/group_cron/group_power_month_act.go
+22
-0
group_rank.go
cv/group_power_cv/group_rank.go
+12
-2
groupPower.go
domain/model/groupPower_m/groupPower.go
+30
-0
group_rank.go
domain/model/groupPower_m/group_rank.go
+8
-3
group_star.go
domain/model/groupPower_m/group_star.go
+2
-2
group_power.go
domain/service/group_power_s/group_power.go
+287
-0
group_power_month_act.sql
mysql/group_power_month_act.sql
+15
-0
group_rank.go
route/group_power_r/group_rank.go
+52
-80
router.go
route/router.go
+1
-0
group_power_test.go
test/group_power_test.go
+12
-0
No files found.
cron/cron.go
View file @
4e9c0510
...
...
@@ -15,4 +15,5 @@ func Init() {
gift_cron
.
GiftRemark
()
// 礼物消息补偿
mic_cron
.
OnMicCheck
()
// 检查上麦
group_cron
.
GroupPowerExpClear
()
// 清理家族经验/等级
group_cron
.
GroupPowerMonthRankAct
()
}
cron/group_cron/group_power_month_act.go
0 → 100644
View file @
4e9c0510
package
group_cron
import
(
"git.hilo.cn/hilo-common/domain"
"github.com/robfig/cron"
"hilo-group/domain/service/group_power_s"
)
// 家族贡献月度排行榜发奖
func
GroupPowerMonthRankAct
()
{
c
:=
cron
.
New
()
// 每月1号0:01结算发奖
spec
:=
"0 1 0 1 * ?"
_
=
c
.
AddFunc
(
spec
,
func
()
{
var
model
=
domain
.
CreateModelNil
()
if
err
:=
group_power_s
.
CalcGroupPowerMonthRankAct
(
model
);
err
!=
nil
{
model
.
Log
.
Errorf
(
"GroupPowerMonthRankAct fail:%v"
,
err
)
}
})
c
.
Start
()
}
cv/group_power_cv/group_rank.go
View file @
4e9c0510
...
...
@@ -40,10 +40,20 @@ type CvGroupPowerRank struct {
Items
[]
CvGroupPowerRankData
`json:"items"`
// 列表
}
// 家族月度排行活动榜单
type
CvGroupPowerRankMontAct
struct
{
MyGroupPower
*
CvGroupPowerRankData
`json:"myGroupPower"`
// 我的家族排名
Items
[]
CvGroupPowerRankData
`json:"items"`
// 列表
MyGroupPowerLast
*
CvGroupPowerRankData
`json:"myGroupPowerLast"`
// 我的家族排名(上月)
ItemsLast
[]
CvGroupPowerRankData
`json:"itemsLast"`
// 列表(上月)
LeftSecond
int64
`json:"leftSecond"`
// 活动倒计时
}
type
CvGroupPowerRankData
struct
{
CvGroupPowerBase
`json:",inline"`
CvGroupPowerGrade
`json:",inline"`
Rank
int
`json:"rank"`
// 排名
Rank
int
`json:"rank"`
// 排名
StarList
[]
*
CvGroupPowerStarData
`json:"starList"`
// 家族贡献top10
}
// 家族之星
...
...
@@ -108,6 +118,6 @@ var GroupPowerGradePrivilegeNum = map[groupPower_e.GroupPowerGrade][]CvPrivilege
{
groupPower_e
.
GroupPowerPrivilegeNameplate
,
1
,
"https://image.whoisamy.shop/hilo/resource/family/nameplate_yellow.png"
},
{
groupPower_e
.
GroupPowerPrivilegeMedal
,
1
,
"https://image.whoisamy.shop/hilo/resource/family/privilege_yellow.png"
},
{
groupPower_e
.
GroupPowerPrivilegeNameplateEdit
,
1
,
"https://image.whoisamy.shop/hilo/resource/family/edit_yellow.png"
},
{
groupPower_e
.
GroupPowerPrivilegeNameplateHeadwear
,
1
,
"https://image.whoisamy.shop/hilo/resource/family/headwear_yellow.png"
},
{
groupPower_e
.
GroupPowerPrivilegeNameplateHeadwear
,
1
,
"https://image.whoisamy.shop/hilo/resource/family/headwear_yellow.png"
},
},
}
domain/model/groupPower_m/groupPower.go
View file @
4e9c0510
...
...
@@ -43,6 +43,16 @@ type GroupPowerUser struct {
Role
groupPower_e
.
GroupPowerUserRole
}
type
ActFamilyMonthRankLog
struct
{
Id
uint64
`json:"id"`
Period
string
`json:"period"`
FamilyId
uint64
`json:"family_id"`
RankFamily
int
`json:"rank_family"`
RankUser
int
`json:"rank_user"`
UserId
uint64
`json:"user_id"`
Award
string
`json:"award"`
}
func
(
gpu
*
GroupPowerUser
)
Get
(
db
*
gorm
.
DB
)
([]
GroupPowerUser
,
error
)
{
rows
:=
make
([]
GroupPowerUser
,
0
)
err
:=
db
.
Where
(
gpu
)
.
Find
(
&
rows
)
.
Error
...
...
@@ -64,6 +74,22 @@ func GetPowerOwner(db *gorm.DB, powerId uint64) (uint64, error) {
return
records
[
0
]
.
UserId
,
nil
}
func
GetPowerOwnerMap
(
model
*
domain
.
Model
,
powerIds
[]
uint64
)
(
map
[
uint64
]
uint64
,
error
)
{
rows
:=
make
([]
GroupPowerUser
,
0
)
if
len
(
powerIds
)
>
0
{
if
err
:=
model
.
DB
()
.
Model
(
&
GroupPowerUser
{})
.
Where
(
"group_power_id IN ? and role = ?"
,
powerIds
,
groupPower_e
.
GroupPowerUserRoleMgr
)
.
Find
(
&
rows
)
.
Error
;
err
!=
nil
{
return
nil
,
err
}
}
result
:=
make
(
map
[
uint64
]
uint64
,
0
)
for
_
,
i
:=
range
rows
{
result
[
i
.
GroupPowerId
]
=
i
.
UserId
}
return
result
,
nil
}
func
GetMyPowerId
(
db
*
gorm
.
DB
,
userId
uint64
)
(
uint64
,
error
)
{
gpu
:=
GroupPowerUser
{
UserId
:
userId
,
Role
:
groupPower_e
.
GroupPowerUserRoleMgr
}
records
,
err
:=
gpu
.
Get
(
db
)
...
...
@@ -707,3 +733,7 @@ func BatchGetGroupPowerUser(model *domain.Model, userIds []mysql.ID) (map[mysql.
}
return
res
,
nil
}
func
CreateActFamilyMonthRankLog
(
model
*
domain
.
Model
,
list
[]
*
ActFamilyMonthRankLog
)
error
{
return
model
.
DB
()
.
CreateInBatches
(
&
list
,
50
)
.
Error
}
domain/model/groupPower_m/group_rank.go
View file @
4e9c0510
...
...
@@ -4,6 +4,7 @@ import (
"git.hilo.cn/hilo-common/domain"
"git.hilo.cn/hilo-common/resource/mysql"
"gorm.io/gorm"
"hilo-group/_const/enum/groupPower_e"
)
type
GroupPowerExpRank
struct
{
...
...
@@ -14,10 +15,14 @@ type GroupPowerExpRank struct {
// 获取家族经验排行榜
// param limit: 排行榜人数
func
GetGroupPowerExpRank
(
model
*
domain
.
Model
,
beginDate
,
endDate
string
,
limit
int
)
([]
GroupPowerExpRank
,
error
)
{
func
GetGroupPowerExpRank
(
model
*
domain
.
Model
,
beginDate
,
endDate
string
,
limit
int
,
gpStatus
groupPower_e
.
GroupPowerStatus
)
([]
GroupPowerExpRank
,
error
)
{
var
res
[]
GroupPowerExpRank
if
err
:=
model
.
DB
()
.
Table
(
"group_power_day_exp"
)
.
Select
(
"group_power_id,SUM(exp) as exp"
)
.
Where
(
"date BETWEEN ? AND ?"
,
beginDate
,
endDate
)
.
Group
(
"group_power_id"
)
.
Order
(
"exp DESC"
)
.
Limit
(
limit
)
.
Find
(
&
res
)
.
Error
;
err
!=
nil
{
db
:=
model
.
DB
()
.
Table
(
"group_power_day_exp gpd"
)
.
Select
(
"gpd.group_power_id,SUM(gpd.exp) as exp"
)
.
Where
(
"gpd.date BETWEEN ? AND ?"
,
beginDate
,
endDate
)
if
gpStatus
>
0
{
db
=
db
.
Joins
(
"left join group_power gp on gpd.group_power_id = gp.id"
)
.
Where
(
"status = ?"
,
gpStatus
)
}
if
err
:=
db
.
Group
(
"gpd.group_power_id"
)
.
Order
(
"exp DESC"
)
.
Limit
(
limit
)
.
Find
(
&
res
)
.
Error
;
err
!=
nil
{
model
.
Log
.
Errorf
(
"GetGroupPowerExpRank fail:%v"
,
err
)
return
res
,
err
}
...
...
domain/model/groupPower_m/group_star.go
View file @
4e9c0510
...
...
@@ -104,9 +104,9 @@ func GetGroupPowerMonthStar(model *domain.Model, groupPowerId, userId mysql.ID,
}
// 获取家族之星排行
func
GetGroupPowerMonthStarRank
(
model
*
domain
.
Model
,
groupPowerId
mysql
.
ID
,
_type
groupPower_e
.
GroupPowerStarType
,
offset
,
limit
int
)
([]
*
GroupPowerMonthStar
,
error
)
{
func
GetGroupPowerMonthStarRank
(
model
*
domain
.
Model
,
groupPowerId
mysql
.
ID
,
_type
groupPower_e
.
GroupPowerStarType
,
offset
,
limit
int
,
month
string
)
([]
*
GroupPowerMonthStar
,
error
)
{
var
res
[]
*
GroupPowerMonthStar
month
:=
time
.
Now
()
.
Format
(
"200601"
)
//
month := time.Now().Format("200601")
if
err
:=
model
.
DB
()
.
Model
(
GroupPowerMonthStar
{})
.
Where
(
"month = ? AND group_power_id = ? AND `type` = ?"
,
month
,
groupPowerId
,
_type
)
.
Order
(
"score desc"
)
.
Offset
(
offset
)
.
Limit
(
limit
)
.
Find
(
&
res
)
.
Error
;
err
!=
nil
{
model
.
Log
.
Errorf
(
"GetGroupPowerMonthStarRank fail:%v"
,
err
)
...
...
domain/service/group_power_s/group_power.go
View file @
4e9c0510
package
group_power_s
import
(
"encoding/json"
"git.hilo.cn/hilo-common/_const/enum/diamond_e"
"git.hilo.cn/hilo-common/domain"
"git.hilo.cn/hilo-common/mycontext"
"git.hilo.cn/hilo-common/resource/mysql"
"git.hilo.cn/hilo-common/txop/award_tx"
"git.hilo.cn/hilo-common/utils"
"github.com/jinzhu/now"
"hilo-group/_const/enum/groupPower_e"
"hilo-group/_const/enum/msg_e"
"hilo-group/cv/group_power_cv"
"hilo-group/cv/user_cv"
"hilo-group/domain/event/group_power_ev"
"hilo-group/domain/model/groupPower_m"
"hilo-group/domain/model/user_m"
"hilo-group/myerr/bizerr"
"time"
)
type
GroupPowerService
struct
{
...
...
@@ -66,3 +78,278 @@ func (s *GroupPowerService) GroupPowerUserLeave(groupPowerId mysql.ID, userId my
})
return
remainSeconds
,
err
}
func
GetGroupPowerRankResp
(
model
*
domain
.
Model
,
beginDate
,
endDate
string
,
userId
uint64
,
gpStatus
groupPower_e
.
GroupPowerStatus
)
(
response
group_power_cv
.
CvGroupPowerRank
,
err
error
)
{
rank
,
err
:=
groupPower_m
.
GetGroupPowerExpRank
(
model
,
beginDate
,
endDate
,
30
,
gpStatus
)
if
err
!=
nil
{
return
}
var
ids
[]
mysql
.
ID
for
_
,
g
:=
range
rank
{
ids
=
append
(
ids
,
g
.
GroupPowerId
)
}
var
myGroupPower
*
groupPower_m
.
GroupPowerUser
if
userId
>
0
{
myGroupPower
,
err
=
groupPower_m
.
GetGroupPowerUserOrNil
(
model
,
userId
)
if
err
!=
nil
{
return
}
}
if
myGroupPower
!=
nil
{
ids
=
append
(
ids
,
myGroupPower
.
GroupPowerId
)
}
grades
,
err
:=
groupPower_m
.
MGetGroupPowerGrade
(
model
,
ids
)
if
err
!=
nil
{
return
}
groupPowers
,
err
:=
groupPower_m
.
MGetGroupPowerInfoMap
(
model
,
ids
)
if
err
!=
nil
{
return
}
if
myGroupPower
!=
nil
{
myGroupPowerRank
,
err
:=
groupPower_m
.
GetMyGroupPowerExpRank
(
model
,
beginDate
,
endDate
,
myGroupPower
.
GroupPowerId
)
if
err
!=
nil
{
return
response
,
err
}
response
.
MyGroupPower
=
&
group_power_cv
.
CvGroupPowerRankData
{
CvGroupPowerBase
:
group_power_cv
.
CvGroupPowerBase
{
Id
:
myGroupPower
.
GroupPowerId
,
Icon
:
groupPowers
[
myGroupPower
.
GroupPowerId
]
.
Icon
,
Name
:
groupPowers
[
myGroupPower
.
GroupPowerId
]
.
Name
,
Nameplate
:
groupPowers
[
myGroupPower
.
GroupPowerId
]
.
Nameplate
,
},
CvGroupPowerGrade
:
group_power_cv
.
CvGroupPowerGrade
{
Grade
:
grades
[
myGroupPower
.
GroupPowerId
]
.
Grade
,
Exp
:
myGroupPowerRank
.
Exp
,
},
Rank
:
0
,
}
}
for
_
,
v
:=
range
rank
{
if
response
.
MyGroupPower
!=
nil
&&
v
.
GroupPowerId
==
response
.
MyGroupPower
.
Id
{
response
.
MyGroupPower
.
Rank
=
v
.
Rank
}
response
.
Items
=
append
(
response
.
Items
,
group_power_cv
.
CvGroupPowerRankData
{
CvGroupPowerBase
:
group_power_cv
.
CvGroupPowerBase
{
Id
:
v
.
GroupPowerId
,
Icon
:
groupPowers
[
v
.
GroupPowerId
]
.
Icon
,
Name
:
groupPowers
[
v
.
GroupPowerId
]
.
Name
,
Nameplate
:
groupPowers
[
v
.
GroupPowerId
]
.
Nameplate
,
},
CvGroupPowerGrade
:
group_power_cv
.
CvGroupPowerGrade
{
Grade
:
grades
[
v
.
GroupPowerId
]
.
Grade
,
Exp
:
v
.
Exp
,
},
Rank
:
v
.
Rank
,
})
}
if
response
.
MyGroupPower
!=
nil
&&
response
.
MyGroupPower
.
Rank
==
0
{
response
.
MyGroupPower
.
Rank
=
31
// 客户端统一显示30+
}
return
response
,
nil
}
func
GetGroupPowerStar
(
model
*
domain
.
Model
,
groupPowerId
mysql
.
ID
,
_type
groupPower_e
.
GroupPowerStarType
,
offset
,
limit
int
,
month
string
)
([]
*
group_power_cv
.
CvGroupPowerStarData
,
error
)
{
rank
,
err
:=
groupPower_m
.
GetGroupPowerMonthStarRank
(
model
,
groupPowerId
,
_type
,
offset
,
limit
,
month
)
if
err
!=
nil
{
return
nil
,
err
}
//var response []group_power_cv.CvGroupPowerStarData
response
:=
make
([]
*
group_power_cv
.
CvGroupPowerStarData
,
0
)
var
userIds
[]
mysql
.
ID
for
_
,
row
:=
range
rank
{
userIds
=
append
(
userIds
,
row
.
UserId
)
}
users
,
err
:=
user_m
.
GetUserMapByIds
(
model
,
userIds
)
for
_
,
row
:=
range
rank
{
user
:=
users
[
row
.
UserId
]
score
:=
row
.
Score
if
_type
==
groupPower_e
.
GroupPowerStarTypeActive
{
score
=
score
/
60
}
if
score
<=
0
{
continue
}
response
=
append
(
response
,
&
group_power_cv
.
CvGroupPowerStarData
{
User
:
user_cv
.
CvUserTiny
{
Id
:
user
.
ID
,
ExternalId
:
user
.
ExternalId
,
Code
:
user
.
Code
,
Nick
:
user
.
Nick
,
Avatar
:
user
.
Avatar
,
},
Score
:
score
,
})
}
return
response
,
nil
}
func
CalcGroupPowerMonthRankAct
(
model
*
domain
.
Model
)
error
{
lastDayTime
:=
time
.
Now
()
.
AddDate
(
0
,
0
,
-
1
)
_now
:=
now
.
New
(
lastDayTime
)
calcMonth
:=
_now
.
BeginningOfMonth
()
.
Format
(
utils
.
MONTH_FORMAT
)
beginDate
,
endDate
:=
_now
.
BeginningOfMonth
()
.
Format
(
"2006-01-02"
),
_now
.
EndOfMonth
()
.
Format
(
"2006-01-02"
)
return
DoCalcGroupPowerMonthRankAct
(
model
,
calcMonth
,
beginDate
,
endDate
)
}
func
DoCalcGroupPowerMonthRankAct
(
model
*
domain
.
Model
,
calcMonth
,
beginDate
,
endDate
string
)
error
{
// 计算获奖
response
,
err
:=
GetGroupPowerRankResp
(
model
,
beginDate
,
endDate
,
0
,
groupPower_e
.
GroupPowerUserHas
)
if
err
!=
nil
{
return
err
}
powerIds
:=
make
([]
uint64
,
0
,
len
(
response
.
Items
))
for
i
,
v
:=
range
response
.
Items
{
powerIds
=
append
(
powerIds
,
v
.
Id
)
response
.
Items
[
i
]
.
StarList
,
err
=
GetGroupPowerStar
(
model
,
v
.
Id
,
groupPower_e
.
GroupPowerStarTypeFamous
,
0
,
10
,
time
.
Now
()
.
Format
(
utils
.
COMPACT_MONTH_FORMAT
))
if
err
!=
nil
{
return
err
}
}
// 奖励、日志
awardList
,
logList
,
err
:=
getAwardAndLogList
(
model
,
powerIds
,
response
.
Items
,
calcMonth
)
if
err
!=
nil
{
return
err
}
return
model
.
Transaction
(
func
(
model
*
domain
.
Model
)
error
{
// log
err
=
groupPower_m
.
CreateActFamilyMonthRankLog
(
model
,
logList
)
if
err
!=
nil
{
model
.
Log
.
Errorf
(
"CalcGroupPowerMonthRankAct err:%+v"
,
err
)
return
err
}
// award
for
_
,
v
:=
range
awardList
{
err
=
award_tx
.
SendUserAward
(
model
,
v
,
diamond_e
.
GeneralActivity
,
msg_e
.
MgrSendDiamondProperty
)
if
err
!=
nil
{
model
.
Log
.
Errorf
(
"CalcGroupPowerMonthRankAct award:%+v, err:%+v"
,
v
,
err
)
return
err
}
}
return
nil
})
}
func
getAwardAndLogList
(
model
*
domain
.
Model
,
powerIds
[]
uint64
,
items
[]
group_power_cv
.
CvGroupPowerRankData
,
calcMonth
string
)
([]
*
award_tx
.
UserAward
,
[]
*
groupPower_m
.
ActFamilyMonthRankLog
,
error
)
{
// 读奖励配置
confMap
:=
CalcGroupPowerMonthRankActConf
()
awardList
:=
make
([]
*
award_tx
.
UserAward
,
0
,
50
)
// 奖励
ownerMap
,
err
:=
groupPower_m
.
GetPowerOwnerMap
(
model
,
powerIds
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
// log list
logList
:=
make
([]
*
groupPower_m
.
ActFamilyMonthRankLog
,
0
,
50
)
for
_
,
v
:=
range
items
{
teamRank
:=
0
if
v
.
Rank
>=
1
&&
v
.
Rank
<=
3
{
teamRank
=
v
.
Rank
}
else
if
v
.
Rank
>=
4
&&
v
.
Rank
<=
10
{
teamRank
=
4
}
else
{
break
}
ownerId
,
ok
:=
ownerMap
[
v
.
Id
]
if
!
ok
||
ownerId
<=
0
{
model
.
Log
.
Errorf
(
"CalcGroupPowerMonthRankAct 获取势力主错误 familyId:%d"
,
v
.
Id
)
return
nil
,
nil
,
bizerr
.
InvalidParameter
}
uRankConfMap
,
tCOk
:=
confMap
[
teamRank
]
if
!
tCOk
{
break
}
// 家族长奖励
oAward
,
aOk
:=
uRankConfMap
[
0
]
if
!
aOk
{
model
.
Log
.
Errorf
(
"CalcGroupPowerMonthRankAct 配置错误:%v"
,
confMap
)
return
nil
,
nil
,
bizerr
.
InvalidParameter
}
oAwardJ
,
_
:=
json
.
Marshal
(
oAward
)
logList
=
append
(
logList
,
&
groupPower_m
.
ActFamilyMonthRankLog
{
Period
:
calcMonth
,
FamilyId
:
v
.
Id
,
RankFamily
:
v
.
Rank
,
RankUser
:
0
,
UserId
:
ownerId
,
Award
:
string
(
oAwardJ
),
})
awardList
=
append
(
awardList
,
&
award_tx
.
UserAward
{
UserId
:
ownerId
,
MedalId
:
oAward
.
MedalId
,
MedalDuration
:
oAward
.
MedalDay
,
Diamond
:
oAward
.
Diamond
,
NobleLevel
:
oAward
.
Noble
,
NobleDuration
:
oAward
.
NobleDay
,
HeaddressId
:
oAward
.
HeaddressId
,
HeaddressDuration
:
oAward
.
HeaddressDay
})
// 家族成员奖励
for
i
,
m
:=
range
v
.
StarList
{
uRank
:=
i
+
1
confIdx
:=
9
if
uRank
>=
1
&&
uRank
<=
3
{
confIdx
=
1
}
else
if
uRank
>=
4
&&
uRank
<=
10
{
confIdx
=
4
}
mAward
,
aOk
:=
uRankConfMap
[
confIdx
]
if
!
aOk
{
break
}
mAwardJ
,
_
:=
json
.
Marshal
(
mAward
)
logList
=
append
(
logList
,
&
groupPower_m
.
ActFamilyMonthRankLog
{
Period
:
calcMonth
,
FamilyId
:
v
.
Id
,
RankFamily
:
v
.
Rank
,
RankUser
:
uRank
,
UserId
:
m
.
User
.
Id
,
Award
:
string
(
mAwardJ
),
})
awardList
=
append
(
awardList
,
&
award_tx
.
UserAward
{
UserId
:
m
.
User
.
Id
,
MedalId
:
mAward
.
MedalId
,
MedalDuration
:
mAward
.
MedalDay
,
Diamond
:
mAward
.
Diamond
,
NobleLevel
:
mAward
.
Noble
,
NobleDuration
:
mAward
.
NobleDay
,
HeaddressId
:
mAward
.
HeaddressId
,
HeaddressDuration
:
mAward
.
HeaddressDay
})
}
}
return
awardList
,
logList
,
nil
}
// 奖励配置
type
awardConf
struct
{
MedalId
uint64
MedalDay
uint32
Diamond
uint32
Noble
uint32
NobleDay
uint32
HeaddressId
uint64
HeaddressDay
int
}
func
CalcGroupPowerMonthRankActConf
()
map
[
int
]
map
[
int
]
*
awardConf
{
return
map
[
int
]
map
[
int
]
*
awardConf
{
1
:
{
0
:
{
MedalId
:
5211
,
MedalDay
:
30
,
Diamond
:
320000
,
Noble
:
5
,
NobleDay
:
15
},
1
:
{
MedalId
:
5251
,
MedalDay
:
30
,
Diamond
:
120000
,
Noble
:
5
,
NobleDay
:
7
,
HeaddressId
:
2121
,
HeaddressDay
:
30
},
4
:
{
HeaddressId
:
2121
,
HeaddressDay
:
30
},
},
2
:
{
0
:
{
MedalId
:
5221
,
MedalDay
:
30
,
Diamond
:
220000
,
Noble
:
4
,
NobleDay
:
15
},
1
:
{
MedalId
:
5261
,
MedalDay
:
30
,
Diamond
:
100000
,
Noble
:
4
,
NobleDay
:
7
,
HeaddressId
:
2131
,
HeaddressDay
:
30
},
4
:
{
HeaddressId
:
2131
,
HeaddressDay
:
30
},
},
3
:
{
0
:
{
MedalId
:
5231
,
MedalDay
:
30
,
Diamond
:
120000
,
Noble
:
5
,
NobleDay
:
5
},
1
:
{
MedalId
:
5271
,
MedalDay
:
30
,
Diamond
:
70000
,
HeaddressId
:
2141
,
HeaddressDay
:
30
},
4
:
{
HeaddressId
:
2141
,
HeaddressDay
:
30
},
},
4
:
{
0
:
{
MedalId
:
5241
,
MedalDay
:
30
},
1
:
{
MedalId
:
5281
,
MedalDay
:
30
,
HeaddressId
:
2151
,
HeaddressDay
:
30
},
},
}
}
mysql/group_power_month_act.sql
0 → 100644
View file @
4e9c0510
CREATE
TABLE
`act_family_month_rank_log`
(
`id`
bigint
unsigned
NOT
NULL
AUTO_INCREMENT
COMMENT
'id'
,
`period`
varchar
(
20
)
NOT
NULL
DEFAULT
''
COMMENT
'月份'
,
`family_id`
bigint
unsigned
NOT
NULL
COMMENT
'家族id'
,
`rank_family`
int
unsigned
NOT
NULL
DEFAULT
'0'
COMMENT
'家族排名'
,
`rank_user`
int
unsigned
NOT
NULL
DEFAULT
'0'
COMMENT
'用户在家族中的家族排名'
,
`user_id`
bigint
unsigned
NOT
NULL
COMMENT
'id'
,
`award`
varchar
(
500
)
NOT
NULL
DEFAULT
''
COMMENT
'获得的奖励'
,
`created_time`
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`updated_time`
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`id`
),
UNIQUE
KEY
`period`
(
`period`
,
`family_id`
,
`rank_user`
),
KEY
`user_idx`
(
`user_id`
)
USING
BTREE
,
KEY
`created_time`
(
`created_time`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'家族月度排行发奖日志'
;
\ No newline at end of file
route/group_power_r/group_rank.go
View file @
4e9c0510
...
...
@@ -12,6 +12,7 @@ import (
"hilo-group/cv/user_cv"
"hilo-group/domain/model/groupPower_m"
"hilo-group/domain/model/user_m"
"hilo-group/domain/service/group_power_s"
"hilo-group/myerr/bizerr"
"hilo-group/req"
"hilo-group/resp"
...
...
@@ -46,72 +47,69 @@ func GroupPowerRank(c *gin.Context) (*mycontext.MyContext, error) {
beginDate
,
endDate
=
now
.
BeginningOfMonth
()
.
Format
(
"2006-01-02"
),
now
.
EndOfMonth
()
.
Format
(
"2006-01-02"
)
}
var
model
=
domain
.
CreateModelContext
(
myContext
)
r
ank
,
err
:=
groupPower_m
.
GetGroupPowerExpRank
(
model
,
beginDate
,
endDate
,
3
0
)
r
esponse
,
err
:=
group_power_s
.
GetGroupPowerRankResp
(
model
,
beginDate
,
endDate
,
userId
,
0
)
if
err
!=
nil
{
return
myContext
,
err
}
var
ids
[]
mysql
.
ID
for
_
,
g
:=
range
rank
{
ids
=
append
(
ids
,
g
.
GroupPowerId
)
}
response
:=
group_power_cv
.
CvGroupPowerRank
{}
myGroupPower
,
err
:=
groupPower_m
.
GetGroupPowerUserOrNil
(
model
,
userId
)
resp
.
ResponseOk
(
c
,
response
)
return
myContext
,
nil
}
// @Tags 国家势力
// @Summary 家族榜单-活动
// @Success 200 {object} group_power_cv.CvGroupPowerRankMontAct
// @Router /v1/h5/groupPower/rank/month [get]
func
GroupPowerMonthRankAct
(
c
*
gin
.
Context
)
(
*
mycontext
.
MyContext
,
error
)
{
myContext
:=
mycontext
.
CreateMyContext
(
c
.
Keys
)
userId
,
err
:=
req
.
GetUserId
(
c
)
if
err
!=
nil
{
return
myContext
,
err
}
if
myGroupPower
!=
nil
{
ids
=
append
(
ids
,
myGroupPower
.
GroupPowerId
)
}
grades
,
err
:=
groupPower_m
.
MGetGroupPowerGrade
(
model
,
ids
)
var
model
=
domain
.
CreateModelContext
(
myContext
)
// 这个月
beginDate
,
endDate
:=
now
.
BeginningOfMonth
()
.
Format
(
utils
.
DATE_FORMAT
),
now
.
EndOfMonth
()
.
Format
(
utils
.
DATE_FORMAT
)
response
,
err
:=
GroupPowerMonthRankActByMonth
(
model
,
userId
,
beginDate
,
endDate
,
time
.
Now
()
.
Format
(
utils
.
COMPACT_MONTH_FORMAT
)
)
if
err
!=
nil
{
return
myContext
,
err
}
groupPowers
,
err
:=
groupPower_m
.
MGetGroupPowerInfoMap
(
model
,
ids
)
// 上月
lastMonthStart
:=
utils
.
GetLastMonthStart
(
time
.
Now
())
lastTime
:=
now
.
New
(
lastMonthStart
)
beginDateLast
,
endDateLast
:=
lastTime
.
BeginningOfMonth
()
.
Format
(
utils
.
DATE_FORMAT
),
lastTime
.
EndOfMonth
()
.
Format
(
utils
.
DATE_FORMAT
)
responseLast
,
err
:=
GroupPowerMonthRankActByMonth
(
model
,
userId
,
beginDateLast
,
endDateLast
,
lastMonthStart
.
Format
(
utils
.
COMPACT_MONTH_FORMAT
))
if
err
!=
nil
{
return
myContext
,
err
}
if
myGroupPower
!=
nil
{
myGroupPowerRank
,
err
:=
groupPower_m
.
GetMyGroupPowerExpRank
(
model
,
beginDate
,
endDate
,
myGroupPower
.
GroupPowerId
)
if
err
!=
nil
{
return
myContext
,
err
}
response
.
MyGroupPower
=
&
group_power_cv
.
CvGroupPowerRankData
{
CvGroupPowerBase
:
group_power_cv
.
CvGroupPowerBase
{
Id
:
myGroupPower
.
GroupPowerId
,
Icon
:
groupPowers
[
myGroupPower
.
GroupPowerId
]
.
Icon
,
Name
:
groupPowers
[
myGroupPower
.
GroupPowerId
]
.
Name
,
Nameplate
:
groupPowers
[
myGroupPower
.
GroupPowerId
]
.
Nameplate
,
},
CvGroupPowerGrade
:
group_power_cv
.
CvGroupPowerGrade
{
Grade
:
grades
[
myGroupPower
.
GroupPowerId
]
.
Grade
,
Exp
:
myGroupPowerRank
.
Exp
,
},
Rank
:
0
,
}
res
:=
&
group_power_cv
.
CvGroupPowerRankMontAct
{
MyGroupPower
:
response
.
MyGroupPower
,
Items
:
response
.
Items
,
MyGroupPowerLast
:
responseLast
.
MyGroupPower
,
ItemsLast
:
responseLast
.
Items
,
LeftSecond
:
now
.
EndOfMonth
()
.
Unix
()
-
time
.
Now
()
.
Unix
(),
}
resp
.
ResponseOk
(
c
,
res
)
return
myContext
,
nil
}
func
GroupPowerMonthRankActByMonth
(
model
*
domain
.
Model
,
userId
uint64
,
beginDate
,
endDate
,
month
string
)
(
response
group_power_cv
.
CvGroupPowerRank
,
err
error
)
{
response
,
err
=
group_power_s
.
GetGroupPowerRankResp
(
model
,
beginDate
,
endDate
,
userId
,
groupPower_e
.
GroupPowerUserHas
)
if
err
!=
nil
{
return
response
,
err
}
for
_
,
v
:=
range
rank
{
if
response
.
MyGroupPower
!=
nil
&&
v
.
GroupPowerId
==
response
.
MyGroupPower
.
Id
{
response
.
MyGroupPower
.
Rank
=
v
.
Rank
}
response
.
Items
=
append
(
response
.
Items
,
group_power_cv
.
CvGroupPowerRankData
{
CvGroupPowerBase
:
group_power_cv
.
CvGroupPowerBase
{
Id
:
v
.
GroupPowerId
,
Icon
:
groupPowers
[
v
.
GroupPowerId
]
.
Icon
,
Name
:
groupPowers
[
v
.
GroupPowerId
]
.
Name
,
Nameplate
:
groupPowers
[
v
.
GroupPowerId
]
.
Nameplate
,
},
CvGroupPowerGrade
:
group_power_cv
.
CvGroupPowerGrade
{
Grade
:
grades
[
v
.
GroupPowerId
]
.
Grade
,
Exp
:
v
.
Exp
,
},
Rank
:
v
.
Rank
,
})
if
response
.
MyGroupPower
!=
nil
{
response
.
MyGroupPower
.
StarList
,
err
=
group_power_s
.
GetGroupPowerStar
(
model
,
response
.
MyGroupPower
.
Id
,
groupPower_e
.
GroupPowerStarTypeFamous
,
0
,
10
,
month
)
}
if
response
.
MyGroupPower
!=
nil
&&
response
.
MyGroupPower
.
Rank
==
0
{
re
sponse
.
MyGroupPower
.
Rank
=
31
// 客户端统一显示30+
if
err
!=
nil
{
re
turn
response
,
err
}
resp
.
ResponseOk
(
c
,
response
)
return
myContext
,
nil
for
i
,
v
:=
range
response
.
Items
{
response
.
Items
[
i
]
.
StarList
,
err
=
group_power_s
.
GetGroupPowerStar
(
model
,
v
.
Id
,
groupPower_e
.
GroupPowerStarTypeFamous
,
0
,
10
,
month
)
if
err
!=
nil
{
return
response
,
err
}
}
return
response
,
nil
}
// @Tags 国家势力
...
...
@@ -135,7 +133,7 @@ func GroupPowerRankTop(c *gin.Context) (*mycontext.MyContext, error) {
beginDate
,
endDate
=
now
.
BeginningOfMonth
()
.
Format
(
"2006-01-02"
),
now
.
EndOfMonth
()
.
Format
(
"2006-01-02"
)
}
var
model
=
domain
.
CreateModelContext
(
myContext
)
rank
,
err
:=
groupPower_m
.
GetGroupPowerExpRank
(
model
,
beginDate
,
endDate
,
3
)
rank
,
err
:=
groupPower_m
.
GetGroupPowerExpRank
(
model
,
beginDate
,
endDate
,
3
,
0
)
if
err
!=
nil
{
return
myContext
,
err
}
...
...
@@ -201,38 +199,12 @@ func GroupPowerStar(c *gin.Context) (*mycontext.MyContext, error) {
if
param
.
PageSize
<=
0
{
param
.
PageSize
=
30
}
var
model
=
domain
.
CreateModelContext
(
myContext
)
offset
,
limit
:=
(
param
.
PageIndex
-
1
)
*
param
.
PageSize
,
param
.
PageSize
rank
,
err
:=
groupPower_m
.
GetGroupPowerMonthStarRank
(
model
,
param
.
GroupPowerId
,
param
.
Type
,
offset
,
limit
)
var
model
=
domain
.
CreateModelContext
(
myContext
)
response
,
err
:=
group_power_s
.
GetGroupPowerStar
(
model
,
param
.
GroupPowerId
,
param
.
Type
,
offset
,
limit
,
time
.
Now
()
.
Format
(
utils
.
COMPACT_MONTH_FORMAT
))
if
err
!=
nil
{
return
myContext
,
err
}
var
response
[]
group_power_cv
.
CvGroupPowerStarData
var
userIds
[]
mysql
.
ID
for
_
,
row
:=
range
rank
{
userIds
=
append
(
userIds
,
row
.
UserId
)
}
users
,
err
:=
user_m
.
GetUserMapByIds
(
model
,
userIds
)
for
_
,
row
:=
range
rank
{
user
:=
users
[
row
.
UserId
]
score
:=
row
.
Score
if
param
.
Type
==
groupPower_e
.
GroupPowerStarTypeActive
{
score
=
score
/
60
}
if
score
<=
0
{
continue
}
response
=
append
(
response
,
group_power_cv
.
CvGroupPowerStarData
{
User
:
user_cv
.
CvUserTiny
{
Id
:
user
.
ID
,
ExternalId
:
user
.
ExternalId
,
Code
:
user
.
Code
,
Nick
:
user
.
Nick
,
Avatar
:
user
.
Avatar
,
},
Score
:
score
,
})
}
resp
.
ResponsePageBaseOk
(
c
,
response
,
0
,
false
)
return
myContext
,
nil
}
...
...
route/router.go
View file @
4e9c0510
...
...
@@ -146,6 +146,7 @@ func InitRouter() *gin.Engine {
h5GroupPower
:=
v1
.
Group
(
"/h5/groupPower"
)
{
h5GroupPower
.
GET
(
"/grade/detail"
,
wrapper
(
group_power_r
.
GroupPowerGradeDetail
))
h5GroupPower
.
GET
(
"/rank/month"
,
wrapper
(
group_power_r
.
GroupPowerMonthRankAct
))
}
charge
:=
v1
.
Group
(
"/charge"
)
...
...
test/group_power_test.go
View file @
4e9c0510
...
...
@@ -3,9 +3,13 @@ package test
import
(
"fmt"
"git.hilo.cn/hilo-common/domain"
"git.hilo.cn/hilo-common/utils"
"github.com/jinzhu/now"
"hilo-group/domain/model/groupPower_m"
"hilo-group/domain/model/group_m"
"hilo-group/domain/service/group_power_s"
"testing"
"time"
)
func
TestGetAllGroupPowerOwner
(
t
*
testing
.
T
)
{
...
...
@@ -23,3 +27,11 @@ func TestIsUseTRTC(t *testing.T) {
fmt
.
Println
(
"true--------------"
)
}
}
func
TestDoCalcGroupPowerMonthRankAct
(
t
*
testing
.
T
)
{
lastDayTime
:=
time
.
Now
()
.
AddDate
(
0
,
0
,
-
1
)
_now
:=
now
.
New
(
lastDayTime
)
calcMonth
:=
_now
.
BeginningOfMonth
()
.
Format
(
utils
.
MONTH_FORMAT
)
beginDate
,
endDate
:=
_now
.
BeginningOfMonth
()
.
Format
(
"2006-01-02"
),
_now
.
EndOfMonth
()
.
Format
(
"2006-01-02"
)
_
=
group_power_s
.
DoCalcGroupPowerMonthRankAct
(
domain
.
CreateModelNil
(),
calcMonth
,
beginDate
,
endDate
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment