From 847c969d2036533aa58f11b7582265714db4566d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=8E=E8=90=8D?= <2607757018@qq.com>
Date: Wed, 1 Nov 2023 10:28:42 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E5=BC=82=E5=B8=B8?=
=?UTF-8?q?=E6=8D=95=E8=8E=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/backend/pom.xml | 6 ++
.../java/org/example/common/CommonResp.java | 12 ++++
.../example/common/ResponseStatusEnum.java | 63 ++++++++++++++++
.../example/exception/CustomException.java | 41 +++++++++++
.../exception/GlobalExceptionHandler.java | 50 +++++++++++++
.../main/java/org/example/utils/Result.java | 72 +++++++++++++++----
6 files changed, 232 insertions(+), 12 deletions(-)
create mode 100644 code/backend/src/main/java/org/example/common/CommonResp.java
create mode 100644 code/backend/src/main/java/org/example/common/ResponseStatusEnum.java
create mode 100644 code/backend/src/main/java/org/example/exception/CustomException.java
create mode 100644 code/backend/src/main/java/org/example/exception/GlobalExceptionHandler.java
diff --git a/code/backend/pom.xml b/code/backend/pom.xml
index 8a29039..9c3222d 100644
--- a/code/backend/pom.xml
+++ b/code/backend/pom.xml
@@ -58,6 +58,12 @@
1.18.28
+
+ cn.hutool
+ hutool-all
+ 5.7.3
+
+
org.springframework.boot
spring-boot-starter-aop
diff --git a/code/backend/src/main/java/org/example/common/CommonResp.java b/code/backend/src/main/java/org/example/common/CommonResp.java
new file mode 100644
index 0000000..d179605
--- /dev/null
+++ b/code/backend/src/main/java/org/example/common/CommonResp.java
@@ -0,0 +1,12 @@
+package org.example.common;
+
+/**
+ * 返回对象的接口,装饰者模式
+ */
+public interface CommonResp {
+ String getCode(); // 获取响应码
+
+ String getMsg(); // 获取消息
+
+ CommonResp setMsg(String msg); // 设置消息
+}
diff --git a/code/backend/src/main/java/org/example/common/ResponseStatusEnum.java b/code/backend/src/main/java/org/example/common/ResponseStatusEnum.java
new file mode 100644
index 0000000..cd398bb
--- /dev/null
+++ b/code/backend/src/main/java/org/example/common/ResponseStatusEnum.java
@@ -0,0 +1,63 @@
+package org.example.common;
+
+public enum ResponseStatusEnum implements CommonResp{
+
+ SUCCESS("0","请求成功!"),
+ LOGIN_SUCCESS("0", "登录成功!"),
+ LOGOUT_SUCCESS("0", "注销成功!"),
+ ERROR("500","服务器系统错误!"),
+
+ /** 10XX 表示用户错误*/
+ USER_REGISTER_FAILED("1001", "注册失败"),
+ USER_ACCOUNT_EXISTED("1002","用户名已存在"),
+ USER_ACCOUNT_NOT_EXIST("1003","用户名不存在"),
+ USERNAME_PASSWORD_ERROR("1004","用户名或密码错误"),
+ PASSWORD_ERROR("1005","密码错误"),
+ USER_ACCOUNT_EXPIRED("1006","账号过期"),
+ USER_PASSWORD_EXPIRED("1007","密码过期"),
+ USER_ACCOUNT_DISABLE("1008","账号不可用"),
+ USER_ACCOUNT_LOCKED("1009","账号锁定"),
+ USER_NOT_LOGIN("1010","用户未登陆"),
+ USER_NO_PERMISSIONS("1011","用户权限不足"),
+ USER_SESSION_INVALID("1012","会话已超时"),
+ USER_ACCOUNT_LOGIN_IN_OTHER_PLACE("1013","账号超时或账号在另一个地方登陆,建议修改密码"),
+ TOKEN_NOT_VALID("1014","非法Token,请重新登陆"),
+ TOKEN_EXPIRED("1015", "token过期"),
+ AUTHENTICATE_FAIL("1016", "认证失败,无法访问系统资源"),
+
+ REQUEST_BODY_MISSING("1017", "请求数据体缺失"),
+ LOGIN_NOT_ADMIN("1018", "管理员登录失败,不是管理员"),
+
+
+ /** 20XX 表示服务器错误 */
+ PICTURE_UPLOAD_FAILED("2001","上传图片失败"),
+ GIVE_LIKE_FAILED("2002","点赞失败"),
+ PICTURE_LOAD_FAILED("2003","图片加载失败"),
+ UPDATE_USER_INFO_FAILED("2004","修改用户信息失败"),
+ UPDATE_USER_PASSWORD_FAILED("2005","修改密码失败"),
+ ;
+
+ private final String code;
+ private String msg;
+
+ ResponseStatusEnum(String code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ @Override
+ public String getCode() {
+ return this.code;
+ }
+
+ @Override
+ public String getMsg() {
+ return this.msg;
+ }
+
+ @Override
+ public CommonResp setMsg(String msg) {
+ this.msg=msg;
+ return this;
+ }
+}
diff --git a/code/backend/src/main/java/org/example/exception/CustomException.java b/code/backend/src/main/java/org/example/exception/CustomException.java
new file mode 100644
index 0000000..41d80e7
--- /dev/null
+++ b/code/backend/src/main/java/org/example/exception/CustomException.java
@@ -0,0 +1,41 @@
+package org.example.exception;
+
+import org.example.common.CommonResp;
+
+public class CustomException extends RuntimeException implements CommonResp {
+
+ private final CommonResp commonResp;
+
+ public CustomException(CommonResp commonResp) {
+ super(); // 调用父类的无参构造方法
+ this.commonResp = commonResp;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.commonResp.getMsg();
+ }
+
+ // 接收自定义msg的方式构造业务异常
+ public CustomException(String msg, CommonResp commonResp) {
+ super();
+ this.commonResp = commonResp;
+ this.commonResp.setMsg(msg);
+ }
+
+ @Override
+ public String getCode() {
+ return this.commonResp.getCode();
+ }
+
+ @Override
+ public String getMsg() {
+ return this.commonResp.getMsg();
+ }
+
+ @Override
+ public CommonResp setMsg(String msg) {
+ this.commonResp.setMsg(msg);
+ return this;
+ }
+}
diff --git a/code/backend/src/main/java/org/example/exception/GlobalExceptionHandler.java b/code/backend/src/main/java/org/example/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..efc4ea1
--- /dev/null
+++ b/code/backend/src/main/java/org/example/exception/GlobalExceptionHandler.java
@@ -0,0 +1,50 @@
+package org.example.exception;
+
+import cn.hutool.log.Log;
+import cn.hutool.log.LogFactory;
+import cn.hutool.log.level.Level;
+import org.example.common.ResponseStatusEnum;
+import org.example.utils.Result;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+
+@RestControllerAdvice // 返回json
+public class GlobalExceptionHandler {
+
+ private static final Log log = LogFactory.get();
+
+
+ // 统一异常处理@ExceptionHandler,主要用于Exception 运行时异常
+ @ExceptionHandler(RuntimeException.class)
+ public Result handler(RuntimeException e) {
+ log.error("运行时异常:", e);
+ return Result.error("-1", "后台运行异常,请联系系统管理员!");
+ }
+
+ /**
+ * 其他异常
+ * @param e 异常
+ * @return 提示
+ */
+ @ExceptionHandler(Exception.class)
+ public Result handler(Exception e) {
+ log.error("系统异常:", e);
+ return Result.error("-1", "系统异常,请联系系统管理员!");
+ }
+
+ //统一异常处理@ExceptionHandler,主要用于Exception 自定义异常
+ @ExceptionHandler(value = CustomException.class)
+ public Result handler(CustomException e) {
+ log.error("发生业务异常!原因是:{}", e.getMsg());
+ return Result.error(e.getCode(), e.getMsg());
+ }
+
+ @ExceptionHandler(value = HttpMessageNotReadableException.class)
+ public Result handler(HttpMessageNotReadableException exception) {
+ log.log(Level.ERROR, exception.getMessage());
+ return Result.error(ResponseStatusEnum.REQUEST_BODY_MISSING);
+ }
+
+}
diff --git a/code/backend/src/main/java/org/example/utils/Result.java b/code/backend/src/main/java/org/example/utils/Result.java
index abc43ed..16601ac 100644
--- a/code/backend/src/main/java/org/example/utils/Result.java
+++ b/code/backend/src/main/java/org/example/utils/Result.java
@@ -2,15 +2,22 @@ package org.example.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import org.example.common.CommonResp;
+import org.example.common.ResponseStatusEnum;
+import java.util.HashMap;
+
+/**
+ * 响应消息
+ */
@ApiModel(value = "响应结果实体", description = "响应结果实体")
-public class Result {
+public class Result {
@ApiModelProperty(value = "响应提示码")
private String code;
@ApiModelProperty(value = "提示信息")
private String msg;
@ApiModelProperty(value = "响应数据")
- private T data;
+ private Object data = null;
public String getCode() {
return code;
@@ -28,32 +35,41 @@ public class Result {
this.msg = msg;
}
- public T getData() {
+ public Object getData() {
return data;
}
- public void setData(T data) {
+ public void setData(Object data) {
this.data = data;
}
public Result() {
}
- public Result(T data) {
+ public Result(Object data) {
this.data = data;
}
+ public Result(CommonResp commonResp) {
+ this.setCode(commonResp.getCode());
+ this.setMsg(commonResp.getMsg());
+ }
+
public static Result success() {
- Result result = new Result<>();
- result.setCode("0");
- result.setMsg("成功");
+ return Result.success(null);
+ }
+
+ public static Result success(String code, String msg) {
+ Result result = new Result();
+ result.setCode(code);
+ result.setMsg(msg);
return result;
}
- public static Result success(T data) {
- Result result = new Result<>(data);
- result.setCode("0");
- result.setMsg("成功");
+ public static Result success(Object data) {
+ Result result = new Result(data);
+ result.setCode(ResponseStatusEnum.SUCCESS.getCode());
+ result.setMsg(ResponseStatusEnum.SUCCESS.getMsg());
return result;
}
@@ -63,4 +79,36 @@ public class Result {
result.setMsg(msg);
return result;
}
+
+ public static Result error(ResponseStatusEnum responseStatusEnum, Object data) {
+ Result result = new Result(data);
+ result.setCode(responseStatusEnum.getCode());
+ result.setMsg(responseStatusEnum.getMsg());
+ return result;
+ }
+
+ public static Result error(ResponseStatusEnum responseStatusEnum) {
+ return error(responseStatusEnum, null);
+ }
+
+ // 添加数据信息 链式编程
+ public Result put(String key, Object value) {
+ if (this.data == null) {
+ // 新建一个哈希映射,用于存储数据
+ this.data = new HashMap();
+ }
+ // data不为空且不是一个HashMap的实例,则不能put
+ if (!(this.data instanceof HashMap)) return this;
+ ((HashMap) this.data).put(key, value);
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return "Result{" +
+ "code='" + code + '\'' +
+ ", msg='" + msg + '\'' +
+ ", data=" + data +
+ '}';
+ }
}
From cb62dbcf10d70297e2878506912e7204ee76aae8 Mon Sep 17 00:00:00 2001
From: HZXhuang <1966752024@qq.com>
Date: Wed, 1 Nov 2023 10:30:49 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E7=99=BB=E5=BD=95?=
=?UTF-8?q?=E6=B3=A8=E5=86=8C=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 1 +
.../example/controller/UserController.java | 12 ++--
.../java/org/example/service/UserService.java | 4 +-
.../example/service/impl/UserServiceImpl.java | 14 ++--
.../src/components/user/DistributeMap.vue | 68 +++++++++----------
5 files changed, 49 insertions(+), 50 deletions(-)
diff --git a/.gitignore b/.gitignore
index 83d1f55..136464c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.DS_Store
node_modules/
/dist/
+target
npm-debug.log*
yarn-debug.log*
yarn-error.log*
diff --git a/code/backend/src/main/java/org/example/controller/UserController.java b/code/backend/src/main/java/org/example/controller/UserController.java
index 842b42d..a479b91 100644
--- a/code/backend/src/main/java/org/example/controller/UserController.java
+++ b/code/backend/src/main/java/org/example/controller/UserController.java
@@ -1,15 +1,11 @@
package org.example.controller;
import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
-import org.apache.ibatis.annotations.Param;
-import org.example.mapper.UserMapper;
import org.example.pojo.User;
import org.example.service.UserService;
import org.example.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Tag(name="用户",description = "用户相关接口")
@@ -23,13 +19,13 @@ public class UserController {
@PostMapping("/regist")
public Result regist(@RequestBody User user){
System.out.println(user);
- return userService.regist(user);
+ return userService.register(user);
}
@Operation(summary = "登录", description = "用户登录接口")
- @GetMapping("/login")
- public Result login(@Parameter(description = "用户名") @Param("username") String username,@Parameter(description = "用户密码") @Param("password") String password){
- return userService.login(username, password);
+ @PostMapping("/login")
+ public Result login(@RequestBody User user){
+ return userService.login(user);
}
}
diff --git a/code/backend/src/main/java/org/example/service/UserService.java b/code/backend/src/main/java/org/example/service/UserService.java
index 678ebb7..072fba9 100644
--- a/code/backend/src/main/java/org/example/service/UserService.java
+++ b/code/backend/src/main/java/org/example/service/UserService.java
@@ -4,6 +4,6 @@ import org.example.pojo.User;
import org.example.utils.Result;
public interface UserService {
- public Result regist(User user);
- public Result login(String username, String password);
+ public Result register(User user);
+ public Result login(User user);
}
diff --git a/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java b/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java
index ced8c21..a67cee7 100644
--- a/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java
+++ b/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java
@@ -14,7 +14,7 @@ public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
- public Result regist(User user){
+ public Result> register(User user){
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",user.getUsername());
boolean isExist = userMapper.exists(queryWrapper);
@@ -30,13 +30,15 @@ public class UserServiceImpl implements UserService {
}
@Override
- public Result login(String username, String password) {
+ public Result> login(User user) {
+ String username = user.getUsername();
+ String password = user.getPassword();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",username).eq("password",MD5Util.encrypt(password));
- User user = userMapper.selectOne(queryWrapper);
- user.setPassword(null);
- if(user != null){
- return Result.success(user);
+ User res = userMapper.selectOne(queryWrapper);
+ if(res != null){
+ res.setPassword(null);
+ return Result.success(res);
}
return Result.error("-1","账号或者密码错误");
}
diff --git a/code/frontend/src/components/user/DistributeMap.vue b/code/frontend/src/components/user/DistributeMap.vue
index 3aef47d..e378354 100644
--- a/code/frontend/src/components/user/DistributeMap.vue
+++ b/code/frontend/src/components/user/DistributeMap.vue
@@ -25,72 +25,72 @@ export default {
dataList: [
{
name: "常德市",
- value: 3,
- per: 0
+ num: 3,
+ value: 0
},
{
name: "郴州市",
- value: 4,
- per: 0
+ num: 4,
+ value: 0
},
{
name: "衡阳市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},
{
name: "怀化市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},{
name: "娄底市",
- value: 4,
- per: 0
+ num: 4,
+ value: 0
},
{
name: "邵阳市",
- value: 2,
- per: 0
+ num: 2,
+ value: 0
},
{
name: "湘潭市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},
{
name: "湘西土家族苗族自治州",
- value: 6,
- per: 0
+ num: 10,
+ value: 0
},
{
name: "益阳市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},
{
name: "永州市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},
{
name: "岳阳市",
- value: 0,
- per: 0
+ num: 0,
+ value: 0
},
{
name: "张家界市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},
{
name: "长沙市",
- value: 1,
- per: 0
+ num: 1,
+ value: 0
},
{
name: "株洲市",
- value: 2,
- per: 0
+ num: 2,
+ value: 0
},
]
}
@@ -99,18 +99,18 @@ export default {
initWorldMapChart(){
let sum = 0
this.dataList.map((item)=>{
- sum += item.value;
+ sum += item.num;
})
for(let i = 0; i < this.dataList.length; i++){
- this.dataList[i].per = Math.round(this.dataList[i].value / sum * 100)
+ this.dataList[i].value = Math.round(this.dataList[i].num / sum * 100)
}
this.option = {
tooltip: {
//数据格式化
formatter: function(params) {
return (
- params.name + " 共" + params.value + "个,占:"+
- params.data.per+"%"
+ params.name + " 共" + params.data.num + "个,占:"+
+ params.value+"%"
);
},
backgroundColor: 'rgba(19, 25, 47, 0.6)',
@@ -156,9 +156,9 @@ export default {
roam: true, //不开启缩放和平移
zoom: 1, //视角缩放比例
label: {
- show: false,//是否在地图上显示国家名字
+ show: true,//是否在地图上显示地区名字
fontSize: this.screenWidth * 0.0066,
- color: "rgba(201,174,174,0.7)",
+ color: "rgb(13,43,133)",
},
nameMap:{
"常德": "常德市",
From a9ceab422f19d29a8de38ea8ae868613c5023c2d Mon Sep 17 00:00:00 2001
From: HZXhuang <1966752024@qq.com>
Date: Wed, 1 Nov 2023 10:31:59 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E5=B0=8F=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/org/example/service/impl/UserServiceImpl.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java b/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java
index a67cee7..fc478f6 100644
--- a/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java
+++ b/code/backend/src/main/java/org/example/service/impl/UserServiceImpl.java
@@ -14,7 +14,7 @@ public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
- public Result> register(User user){
+ public Result register(User user){
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",user.getUsername());
boolean isExist = userMapper.exists(queryWrapper);
@@ -30,7 +30,7 @@ public class UserServiceImpl implements UserService {
}
@Override
- public Result> login(User user) {
+ public Result login(User user) {
String username = user.getUsername();
String password = user.getPassword();
QueryWrapper queryWrapper = new QueryWrapper<>();