Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
answer-backend
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
answer
answer-backend
Commits
68962b2c
Commit
68962b2c
authored
Feb 10, 2023
by
wqc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
一天提交5次
parent
968e3bb2
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
248 additions
and
1 deletions
+248
-1
api-server/src/main/java/com/zq/api/feign/UserFeign.java
+3
-0
api-server/src/main/java/com/zq/api/service/IApiLogic.java
+8
-0
api-server/src/main/java/com/zq/api/service/impl/ApiV100Logic.java
+5
-0
user-server/pom.xml
+13
-0
user-server/src/main/java/com/zq/user/controller/api/PrizeApi.java
+7
-0
user-server/src/main/java/com/zq/user/controller/api/QuestionApi.java
+30
-1
user-server/src/main/java/com/zq/user/dao/LuckyNameDao.java
+9
-0
user-server/src/main/java/com/zq/user/dao/ReplyCountDao.java
+11
-0
user-server/src/main/java/com/zq/user/entity/AnswerRec.java
+6
-0
user-server/src/main/java/com/zq/user/entity/LuckyName.java
+42
-0
user-server/src/main/java/com/zq/user/entity/ReplyCount.java
+35
-0
user-server/src/main/java/com/zq/user/service/PrizeService.java
+6
-0
user-server/src/main/java/com/zq/user/service/QuestionService.java
+1
-0
user-server/src/main/java/com/zq/user/utils/LimitRequest.java
+15
-0
user-server/src/main/java/com/zq/user/utils/LimitRequestAspect.java
+57
-0
No files found.
api-server/src/main/java/com/zq/api/feign/UserFeign.java
View file @
68962b2c
...
...
@@ -41,6 +41,9 @@ public interface UserFeign {
@PostMapping
(
value
=
"/api/prize/getLotteryRecList"
)
ResultVo
getLotteryRecList
(
@RequestBody
Map
<
String
,
Object
>
paramsMap
);
@PostMapping
(
value
=
"/api/prize/getLuckyList"
)
ResultVo
getLuckyList
(
@RequestBody
Map
<
String
,
Object
>
paramsMap
);
@PostMapping
(
value
=
"/api/address/getAddressList"
)
ResultVo
getAddressList
(
@RequestBody
Map
<
String
,
Object
>
paramsMap
);
...
...
api-server/src/main/java/com/zq/api/service/IApiLogic.java
View file @
68962b2c
...
...
@@ -66,6 +66,14 @@ public interface IApiLogic extends IApiCommon {
ApiResp
getLotteryRecList
(
ApiForm
form
);
/**
* 中奖名单
*
* @param form
* @return
*/
ApiResp
getLuckyList
(
ApiForm
form
);
/**
* 收货地址
*
* @param form
...
...
api-server/src/main/java/com/zq/api/service/impl/ApiV100Logic.java
View file @
68962b2c
...
...
@@ -59,6 +59,11 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
return
ApiUtils
.
toApiResp
(
form
,
userFeign
.
getLotteryRecList
(
form
.
getParamsMap
(
true
)));
}
@Override
public
ApiResp
getLuckyList
(
ApiForm
form
)
{
return
ApiUtils
.
toApiResp
(
form
,
userFeign
.
getLuckyList
(
form
.
getParamsMap
(
true
)));
}
/**
* 收货地址
*
...
...
user-server/pom.xml
View file @
68962b2c
...
...
@@ -65,6 +65,19 @@
<artifactId>
mybatis-plus-boot-starter
</artifactId>
<version>
${mybatis.plus.version}
</version>
</dependency>
<!-- AOP -->
<dependency>
<groupId>
org.aspectj
</groupId>
<artifactId>
aspectjweaver
</artifactId>
<version>
1.9.4
</version>
</dependency>
<!--Map依赖 -->
<dependency>
<groupId>
net.jodah
</groupId>
<artifactId>
expiringmap
</artifactId>
<version>
0.5.10
</version>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>
com.alibaba
</groupId>
...
...
user-server/src/main/java/com/zq/user/controller/api/PrizeApi.java
View file @
68962b2c
...
...
@@ -4,6 +4,7 @@ import com.zq.common.utils.AssertUtils;
import
com.zq.common.vo.PageVo
;
import
com.zq.common.vo.ResultVo
;
import
com.zq.user.entity.LotteryRec
;
import
com.zq.user.entity.LuckyName
;
import
com.zq.user.entity.Prize
;
import
com.zq.user.entity.PrizeType
;
import
com.zq.user.service.PrizeService
;
...
...
@@ -53,4 +54,10 @@ public class PrizeApi {
return
ResultVo
.
success
(
prizeService
.
getLotteryRecList
(
vo
));
}
@ApiOperation
(
"中奖名单"
)
@PostMapping
(
value
=
"/getLuckyList"
)
public
ResultVo
getLuckyList
()
{
return
ResultVo
.
success
(
prizeService
.
getLuckyList
());
}
}
user-server/src/main/java/com/zq/user/controller/api/QuestionApi.java
View file @
68962b2c
package
com
.
zq
.
user
.
controller
.
api
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.zq.common.utils.AssertUtils
;
import
com.zq.common.vo.ResultVo
;
import
com.zq.user.dao.AnswerRecDao
;
import
com.zq.user.dao.ReplyCountDao
;
import
com.zq.user.entity.AnswerRec
;
import
com.zq.user.entity.ReplyCount
;
import
com.zq.user.service.PrizeService
;
import
com.zq.user.service.QuestionService
;
import
com.zq.user.utils.LimitRequest
;
import
com.zq.user.vo.LotteryRecFindVo
;
import
com.zq.user.vo.QuestionFindVo
;
import
io.swagger.annotations.Api
;
...
...
@@ -12,6 +18,8 @@ import io.swagger.annotations.ApiOperation;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* @author wilmiam
* @since 2022/6/15 9:51
...
...
@@ -24,6 +32,7 @@ public class QuestionApi {
private
final
PrizeService
prizeService
;
private
final
QuestionService
questionService
;
private
final
ReplyCountDao
replyCountDao
;
@ApiOperation
(
"获取题目列表"
)
@PostMapping
(
value
=
"/getQuestionList"
)
...
...
@@ -32,10 +41,30 @@ public class QuestionApi {
}
@ApiOperation
(
"答题"
)
// @LimitRequest(count=5)
@PostMapping
(
value
=
"/answer"
)
public
ResultVo
answer
(
@RequestBody
AnswerRec
vo
)
{
//
AssertUtils.hasText(vo.getUserId(), "缺少用户ID");
AssertUtils
.
hasText
(
vo
.
getUserId
(),
"缺少用户ID"
);
AssertUtils
.
hasText
(
vo
.
getAnswerList
(),
"缺少答案"
);
ReplyCount
replyCount2
=
replyCountDao
.
selectOne
(
Wrappers
.
lambdaQuery
(
ReplyCount
.
builder
().
userId
(
vo
.
getUserId
()).
build
()));
if
(
replyCount2
==
null
)
{
ReplyCount
reply
=
new
ReplyCount
();
reply
.
setUserId
(
vo
.
getUserId
());
reply
.
setReplyCount
(
vo
.
getReplyCount
());
replyCountDao
.
insert
(
reply
);
}
else
{
Integer
count
=
replyCount2
.
getReplyCount
();
count
+=
count
;
ReplyCount
reply
=
new
ReplyCount
();
reply
.
setReplyCount
(
count
);
replyCountDao
.
update
(
reply
);
}
if
(
replyCount2
.
getReplyCount
().
intValue
()>
5
){
return
ResultVo
.
fail
(
"今日已达5次题,请明日再答"
);
}
return
ResultVo
.
success
(
questionService
.
answer
(
vo
));
}
...
...
user-server/src/main/java/com/zq/user/dao/LuckyNameDao.java
0 → 100644
View file @
68962b2c
package
com
.
zq
.
user
.
dao
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.zq.user.entity.LuckyName
;
import
org.springframework.stereotype.Repository
;
@Repository
public
interface
LuckyNameDao
extends
BaseMapper
<
LuckyName
>
{
}
user-server/src/main/java/com/zq/user/dao/ReplyCountDao.java
0 → 100644
View file @
68962b2c
package
com
.
zq
.
user
.
dao
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.zq.user.entity.ReplyCount
;
import
org.springframework.stereotype.Repository
;
@Repository
public
interface
ReplyCountDao
extends
BaseMapper
<
ReplyCount
>
{
void
update
(
ReplyCount
reply
);
}
user-server/src/main/java/com/zq/user/entity/AnswerRec.java
View file @
68962b2c
...
...
@@ -67,4 +67,10 @@ public class AnswerRec {
@ApiModelProperty
(
"抽奖活动名"
)
private
String
lotteryName
;
/**
* 答题次数
*/
@ApiModelProperty
(
"答题次数"
)
private
Integer
replyCount
;
}
user-server/src/main/java/com/zq/user/entity/LuckyName.java
0 → 100644
View file @
68962b2c
package
com
.
zq
.
user
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName
(
value
=
"t_lucky_name"
)
public
class
LuckyName
{
/**
* id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
"中奖姓名"
)
private
String
luckyName
;
@ApiModelProperty
(
"中奖电话"
)
private
String
luckyPhone
;
@ApiModelProperty
(
"中奖地址"
)
private
String
luckyAddress
;
/**
* 创建时间
*/
@ApiModelProperty
(
"创建时间"
)
private
Date
createTime
;
}
user-server/src/main/java/com/zq/user/entity/ReplyCount.java
0 → 100644
View file @
68962b2c
package
com
.
zq
.
user
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName
(
value
=
"reply_count"
)
public
class
ReplyCount
{
/**
* id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 答题次数
*/
@ApiModelProperty
(
"答题次数"
)
private
Integer
replyCount
;
/**
* 用户ID
*/
@ApiModelProperty
(
"用户ID"
)
private
String
userId
;
}
user-server/src/main/java/com/zq/user/service/PrizeService.java
View file @
68962b2c
...
...
@@ -53,6 +53,7 @@ PrizeService {
private
final
QuestionService
questionService
;
private
final
AnswerRecDao
answerRecDao
;
private
final
AddressDao
addressDao
;
private
final
LuckyNameDao
luckyNameDao
;
...
...
@@ -357,4 +358,9 @@ PrizeService {
return
findVos
;
}
public
ResultVo
getLuckyList
()
{
List
<
LuckyName
>
list
=
luckyNameDao
.
selectList
(
new
LambdaQueryWrapper
<
LuckyName
>().
orderByDesc
(
LuckyName:
:
getCreateTime
));
return
ResultVo
.
success
(
list
);
}
}
user-server/src/main/java/com/zq/user/service/QuestionService.java
View file @
68962b2c
...
...
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import
com.zq.common.utils.AssertUtils
;
import
com.zq.common.utils.PagingUtils
;
import
com.zq.common.vo.PageVo
;
import
com.zq.common.vo.ResultVo
;
import
com.zq.user.dao.AnswerRecDao
;
import
com.zq.user.dao.LotteryInfoDao
;
import
com.zq.user.dao.QuestionDao
;
...
...
user-server/src/main/java/com/zq/user/utils/LimitRequest.java
0 → 100644
View file @
68962b2c
package
com
.
zq
.
user
.
utils
;
import
java.lang.annotation.*
;
@Documented
@Target
(
ElementType
.
METHOD
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
LimitRequest
{
//毫秒,分钟,小时 之间的转换用算数
long
time
()
default
60000
*
60
*
24
;
// 限制时间 单位:毫秒
int
count
()
default
Integer
.
MAX_VALUE
;
// 允许请求的次数
}
user-server/src/main/java/com/zq/user/utils/LimitRequestAspect.java
0 → 100644
View file @
68962b2c
package
com
.
zq
.
user
.
utils
;
import
net.jodah.expiringmap.ExpirationPolicy
;
import
net.jodah.expiringmap.ExpiringMap
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestAttributes
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.TimeUnit
;
@Aspect
@Component
public
class
LimitRequestAspect
{
private
static
ConcurrentHashMap
<
String
,
ExpiringMap
<
String
,
Integer
>>
book
=
new
ConcurrentHashMap
<>();
// 定义切点
// 让所有有@LimitRequest注解的方法都执行切面方法
@Pointcut
(
"@annotation(limitRequest)"
)
public
void
excudeService
(
LimitRequest
limitRequest
)
{
}
@Around
(
"excudeService(limitRequest)"
)
public
Object
doAround
(
ProceedingJoinPoint
pjp
,
LimitRequest
limitRequest
)
throws
Throwable
{
// 获得request对象
RequestAttributes
ra
=
RequestContextHolder
.
getRequestAttributes
();
ServletRequestAttributes
sra
=
(
ServletRequestAttributes
)
ra
;
HttpServletRequest
request
=
sra
.
getRequest
();
// 获取Map对象, 如果没有则返回默认值
// 第一个参数是key, 第二个参数是默认值
ExpiringMap
<
String
,
Integer
>
map
=
book
.
getOrDefault
(
request
.
getRequestURI
(),
ExpiringMap
.
builder
().
variableExpiration
().
build
());
Integer
uCount
=
map
.
getOrDefault
(
request
.
getRemoteAddr
(),
0
);
if
(
uCount
>=
limitRequest
.
count
())
{
// 超过次数,不执行目标方法
//这里的返回对象类型根据controller方法的返回方式一致
return
"接口访问次数超过限制,请24小时候重试"
;
}
else
if
(
uCount
==
0
){
// 第一次请求时,设置开始有效时间
map
.
put
(
request
.
getRemoteAddr
(),
uCount
+
1
,
ExpirationPolicy
.
CREATED
,
limitRequest
.
time
(),
TimeUnit
.
MILLISECONDS
);
}
else
{
// 未超过次数, 记录数据加一
map
.
put
(
request
.
getRemoteAddr
(),
uCount
+
1
);
}
book
.
put
(
request
.
getRequestURI
(),
map
);
// result的值就是被拦截方法的返回值
Object
result
=
pjp
.
proceed
();
return
result
;
}
}
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