Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
晶之木
miaosha
提交
e94690a2
M
miaosha
项目概览
晶之木
/
miaosha
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
miaosha
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e94690a2
编写于
12月 10, 2018
作者:
Q
qiurunze
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提交全局异常修改
上级
3358215b
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
24 addition
and
191 deletion
+24
-191
README.md
README.md
+3
-3
src/main/java/com/geekq/miaosha/access/AccessInterceptor.java
...main/java/com/geekq/miaosha/access/AccessInterceptor.java
+9
-6
src/main/java/com/geekq/miaosha/common/resultbean/ResultGeekQ.java
...java/com/geekq/miaosha/common/resultbean/ResultGeekQ.java
+0
-2
src/main/java/com/geekq/miaosha/controller/GoodsController.java
...in/java/com/geekq/miaosha/controller/GoodsController.java
+0
-1
src/main/java/com/geekq/miaosha/controller/MiaoshaController.java
.../java/com/geekq/miaosha/controller/MiaoshaController.java
+12
-9
src/main/java/com/geekq/miaosha/controller/OrderController.java
...in/java/com/geekq/miaosha/controller/OrderController.java
+0
-2
src/main/java/com/geekq/miaosha/exception/GlobleExceptionHandler.java
...a/com/geekq/miaosha/exception/GlobleExceptionHandler.java
+0
-4
src/main/java/com/geekq/miaosha/result/CodeMsg.java
src/main/java/com/geekq/miaosha/result/CodeMsg.java
+0
-74
src/main/java/com/geekq/miaosha/result/Result.java
src/main/java/com/geekq/miaosha/result/Result.java
+0
-90
未找到文件。
README.md
浏览文件 @
e94690a2
...
...
@@ -26,9 +26,9 @@
--数据库加唯一索引防止用户重复购买
--redis预减库存减少数据库访问 内存标记减少redis访问 请求先入队列缓冲,异步下单,增强用户体验
#### [1.全局异常处理拦截]()
>
1.定义全局的异常拦截器<br>
>
2.定义了全局异常类型<br>
>
3.只返回和业务有关的<br>
1.
定义全局的异常拦截器
<br>
2.
定义了全局异常类型
<br>
3.
只返回和业务有关的
<br>
#### [解决分布式session]()
--生成一个随机的uuid一类的写回到cookie中
...
...
src/main/java/com/geekq/miaosha/access/AccessInterceptor.java
浏览文件 @
e94690a2
package
com.geekq.miaosha.access
;
import
com.alibaba.fastjson.JSON
;
import
com.geekq.miaosha.common.enums.ResultStatus
;
import
com.geekq.miaosha.common.resultbean.ResultGeekQ
;
import
com.geekq.miaosha.domain.MiaoshaUser
;
import
com.geekq.miaosha.redis.RedisService
;
import
com.geekq.miaosha.result.CodeMsg
;
import
com.geekq.miaosha.result.Result
;
import
com.geekq.miaosha.service.MiaoShaUserService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -17,6 +17,9 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.OutputStream
;
import
static
com
.
geekq
.
miaosha
.
common
.
enums
.
ResultStatus
.
ACCESS_LIMIT_REACHED
;
import
static
com
.
geekq
.
miaosha
.
common
.
enums
.
ResultStatus
.
SESSION_ERROR
;
@Service
public
class
AccessInterceptor
extends
HandlerInterceptorAdapter
{
...
...
@@ -43,7 +46,7 @@ public class AccessInterceptor extends HandlerInterceptorAdapter{
String
key
=
request
.
getRequestURI
();
if
(
needLogin
)
{
if
(
user
==
null
)
{
render
(
response
,
CodeMsg
.
SESSION_ERROR
);
render
(
response
,
SESSION_ERROR
);
return
false
;
}
key
+=
"_"
+
user
.
getId
();
...
...
@@ -57,17 +60,17 @@ public class AccessInterceptor extends HandlerInterceptorAdapter{
}
else
if
(
count
<
maxCount
)
{
redisService
.
incr
(
ak
,
key
);
}
else
{
render
(
response
,
CodeMsg
.
ACCESS_LIMIT_REACHED
);
render
(
response
,
ACCESS_LIMIT_REACHED
);
return
false
;
}
}
return
true
;
}
private
void
render
(
HttpServletResponse
response
,
CodeMsg
cm
)
throws
Exception
{
private
void
render
(
HttpServletResponse
response
,
ResultStatus
cm
)
throws
Exception
{
response
.
setContentType
(
"application/json;charset=UTF-8"
);
OutputStream
out
=
response
.
getOutputStream
();
String
str
=
JSON
.
toJSONString
(
Result
.
error
(
cm
));
String
str
=
JSON
.
toJSONString
(
Result
GeekQ
.
error
(
cm
));
out
.
write
(
str
.
getBytes
(
"UTF-8"
));
out
.
flush
();
out
.
close
();
...
...
src/main/java/com/geekq/miaosha/common/resultbean/ResultGeekQ.java
浏览文件 @
e94690a2
package
com.geekq.miaosha.common.resultbean
;
import
com.geekq.miaosha.common.enums.ResultStatus
;
import
com.geekq.miaosha.result.CodeMsg
;
import
com.geekq.miaosha.result.Result
;
import
java.io.Serializable
;
...
...
src/main/java/com/geekq/miaosha/controller/GoodsController.java
浏览文件 @
e94690a2
...
...
@@ -4,7 +4,6 @@ import com.geekq.miaosha.common.resultbean.ResultGeekQ;
import
com.geekq.miaosha.domain.MiaoshaUser
;
import
com.geekq.miaosha.redis.GoodsKey
;
import
com.geekq.miaosha.redis.RedisService
;
import
com.geekq.miaosha.result.Result
;
import
com.geekq.miaosha.service.GoodsService
;
import
com.geekq.miaosha.service.MiaoShaUserService
;
import
com.geekq.miaosha.vo.GoodsDetailVo
;
...
...
src/main/java/com/geekq/miaosha/controller/MiaoshaController.java
浏览文件 @
e94690a2
package
com.geekq.miaosha.controller
;
import
com.geekq.miaosha.access.AccessLimit
;
import
com.geekq.miaosha.common.enums.ResultStatus
;
import
com.geekq.miaosha.common.resultbean.ResultGeekQ
;
import
com.geekq.miaosha.domain.MiaoshaOrder
;
import
com.geekq.miaosha.domain.MiaoshaUser
;
...
...
@@ -9,13 +8,13 @@ import com.geekq.miaosha.rabbitmq.MQSender;
import
com.geekq.miaosha.rabbitmq.MiaoshaMessage
;
import
com.geekq.miaosha.redis.GoodsKey
;
import
com.geekq.miaosha.redis.RedisService
;
import
com.geekq.miaosha.result.CodeMsg
;
import
com.geekq.miaosha.result.Result
;
import
com.geekq.miaosha.service.GoodsService
;
import
com.geekq.miaosha.service.MiaoShaUserService
;
import
com.geekq.miaosha.service.MiaoshaService
;
import
com.geekq.miaosha.service.OrderService
;
import
com.geekq.miaosha.vo.GoodsVo
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
...
...
@@ -36,6 +35,8 @@ import static com.geekq.miaosha.common.enums.ResultStatus.*;
@RequestMapping
(
"/miaosha"
)
public
class
MiaoshaController
implements
InitializingBean
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
MiaoshaController
.
class
);
@Autowired
MiaoShaUserService
userService
;
...
...
@@ -160,10 +161,12 @@ public class MiaoshaController implements InitializingBean {
@RequestMapping
(
value
=
"/verifyCode"
,
method
=
RequestMethod
.
GET
)
@ResponseBody
public
Result
<
String
>
getMiaoshaVerifyCod
(
HttpServletResponse
response
,
MiaoshaUser
user
,
public
Result
GeekQ
<
String
>
getMiaoshaVerifyCod
(
HttpServletResponse
response
,
MiaoshaUser
user
,
@RequestParam
(
"goodsId"
)
long
goodsId
)
{
ResultGeekQ
<
String
>
result
=
ResultGeekQ
.
build
();
if
(
user
==
null
)
{
return
Result
.
error
(
CodeMsg
.
SESSION_ERROR
);
result
.
withError
(
SESSION_ERROR
.
getCode
(),
SESSION_ERROR
.
getMessage
());
return
result
;
}
try
{
BufferedImage
image
=
miaoshaService
.
createVerifyCode
(
user
,
goodsId
);
...
...
@@ -171,13 +174,13 @@ public class MiaoshaController implements InitializingBean {
ImageIO
.
write
(
image
,
"JPEG"
,
out
);
out
.
flush
();
out
.
close
();
return
null
;
return
result
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
Result
.
error
(
CodeMsg
.
MIAOSHA_FAIL
);
logger
.
error
(
"生成验证码错误-----goodsId:{}"
,
goodsId
,
e
);
result
.
withError
(
MIAOSHA_FAIL
.
getCode
(),
MIAOSHA_FAIL
.
getMessage
());
return
result
;
}
}
/**
* 系统初始化
*
...
...
src/main/java/com/geekq/miaosha/controller/OrderController.java
浏览文件 @
e94690a2
...
...
@@ -4,8 +4,6 @@ import com.geekq.miaosha.common.resultbean.ResultGeekQ;
import
com.geekq.miaosha.domain.MiaoshaUser
;
import
com.geekq.miaosha.domain.OrderInfo
;
import
com.geekq.miaosha.redis.RedisService
;
import
com.geekq.miaosha.result.CodeMsg
;
import
com.geekq.miaosha.result.Result
;
import
com.geekq.miaosha.service.GoodsService
;
import
com.geekq.miaosha.service.MiaoShaUserService
;
import
com.geekq.miaosha.service.OrderService
;
...
...
src/main/java/com/geekq/miaosha/exception/GlobleExceptionHandler.java
浏览文件 @
e94690a2
package
com.geekq.miaosha.exception
;
import
com.geekq.miaosha.common.enums.ResultStatus
;
import
com.geekq.miaosha.common.resultbean.ResultGeekQ
;
import
com.geekq.miaosha.result.CodeMsg
;
import
com.geekq.miaosha.result.Result
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.validation.BindException
;
...
...
@@ -17,7 +14,6 @@ import java.util.List;
import
static
com
.
geekq
.
miaosha
.
common
.
enums
.
ResultStatus
.
SESSION_ERROR
;
import
static
com
.
geekq
.
miaosha
.
common
.
enums
.
ResultStatus
.
SYSTEM_ERROR
;
import
static
com
.
geekq
.
miaosha
.
result
.
CodeMsg
.
BIND_ERROR
;
/**
* 拦截异常
...
...
src/main/java/com/geekq/miaosha/result/CodeMsg.java
已删除
100644 → 0
浏览文件 @
3358215b
package
com.geekq.miaosha.result
;
public
class
CodeMsg
{
private
int
code
;
private
String
msg
;
//通用的错误码
public
static
CodeMsg
SUCCESS
=
new
CodeMsg
(
0
,
"success"
);
public
static
CodeMsg
SUCCESS_RESIGETER
=
new
CodeMsg
(
200
,
"注册成功!"
);
public
static
CodeMsg
RESIGETER_FAIL
=
new
CodeMsg
(
300
,
"注册失败!"
);
public
static
CodeMsg
SERVER_ERROR
=
new
CodeMsg
(
500100
,
"服务端异常"
);
public
static
CodeMsg
BIND_ERROR
=
new
CodeMsg
(
500101
,
"参数校验异常:%s"
);
public
static
CodeMsg
REQUEST_ILLEGAL
=
new
CodeMsg
(
500102
,
"请求非法"
);
public
static
CodeMsg
ACCESS_LIMIT_REACHED
=
new
CodeMsg
(
500104
,
"访问太频繁!"
);
//登录模块 5002XX
public
static
CodeMsg
SESSION_ERROR
=
new
CodeMsg
(
500210
,
"Session不存在或者已经失效"
);
public
static
CodeMsg
PASSWORD_EMPTY
=
new
CodeMsg
(
500211
,
"登录密码不能为空"
);
public
static
CodeMsg
MOBILE_EMPTY
=
new
CodeMsg
(
500212
,
"手机号不能为空"
);
public
static
CodeMsg
MOBILE_ERROR
=
new
CodeMsg
(
500213
,
"手机号格式错误"
);
public
static
CodeMsg
MOBILE_NOT_EXIST
=
new
CodeMsg
(
500214
,
"手机号不存在"
);
public
static
CodeMsg
PASSWORD_ERROR
=
new
CodeMsg
(
500215
,
"密码错误"
);
//商品模块 5003XX
//订单模块 5004XX
public
static
CodeMsg
ORDER_NOT_EXIST
=
new
CodeMsg
(
500400
,
"订单不存在"
);
//秒杀模块 5005XX
public
static
CodeMsg
MIAO_SHA_OVER
=
new
CodeMsg
(
500500
,
"商品已经秒杀完毕"
);
public
static
CodeMsg
REPEATE_MIAOSHA
=
new
CodeMsg
(
500501
,
"不能重复秒杀"
);
public
static
CodeMsg
MIAOSHA_FAIL
=
new
CodeMsg
(
500502
,
"秒杀失败"
);
private
CodeMsg
(
)
{
}
private
CodeMsg
(
int
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
int
getCode
()
{
return
code
;
}
public
void
setCode
(
int
code
)
{
this
.
code
=
code
;
}
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
public
CodeMsg
fillArgs
(
Object
...
args
)
{
int
code
=
this
.
code
;
//拼接错误信息
String
message
=
String
.
format
(
this
.
msg
,
args
);
return
new
CodeMsg
(
code
,
message
);
}
@Override
public
String
toString
()
{
return
"CodeMsg [code="
+
code
+
", msg="
+
msg
+
"]"
;
}
}
src/main/java/com/geekq/miaosha/result/Result.java
已删除
100644 → 0
浏览文件 @
3358215b
package
com.geekq.miaosha.result
;
public
class
Result
<
T
>
{
private
int
code
;
private
String
msg
;
private
T
data
;
/**
* 成功时候的调用
*
* @param data
* @param <T>
* @return
*/
public
static
<
T
>
Result
<
T
>
success
(
T
data
)
{
return
new
Result
<
T
>(
data
);
}
/**
* 注册时候调用
*
* @param msg
* @param data
* @param <T>
* @return
*/
public
static
<
T
>
Result
<
T
>
success
(
CodeMsg
msg
)
{
return
new
Result
<
T
>(
CodeMsg
.
SUCCESS_RESIGETER
);
}
/**
* 失败的时候调用
*
* @param cm
* @param <T>
* @return
*/
public
static
<
T
>
Result
<
T
>
error
(
CodeMsg
cm
)
{
return
new
Result
<
T
>(
cm
);
}
// public ResultGeekQ(CodeMsg msg, T data) {
// this.code = msg.getCode();
// this.msg = msg.getMsg();
// this.data = data;
// }
private
Result
(
CodeMsg
cm
)
{
if
(
cm
==
null
)
{
return
;
}
this
.
code
=
cm
.
getCode
();
this
.
msg
=
cm
.
getMsg
();
}
private
Result
(
T
data
)
{
this
.
code
=
0
;
this
.
msg
=
"success"
;
this
.
data
=
data
;
}
public
int
getCode
()
{
return
code
;
}
public
void
setCode
(
int
code
)
{
this
.
code
=
code
;
}
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
public
T
getData
()
{
return
data
;
}
public
void
setData
(
T
data
)
{
this
.
data
=
data
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录