Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
antai-sport-http-server
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
antai-sport
antai-sport-http-server
Commits
b7e673c5
Commit
b7e673c5
authored
Aug 10, 2022
by
liming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
个人成就主页
parent
6cc4a262
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
194 additions
and
4 deletions
+194
-4
AchievementLevel.java
...m/antai/sport/http/server/constants/AchievementLevel.java
+7
-0
AchievementController.java
...usiness/achievement/controller/AchievementController.java
+7
-0
AchievementHomeItemVO.java
...r/api/business/achievement/dto/AchievementHomeItemVO.java
+27
-0
AchievementHomeVO.java
...erver/api/business/achievement/dto/AchievementHomeVO.java
+23
-0
NewAchievementVO.java
...server/api/business/achievement/dto/NewAchievementVO.java
+2
-0
AchievementService.java
.../api/business/achievement/service/AchievementService.java
+127
-3
AchievementBizMapper.xml
...ain/resources/mapper/achievement/AchievementBizMapper.xml
+1
-1
No files found.
constants/src/main/java/com/antai/sport/http/server/constants/AchievementLevel.java
0 → 100644
View file @
b7e673c5
package
com
.
antai
.
sport
.
http
.
server
.
constants
;
public
class
AchievementLevel
{
public
static
final
Integer
BASE
=
10
;
public
static
final
Integer
ADVANCED
=
20
;
public
static
final
Integer
MASTER
=
30
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/achievement/controller/AchievementController.java
View file @
b7e673c5
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
achievement
.
controller
;
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
achievement
.
controller
;
import
com.antai.sport.http.server.common.base.Result
;
import
com.antai.sport.http.server.common.base.Result
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.AchievementHomeVO
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.NewAchievementVO
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.NewAchievementVO
;
import
com.antai.sport.http.server.server.api.business.achievement.service.AchievementService
;
import
com.antai.sport.http.server.server.api.business.achievement.service.AchievementService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -28,4 +29,10 @@ public class AchievementController {
...
@@ -28,4 +29,10 @@ public class AchievementController {
public
ResponseEntity
<
Result
<
List
<
NewAchievementVO
>>>
getNewAchievement
(
@PathVariable
(
"sportUserId"
)
Long
sportUserId
)
{
public
ResponseEntity
<
Result
<
List
<
NewAchievementVO
>>>
getNewAchievement
(
@PathVariable
(
"sportUserId"
)
Long
sportUserId
)
{
return
success
(
achievementService
.
getNewAchievement
(
sportUserId
));
return
success
(
achievementService
.
getNewAchievement
(
sportUserId
));
}
}
@ApiOperation
(
value
=
"查询用户成就主页"
)
@GetMapping
(
"/home/{sportUserId}"
)
public
ResponseEntity
<
Result
<
AchievementHomeVO
>>
getUserAchievementHome
(
@PathVariable
(
"sportUserId"
)
Long
sportUserId
)
{
return
success
(
achievementService
.
getUserAchievementHome
(
sportUserId
));
}
}
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/achievement/dto/AchievementHomeItemVO.java
0 → 100644
View file @
b7e673c5
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
achievement
.
dto
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
@Data
@ApiModel
(
"成就主页单项成就数据"
)
public
class
AchievementHomeItemVO
{
@ApiModelProperty
(
"成就名称"
)
private
String
achievementName
;
@ApiModelProperty
(
"logo url"
)
private
String
logo
;
@ApiModelProperty
(
"成就说明"
)
private
String
remark
;
@ApiModelProperty
(
"获得成就时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
createTime
;
@ApiModelProperty
(
"百分比(精确到小数点后两位)"
)
private
BigDecimal
percent
;
@ApiModelProperty
(
"是否已获得 true:已获得 false:未获得"
)
private
Boolean
awarded
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/achievement/dto/AchievementHomeVO.java
0 → 100644
View file @
b7e673c5
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
achievement
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
@Data
@ApiModel
(
"个人成就主页数据"
)
public
class
AchievementHomeVO
{
@ApiModelProperty
(
"已获得成就数量"
)
private
Integer
myAchievementNum
;
@ApiModelProperty
(
"总成就数量"
)
private
Integer
totalAchievementNum
;
@ApiModelProperty
(
"初级成就列表"
)
List
<
AchievementHomeItemVO
>
baseAchievementList
;
@ApiModelProperty
(
"中级成就列表"
)
List
<
AchievementHomeItemVO
>
advancedAchievementList
;
@ApiModelProperty
(
"高级成就列表"
)
List
<
AchievementHomeItemVO
>
masterAchievementList
;
}
server-api/src/main/java/com/antai/sport/http/server/server/api/business/achievement/dto/NewAchievementVO.java
View file @
b7e673c5
...
@@ -18,6 +18,8 @@ public class NewAchievementVO {
...
@@ -18,6 +18,8 @@ public class NewAchievementVO {
private
String
logo
;
private
String
logo
;
@ApiModelProperty
(
"成就对应赠送积分"
)
@ApiModelProperty
(
"成就对应赠送积分"
)
private
Integer
currency
;
private
Integer
currency
;
@ApiModelProperty
(
"成就等级 10 初级 20 中级 30 高级"
)
private
Integer
level
;
@ApiModelProperty
(
"成就获取时间"
)
@ApiModelProperty
(
"成就获取时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm"
,
timezone
=
"GMT+8"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
createTime
;
private
LocalDateTime
createTime
;
...
...
server-api/src/main/java/com/antai/sport/http/server/server/api/business/achievement/service/AchievementService.java
View file @
b7e673c5
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
achievement
.
service
;
package
com
.
antai
.
sport
.
http
.
server
.
server
.
api
.
business
.
achievement
.
service
;
import
com.antai.sport.http.server.constants.AchievementCondition
;
import
com.antai.sport.http.server.constants.*
;
import
com.antai.sport.http.server.constants.GameCurrencySourceType
;
import
com.antai.sport.http.server.constants.GameMode
;
import
com.antai.sport.http.server.repository.achievement.entity.Achievement
;
import
com.antai.sport.http.server.repository.achievement.entity.Achievement
;
import
com.antai.sport.http.server.repository.achievement.entity.AchievementForSportUser
;
import
com.antai.sport.http.server.repository.achievement.entity.AchievementForSportUser
;
import
com.antai.sport.http.server.repository.achievement.mapper.AchievementForSportUserMapper
;
import
com.antai.sport.http.server.repository.achievement.mapper.AchievementForSportUserMapper
;
import
com.antai.sport.http.server.repository.achievement.mapper.AchievementMapper
;
import
com.antai.sport.http.server.repository.sport.entity.SportUserContinuousLoginDays
;
import
com.antai.sport.http.server.repository.sport.entity.SportUserSummary
;
import
com.antai.sport.http.server.repository.sport.entity.SportUserSummary
;
import
com.antai.sport.http.server.repository.sport.mapper.SportUserContinuousLoginDaysMapper
;
import
com.antai.sport.http.server.repository.sport.mapper.SportUserSummaryMapper
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.AchievementHomeItemVO
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.AchievementHomeVO
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.NewAchievementVO
;
import
com.antai.sport.http.server.server.api.business.achievement.dto.NewAchievementVO
;
import
com.antai.sport.http.server.server.api.business.achievement.mapper.AchievementBizMapper
;
import
com.antai.sport.http.server.server.api.business.achievement.mapper.AchievementBizMapper
;
import
com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService
;
import
com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
@Service
@Service
public
class
AchievementService
{
public
class
AchievementService
{
@Resource
private
AchievementMapper
achievementMapper
;
@Resource
@Resource
private
AchievementForSportUserMapper
achievementForSportUserMapper
;
private
AchievementForSportUserMapper
achievementForSportUserMapper
;
@Resource
private
SportUserContinuousLoginDaysMapper
sportUserContinuousLoginDaysMapper
;
@Resource
private
SportUserSummaryMapper
sportUserSummaryMapper
;
@Resource
@Resource
private
AchievementBizMapper
achievementBizMapper
;
private
AchievementBizMapper
achievementBizMapper
;
...
@@ -104,4 +120,112 @@ public class AchievementService {
...
@@ -104,4 +120,112 @@ public class AchievementService {
return
achievementVOList
;
return
achievementVOList
;
}
}
/**
* 查询用户成就主页
*
* @param sportUserId
* @return
*/
public
AchievementHomeVO
getUserAchievementHome
(
Long
sportUserId
)
{
AchievementHomeVO
result
=
new
AchievementHomeVO
();
result
.
setMyAchievementNum
(
0
);
result
.
setBaseAchievementList
(
new
ArrayList
<>());
result
.
setAdvancedAchievementList
(
new
ArrayList
<>());
result
.
setMasterAchievementList
(
new
ArrayList
<>());
QueryWrapper
<
Achievement
>
achievementQuery
=
new
QueryWrapper
<>();
achievementQuery
.
lambda
().
eq
(
Achievement:
:
getDeleted
,
DeleteStatus
.
UNDELETED
).
orderBy
(
true
,
true
,
Achievement:
:
getShowOrder
);
List
<
Achievement
>
achievementList
=
achievementMapper
.
selectList
(
achievementQuery
);
result
.
setTotalAchievementNum
(
achievementList
.
size
());
QueryWrapper
<
AchievementForSportUser
>
myAchievementQuery
=
new
QueryWrapper
<>();
myAchievementQuery
.
lambda
().
eq
(
AchievementForSportUser:
:
getSportUserId
,
sportUserId
);
List
<
AchievementForSportUser
>
myAchievementList
=
achievementForSportUserMapper
.
selectList
(
myAchievementQuery
);
Map
<
Long
,
AchievementForSportUser
>
myAchievementMap
=
new
HashMap
<>();
for
(
AchievementForSportUser
myAchievement
:
myAchievementList
)
{
myAchievementMap
.
put
(
myAchievement
.
getAchievementId
(),
myAchievement
);
}
QueryWrapper
<
SportUserContinuousLoginDays
>
continuousLoginDaysQuery
=
new
QueryWrapper
<>();
continuousLoginDaysQuery
.
lambda
().
eq
(
SportUserContinuousLoginDays:
:
getSportUserId
,
sportUserId
);
SportUserContinuousLoginDays
continuousLoginDays
=
sportUserContinuousLoginDaysMapper
.
selectOne
(
continuousLoginDaysQuery
);
QueryWrapper
<
SportUserSummary
>
summaryQuery
=
new
QueryWrapper
<>();
summaryQuery
.
lambda
().
eq
(
SportUserSummary:
:
getUserId
,
sportUserId
);
SportUserSummary
summary
=
sportUserSummaryMapper
.
selectOne
(
summaryQuery
);
for
(
Achievement
achievement
:
achievementList
)
{
AchievementHomeItemVO
homeItem
=
new
AchievementHomeItemVO
();
homeItem
.
setAchievementName
(
achievement
.
getAchievementName
());
homeItem
.
setLogo
(
achievement
.
getLogo
());
homeItem
.
setRemark
(
achievement
.
getRemark
());
homeItem
.
setPercent
(
BigDecimal
.
ZERO
);
if
(
myAchievementMap
.
containsKey
(
achievement
.
getId
()))
{
homeItem
.
setPercent
(
BigDecimal
.
ONE
);
homeItem
.
setAwarded
(
true
);
homeItem
.
setCreateTime
(
myAchievementMap
.
get
(
achievement
.
getId
()).
getCreateTime
());
result
.
setMyAchievementNum
(
result
.
getMyAchievementNum
()
+
1
);
}
else
{
homeItem
.
setAwarded
(
false
);
//计算百分比
//计算签到
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
SIGN_IN_DAYS
))
{
if
(
continuousLoginDays
!=
null
)
{
homeItem
.
setPercent
(
this
.
calcPercent
(
continuousLoginDays
.
getDays
(),
achievement
.
getConditionValue
()));
}
}
//计算团练成就
if
(
summary
!=
null
)
{
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
TEAM_TRAINING
))
{
homeItem
.
setPercent
(
this
.
calcPercent
(
summary
.
getTotalTeamTrainingFinishNum
(),
achievement
.
getConditionValue
()));
}
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
SIMPLE_MATCH
))
{
homeItem
.
setPercent
(
this
.
calcPercent
(
summary
.
getTotalSimpleMatchFinishNum
(),
achievement
.
getConditionValue
()));
}
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
ROOM_MODE
))
{
homeItem
.
setPercent
(
this
.
calcPercent
(
summary
.
getTotalGameModeFinishNum
(),
achievement
.
getConditionValue
()));
}
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
DISTANCE
))
{
homeItem
.
setPercent
(
this
.
calcPercent
(
summary
.
getTotalDistance
().
intValue
(),
achievement
.
getConditionValue
()));
}
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
CLIMB_DISTANCE
))
{
homeItem
.
setPercent
(
this
.
calcPercent
(
summary
.
getTotalClimbDistance
().
intValue
(),
achievement
.
getConditionValue
()));
}
if
(
achievement
.
getAchievementCondition
().
equals
(
AchievementCondition
.
CALORIE
))
{
homeItem
.
setPercent
(
this
.
calcPercent
(
summary
.
getTotalCalorie
(),
achievement
.
getConditionValue
()));
}
}
}
if
(
achievement
.
getLevel
().
equals
(
AchievementLevel
.
BASE
))
{
result
.
getBaseAchievementList
().
add
(
homeItem
);
}
if
(
achievement
.
getLevel
().
equals
(
AchievementLevel
.
ADVANCED
))
{
result
.
getAdvancedAchievementList
().
add
(
homeItem
);
}
if
(
achievement
.
getLevel
().
equals
(
AchievementLevel
.
MASTER
))
{
result
.
getMasterAchievementList
().
add
(
homeItem
);
}
}
return
result
;
}
private
BigDecimal
calcPercent
(
Integer
molecule
,
Integer
denominator
)
{
if
(
molecule
==
null
||
denominator
==
null
||
denominator
==
0
)
{
return
BigDecimal
.
ZERO
;
}
return
BigDecimal
.
valueOf
(
molecule
).
divide
(
BigDecimal
.
valueOf
(
denominator
),
2
,
RoundingMode
.
HALF_UP
);
}
}
}
server-api/src/main/resources/mapper/achievement/AchievementBizMapper.xml
View file @
b7e673c5
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
<select
id=
"getNewAchievement"
<select
id=
"getNewAchievement"
resultType=
"com.antai.sport.http.server.server.api.business.achievement.dto.NewAchievementVO"
>
resultType=
"com.antai.sport.http.server.server.api.business.achievement.dto.NewAchievementVO"
>
select t1.id, t2.achievement_name, t2.logo, t2.currency, t1.create_time
select t1.id, t2.achievement_name, t2.logo, t2.currency, t
2.level, t
1.create_time
from achievement_for_sport_user t1
from achievement_for_sport_user t1
left join achievement t2 on t1.achievement_id = t2.id
left join achievement t2 on t1.achievement_id = t2.id
where t1.mark_read = 0
where t1.mark_read = 0
...
...
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