From e9ee9d6b902d5a1d4841a8bc1e95d6a4af74b574 Mon Sep 17 00:00:00 2001 From: Ziin Date: Fri, 1 Aug 2025 21:15:16 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E4=B8=BB=E6=92=AD=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=BB=9F=E4=B8=80=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.cache/.Apifox_Helper/.toolWindow.db | Bin 0 -> 172032 bytes .idea/ApifoxUploaderProjectSetting.xml | 6 ++ .idea/dataSources.xml | 10 ++- .xcodemap/config/xcodemap-class-filter.yaml | 23 ++++++ .../Anchors/controller/AnchorsController.java | 51 +++---------- .../Anchors/service/AnchorsService.java | 20 +++++ .../Anchors/service/AnchorsServiceImpl.java | 69 ++++++++++++++++++ .../java/vvpkassistant/Data/ResponseData.java | 43 ++++++----- .../controller/FunctionConfigController.java | 4 +- .../SystemMessageController.java | 4 +- .../{ => mapper}/SystemMessageDao.java | 3 +- .../{ => model}/SystemMessage.java | 2 +- .../User/controller/UserController.java | 36 ++++----- .../chat/controller/ChatController.java | 2 +- .../java/vvpkassistant/common/ErrorCode.java | 44 +++++++++++ .../config/FunctionConfigHolder.java | 2 +- .../exception/BusinessException.java | 37 ++++++++++ .../exception/GlobalExceptionHandler.java | 33 +++++++++ .../vvpkassistant/exception/ThrowUtils.java | 46 ++++++++++++ .../pk/controller/PkController.java | 24 +++--- src/main/resources/application.yml | 2 +- target/classes/application.yml | 2 +- 22 files changed, 365 insertions(+), 98 deletions(-) create mode 100644 .idea/.cache/.Apifox_Helper/.toolWindow.db create mode 100644 .idea/ApifoxUploaderProjectSetting.xml create mode 100644 .xcodemap/config/xcodemap-class-filter.yaml create mode 100644 src/main/java/vvpkassistant/Anchors/service/AnchorsService.java create mode 100644 src/main/java/vvpkassistant/Anchors/service/AnchorsServiceImpl.java rename src/main/java/vvpkassistant/SystemMessage/{ => controller}/SystemMessageController.java (90%) rename src/main/java/vvpkassistant/SystemMessage/{ => mapper}/SystemMessageDao.java (83%) rename src/main/java/vvpkassistant/SystemMessage/{ => model}/SystemMessage.java (90%) create mode 100644 src/main/java/vvpkassistant/common/ErrorCode.java create mode 100644 src/main/java/vvpkassistant/exception/BusinessException.java create mode 100644 src/main/java/vvpkassistant/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/vvpkassistant/exception/ThrowUtils.java diff --git a/.idea/.cache/.Apifox_Helper/.toolWindow.db b/.idea/.cache/.Apifox_Helper/.toolWindow.db new file mode 100644 index 0000000000000000000000000000000000000000..c96c13c72e32e8813f313f3f881007ebc7325c98 GIT binary patch literal 172032 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 + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 2f8893c..8effc3a 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -1,11 +1,17 @@ - + mysql.8 true + true com.mysql.cj.jdbc.Driver - jdbc:mysql://120.26.251.180:3326/vv_assistant + jdbc:mysql://localhost:3306/vv_assistant?allowMultiQueries=true + + + + + $ProjectFileDir$ diff --git a/.xcodemap/config/xcodemap-class-filter.yaml b/.xcodemap/config/xcodemap-class-filter.yaml new file mode 100644 index 0000000..7667b5c --- /dev/null +++ b/.xcodemap/config/xcodemap-class-filter.yaml @@ -0,0 +1,23 @@ +autoDetectedPackages: +- vvpkassistant +enableAutoDetect: true +entryDisplayConfig: + excludedPathPatterns: [] + skipJsCss: true +funcDisplayConfig: + skipConstructors: false + skipFieldAccess: true + skipFieldChange: true + skipGetters: false + skipNonProjectPackages: false + skipPrivateMethods: false + skipSetters: false +ignoreSameClassCall: null +ignoreSamePackageCall: null +includedPackagePrefixes: null +includedParentClasses: null +name: xcodemap-filter +recordMode: all +sourceDisplayConfig: + color: blue +startOnDebug: false diff --git a/src/main/java/vvpkassistant/Anchors/controller/AnchorsController.java b/src/main/java/vvpkassistant/Anchors/controller/AnchorsController.java index d46a526..d2f4e9d 100644 --- a/src/main/java/vvpkassistant/Anchors/controller/AnchorsController.java +++ b/src/main/java/vvpkassistant/Anchors/controller/AnchorsController.java @@ -1,80 +1,51 @@ package vvpkassistant.Anchors.controller; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import vvpkassistant.Anchors.mapper.AnchorDao; import vvpkassistant.Anchors.model.AnchorModel; +import vvpkassistant.Anchors.service.AnchorsService; import vvpkassistant.Data.ResponseData; -import vvpkassistant.Data.ResponseInfo; -import vvpkassistant.pk.mapper.PkRecordDao; +import vvpkassistant.common.ErrorCode; -import java.util.List; +import javax.annotation.Resource; import java.util.Map; @RestController @RequestMapping("anchor") public class AnchorsController { - @Autowired - private AnchorDao anchorDao; + @Resource + private AnchorsService anchorsService; - @Autowired - private PkRecordDao recordDao; // 添加新主播 @PostMapping("add") public ResponseData addNewAnchor(@RequestBody AnchorModel model) { - //查询是否存在重复主播 - int r = anchorDao.selectAnchorWithAnchorIdAndUserId(model.getAnchorId(), model.getCreateUserId()); - if (r != 0) { - return ResponseData.error(ResponseInfo.ERROR,"该主播已存在"); - } - int insert = anchorDao.insert(model); - return insert == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,"添加失败"); + return anchorsService.addNewAnchor(model) == 1 ? ResponseData.success("") : ResponseData.error(ErrorCode.ADD_FAILED); } // 查询我的主播列表 @PostMapping("list") public ResponseData myAnchorList(@RequestBody Map map) { Integer userId = map.get("id"); - List anchorModels = anchorDao.selectMyAnchor(userId); - return ResponseData.success(anchorModels); + return ResponseData.success(anchorsService.selectMyAnchor(userId)); } // 删除我的主播 @PostMapping("deleteMyAnchor") public ResponseData deleteMyAnchor(@RequestBody Map map) { Integer id = map.get("id"); - AnchorModel anchorModel = anchorDao.selectById(id); - try { - String anchorId = anchorModel.getAnchorId(); - // 根据主播id查询该主播是否存在pk记录 - int i = recordDao.existsPkRecordByAnchor(anchorId); - if (i > 0) { - return ResponseData.error(ResponseInfo.ERROR,"该主播已有pk记录。无法删除"); - } - int r = anchorDao.deleteById(id); - return r == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); - } catch (Exception e) { - return ResponseData.error(ResponseInfo.ERROR,"非法数据,操作失败"); - } + return anchorsService.deleteMyAnchor(id) == 1 ? ResponseData.success(""):ResponseData.error(ErrorCode.DELETE_FAILED ); } // 更新主播信息 @PostMapping("updateAnchorInfo") public ResponseData updateAnchorInfo(@RequestBody AnchorModel model) { - // 查询该主播是否存在记录 - int i = recordDao.existsPkRecordByAnchor(model.getAnchorId()); - if (i > 0) { - return ResponseData.error(ResponseInfo.ERROR,"该主播已有pk记录。无法修改信息"); - } - int r = anchorDao.updateById(model); - return r == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); + + return anchorsService.updateAnchorInfo(model) == 1 ? ResponseData.success(""):ResponseData.error(ErrorCode.UPDATE_FAILED); + } - - } diff --git a/src/main/java/vvpkassistant/Anchors/service/AnchorsService.java b/src/main/java/vvpkassistant/Anchors/service/AnchorsService.java new file mode 100644 index 0000000..727c61b --- /dev/null +++ b/src/main/java/vvpkassistant/Anchors/service/AnchorsService.java @@ -0,0 +1,20 @@ +package vvpkassistant.Anchors.service; + +import vvpkassistant.Anchors.model.AnchorModel; +import vvpkassistant.Data.ResponseData; + +import java.util.List; + +/* + * @author: ziin + * @date: 2025/8/1 19:59 + */ +public interface AnchorsService { + Integer addNewAnchor(AnchorModel model); + + List selectMyAnchor(Integer userId); + + Integer deleteMyAnchor(Integer id); + + Integer updateAnchorInfo(AnchorModel model); +} diff --git a/src/main/java/vvpkassistant/Anchors/service/AnchorsServiceImpl.java b/src/main/java/vvpkassistant/Anchors/service/AnchorsServiceImpl.java new file mode 100644 index 0000000..8565e8a --- /dev/null +++ b/src/main/java/vvpkassistant/Anchors/service/AnchorsServiceImpl.java @@ -0,0 +1,69 @@ +package vvpkassistant.Anchors.service; + +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import vvpkassistant.Anchors.mapper.AnchorDao; +import vvpkassistant.Anchors.model.AnchorModel; +import vvpkassistant.Data.ResponseData; +import vvpkassistant.Data.ResponseInfo; +import vvpkassistant.common.ErrorCode; +import vvpkassistant.exception.BusinessException; +import vvpkassistant.pk.mapper.PkRecordDao; + +import javax.annotation.Resource; +import java.util.List; + +/* + * @author: ziin + * @date: 2025/8/1 19:59 + */ +@Service +public class AnchorsServiceImpl implements AnchorsService { + + + @Resource + private AnchorDao anchorDao; + + @Resource + private PkRecordDao recordDao; + @Override + public Integer addNewAnchor(AnchorModel model) { + //查询是否存在重复主播 + int r = anchorDao.selectAnchorWithAnchorIdAndUserId(model.getAnchorId(), model.getCreateUserId()); + if (r != 0) { + throw new BusinessException(ErrorCode.ANCHOR_ALREADY_EXISTS); + } + return anchorDao.insert(model); + } + + + @Override + public List selectMyAnchor(Integer userId) { + return anchorDao.selectMyAnchor(userId); + } + + @Override + public Integer deleteMyAnchor(Integer id) { + AnchorModel anchorModel = anchorDao.selectById(id); + if (anchorModel == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR,"主播不存在"); + } + String anchorId = anchorModel.getAnchorId(); + // 根据主播id查询该主播是否存在pk记录 + int i = recordDao.existsPkRecordByAnchor(anchorId); + if (i > 0) { + throw new BusinessException(ErrorCode.ANCHOR_HAS_PKRECORD,"该主播已有pk记录。无法删除"); + } + return anchorDao.deleteById(id); + } + + @Override + public Integer updateAnchorInfo(AnchorModel model) { + // 查询该主播是否存在记录 + int i = recordDao.existsPkRecordByAnchor(model.getAnchorId()); + if (i > 0) { + throw new BusinessException(ErrorCode.ANCHOR_HAS_PKRECORD,"该主播已有pk记录。无法修改信息"); + } + return anchorDao.updateById(model); + } +} diff --git a/src/main/java/vvpkassistant/Data/ResponseData.java b/src/main/java/vvpkassistant/Data/ResponseData.java index a4b1c06..44ca361 100644 --- a/src/main/java/vvpkassistant/Data/ResponseData.java +++ b/src/main/java/vvpkassistant/Data/ResponseData.java @@ -1,36 +1,45 @@ package vvpkassistant.Data; import lombok.Data; import org.springframework.lang.Nullable; +import vvpkassistant.common.ErrorCode; + +import java.io.Serializable; @Data -public class ResponseData { +public class ResponseData implements Serializable { // 状态码 - T data = null; + private T data ; public String msg; public Integer code; - ResponseData() {} + public ResponseData(int code, T data,String message) { + this.code = code; + this.data = data; + this.msg = message; + } + + public ResponseData(int code, T data) { + this(code,data,""); + } + + public ResponseData(ErrorCode errorCode) { + this(errorCode.getCode(), null, errorCode.getMessage()); + } // 成功的返回方法 - public static ResponseData success(@Nullable T param) { - ResponseInfo info = ResponseInfo.SUCCESS; - ResponseData data = new ResponseData<>(); - data.setData(param); - data.setCode(info.getCode()); - data.setMsg(info.getDesc()); - return data; + public static ResponseData success(T data) { + return new ResponseData<>(ResponseInfo.SUCCESS.getCode(),data,"ok"); } // 返回错误的方法 - public static ResponseData error(ResponseInfo info, @Nullable String msg) { - ResponseData data = new ResponseData<>(); - data.msg = msg != null ? msg : info.getDesc(); - data.code = info.getCode(); - data.data = null; - return data; + public static ResponseData error(int code,String message) { + return new ResponseData<>(code, message); + } + + public static ResponseData error(ErrorCode errorCode) { + return new ResponseData<>(errorCode); } - } diff --git a/src/main/java/vvpkassistant/FunctionConfig/controller/FunctionConfigController.java b/src/main/java/vvpkassistant/FunctionConfig/controller/FunctionConfigController.java index 9cf147a..9dcdf58 100644 --- a/src/main/java/vvpkassistant/FunctionConfig/controller/FunctionConfigController.java +++ b/src/main/java/vvpkassistant/FunctionConfig/controller/FunctionConfigController.java @@ -37,7 +37,7 @@ public class FunctionConfigController { boolean isDuplicate = FunctionConfigHolder.CONFIGS.stream() .anyMatch(config -> name.equals(config.getFunctionName())); if (isDuplicate) { - return ResponseData.error(ResponseInfo.ERROR,"配置名称重复"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"配置名称重复"); }else { configMapper.insert(newModel); FunctionConfigHolder.CONFIGS.add(newModel); @@ -52,7 +52,7 @@ public class FunctionConfigController { FunctionConfigHolder.CONFIGS.removeIf(c -> model.getId().equals(c.getId())); return ResponseData.success(""); }else { - return ResponseData.error(ResponseInfo.ERROR,null); + return ResponseData.error(ResponseInfo.ERROR.getCode(),null); } } diff --git a/src/main/java/vvpkassistant/SystemMessage/SystemMessageController.java b/src/main/java/vvpkassistant/SystemMessage/controller/SystemMessageController.java similarity index 90% rename from src/main/java/vvpkassistant/SystemMessage/SystemMessageController.java rename to src/main/java/vvpkassistant/SystemMessage/controller/SystemMessageController.java index 7e90e3e..e724b34 100644 --- a/src/main/java/vvpkassistant/SystemMessage/SystemMessageController.java +++ b/src/main/java/vvpkassistant/SystemMessage/controller/SystemMessageController.java @@ -1,4 +1,4 @@ -package vvpkassistant.SystemMessage; +package vvpkassistant.SystemMessage.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -6,6 +6,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import vvpkassistant.Data.ResponseData; +import vvpkassistant.SystemMessage.mapper.SystemMessageDao; +import vvpkassistant.SystemMessage.model.SystemMessage; import vvpkassistant.Tools.VVTools; import java.util.List; diff --git a/src/main/java/vvpkassistant/SystemMessage/SystemMessageDao.java b/src/main/java/vvpkassistant/SystemMessage/mapper/SystemMessageDao.java similarity index 83% rename from src/main/java/vvpkassistant/SystemMessage/SystemMessageDao.java rename to src/main/java/vvpkassistant/SystemMessage/mapper/SystemMessageDao.java index 73e559c..2dc1898 100644 --- a/src/main/java/vvpkassistant/SystemMessage/SystemMessageDao.java +++ b/src/main/java/vvpkassistant/SystemMessage/mapper/SystemMessageDao.java @@ -1,9 +1,10 @@ -package vvpkassistant.SystemMessage; +package vvpkassistant.SystemMessage.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import vvpkassistant.SystemMessage.model.SystemMessage; import java.util.List; diff --git a/src/main/java/vvpkassistant/SystemMessage/SystemMessage.java b/src/main/java/vvpkassistant/SystemMessage/model/SystemMessage.java similarity index 90% rename from src/main/java/vvpkassistant/SystemMessage/SystemMessage.java rename to src/main/java/vvpkassistant/SystemMessage/model/SystemMessage.java index 4dd7082..919b5cc 100644 --- a/src/main/java/vvpkassistant/SystemMessage/SystemMessage.java +++ b/src/main/java/vvpkassistant/SystemMessage/model/SystemMessage.java @@ -1,4 +1,4 @@ -package vvpkassistant.SystemMessage; +package vvpkassistant.SystemMessage.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/src/main/java/vvpkassistant/User/controller/UserController.java b/src/main/java/vvpkassistant/User/controller/UserController.java index 445e737..92dbc1f 100644 --- a/src/main/java/vvpkassistant/User/controller/UserController.java +++ b/src/main/java/vvpkassistant/User/controller/UserController.java @@ -46,11 +46,11 @@ public class UserController { public ResponseData inputUserInfo(@RequestBody Map param) { if (!param.containsKey("code")) { - return ResponseData.error(ResponseInfo.ERROR, "code不能为空"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "code不能为空"); } if (!param.containsKey("id")) { - return ResponseData.error(ResponseInfo.ERROR, "id不能为空"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "id不能为空"); } //获取前端传递过来的code @@ -64,23 +64,23 @@ public class UserController { Integer errcode = Integer.valueOf(wx_result.get("errcode").toString()); if (errcode == 45011) { - return ResponseData.error(ResponseInfo.ERROR, "API 调用太频繁,请稍候再试。"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "API 调用太频繁,请稍候再试。"); } if (errcode == 40029) { - return ResponseData.error(ResponseInfo.ERROR, "js_code 无效"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "js_code 无效"); } if (errcode == 40226) { - return ResponseData.error(ResponseInfo.ERROR, "该账号为风险用户。禁止登录小程序"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "该账号为风险用户。禁止登录小程序"); } if (errcode == -1) { - return ResponseData.error(ResponseInfo.ERROR, "系统繁忙"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "系统繁忙"); } if (!wx_result.containsKey("openid")) { - return ResponseData.error(ResponseInfo.ERROR, "获取用户信息失败,请稍后再试。"); + return ResponseData.error(ResponseInfo.ERROR.getCode(), "获取用户信息失败,请稍后再试。"); } } @@ -111,7 +111,7 @@ public class UserController { return ResponseData.success(result); } - return ResponseData.error(ResponseInfo.ERROR,"未知错误"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"未知错误"); } // 手机号登录 / 注册 @@ -119,14 +119,14 @@ public class UserController { public ResponseData loginWithPhoneNumber(@RequestBody Map param) { if (!param.containsKey("code")) { - return ResponseData.error(ResponseInfo.ERROR,"code不能为空"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"code不能为空"); } String code = param.get("code").toString(); String phoneNumber = vvRequester.queryPhoneNumber(code); if (phoneNumber.isEmpty()) { - return ResponseData.error(ResponseInfo.ERROR,"手机号码无法查询"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"手机号码无法查询"); } // 查询是否存在用户。如果用户存在直接返回 如果用户不存在则新建用户 @@ -181,7 +181,7 @@ public class UserController { Map result = new HashMap<>(); result.put("info", userDao.selectById(map.get("id").toString())); result.put("newAccount", false); - return i == 1 ? ResponseData.success(result) : ResponseData.error(ResponseInfo.ERROR, ""); + return i == 1 ? ResponseData.success(result) : ResponseData.error(ResponseInfo.ERROR.getCode(), ""); } // 获取用户信息 @@ -221,7 +221,7 @@ public class UserController { // 别人邀请我的pk数据 return ResponseData.success(userDao.getMyGuestPkList(id, page * size, size)); } - return ResponseData.error(ResponseInfo.ERROR,"未知错误"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"未知错误"); } @@ -239,7 +239,7 @@ public class UserController { Integer userId = map.get("userId"); int i = userDao.checkSignStatus(userId); if (i != 0) { - return ResponseData.error(ResponseInfo.ERROR,"当天已签到"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"当天已签到"); } int result = userDao.signIn(userId); @@ -258,7 +258,7 @@ public class UserController { coinRecordsDao.insert(coinRecords); return ResponseData.success(null); }else { - return ResponseData.error(ResponseInfo.ERROR,null); + return ResponseData.error(ResponseInfo.ERROR.getCode(),null); } } @@ -305,13 +305,13 @@ public class UserController { // 返回给前端数据 return ResponseData.success(info); }else { - return ResponseData.error(ResponseInfo.ERROR,null); + return ResponseData.error(ResponseInfo.ERROR.getCode(),null); } }else { - return ResponseData.error(ResponseInfo.ERROR,String.format("积分不足,需要%d积分",totalCoin)); + return ResponseData.error(ResponseInfo.ERROR.getCode(),String.format("积分不足,需要%d积分",totalCoin)); } }else { - return ResponseData.error(ResponseInfo.ERROR,"用户不存在"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"用户不存在"); } } @@ -345,7 +345,7 @@ public class UserController { coinRecordsDao.insert(coinRecords); return ResponseData.success(String.format("操作成功,返还%d积分",totalCoin)); }else { - return ResponseData.error(ResponseInfo.ERROR,null); + return ResponseData.error(ResponseInfo.ERROR.getCode(),null); } } diff --git a/src/main/java/vvpkassistant/chat/controller/ChatController.java b/src/main/java/vvpkassistant/chat/controller/ChatController.java index 836bd6b..577b4e7 100644 --- a/src/main/java/vvpkassistant/chat/controller/ChatController.java +++ b/src/main/java/vvpkassistant/chat/controller/ChatController.java @@ -22,7 +22,7 @@ public class ChatController { @PostMapping("add") public ResponseData add(@RequestBody ChatModel model) { int insert = chatDao.insert(model); - return insert == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); + return insert == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } //根据ip查询数据 diff --git a/src/main/java/vvpkassistant/common/ErrorCode.java b/src/main/java/vvpkassistant/common/ErrorCode.java new file mode 100644 index 0000000..f138388 --- /dev/null +++ b/src/main/java/vvpkassistant/common/ErrorCode.java @@ -0,0 +1,44 @@ +package vvpkassistant.common; + +/** + * 自定义错误码 + * + * @author 程序员鱼皮 + * @from 编程导航知识星球 + */ +public enum ErrorCode { + + SUCCESS(0, "ok"), + ADD_FAILED(1, "添加失败"), + DELETE_FAILED(2, "删除失败"), + UPDATE_FAILED(2, "删除失败"), + ANCHOR_ALREADY_EXISTS(101,"主播已存在"), + ANCHOR_HAS_PKRECORD(102,"主播存在PK记录"), + SYSTEM_ERROR(50000, "系统错误"), + PARAMS_ERROR(40000, "请求参数错误") + ; + + /** + * 状态码 + */ + private final int code; + + /** + * 信息 + */ + private final String message; + + ErrorCode(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} diff --git a/src/main/java/vvpkassistant/config/FunctionConfigHolder.java b/src/main/java/vvpkassistant/config/FunctionConfigHolder.java index 34143ac..a316318 100644 --- a/src/main/java/vvpkassistant/config/FunctionConfigHolder.java +++ b/src/main/java/vvpkassistant/config/FunctionConfigHolder.java @@ -13,7 +13,7 @@ import java.util.concurrent.CopyOnWriteArrayList; @RequiredArgsConstructor public class FunctionConfigHolder { // 线程安全的全局配置容器 - static public final List CONFIGS = new CopyOnWriteArrayList<>(); + public static final List CONFIGS = new CopyOnWriteArrayList<>(); @Autowired private FunctionConfigMapper configMapper; diff --git a/src/main/java/vvpkassistant/exception/BusinessException.java b/src/main/java/vvpkassistant/exception/BusinessException.java new file mode 100644 index 0000000..435cd6f --- /dev/null +++ b/src/main/java/vvpkassistant/exception/BusinessException.java @@ -0,0 +1,37 @@ +package vvpkassistant.exception; + + +import vvpkassistant.common.ErrorCode; + +/** + * 自定义异常类 + * + * @author 程序员鱼皮 + * @from 编程导航知识星球 + */ +public class BusinessException extends RuntimeException { + + /** + * 错误码 + */ + private final int code; + + public BusinessException(int code, String message) { + super(message); + this.code = code; + } + + public BusinessException(ErrorCode errorCode) { + super(errorCode.getMessage()); + this.code = errorCode.getCode(); + } + + public BusinessException(ErrorCode errorCode, String message) { + super(message); + this.code = errorCode.getCode(); + } + + public int getCode() { + return code; + } +} diff --git a/src/main/java/vvpkassistant/exception/GlobalExceptionHandler.java b/src/main/java/vvpkassistant/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..30fa00c --- /dev/null +++ b/src/main/java/vvpkassistant/exception/GlobalExceptionHandler.java @@ -0,0 +1,33 @@ +package vvpkassistant.exception; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import vvpkassistant.Data.ResponseData; +import vvpkassistant.Data.ResponseInfo; +import vvpkassistant.common.ErrorCode; + +/** + * 全局异常处理器 + * + * @author 程序员鱼皮 + * @from 编程导航知识星球 + */ +@RestControllerAdvice +@Slf4j +public class GlobalExceptionHandler { + + @ExceptionHandler(BusinessException.class) + public ResponseData businessExceptionHandler(BusinessException e) { + log.error("BusinessException", e); + return ResponseData.error(e.getCode(), e.getMessage()); + } + + @ExceptionHandler(RuntimeException.class) + public ResponseData runtimeExceptionHandler(RuntimeException e) { + log.error("RuntimeException", e); + return ResponseData.error(ErrorCode.SYSTEM_ERROR); + } + + +} diff --git a/src/main/java/vvpkassistant/exception/ThrowUtils.java b/src/main/java/vvpkassistant/exception/ThrowUtils.java new file mode 100644 index 0000000..f8bed83 --- /dev/null +++ b/src/main/java/vvpkassistant/exception/ThrowUtils.java @@ -0,0 +1,46 @@ +package vvpkassistant.exception; + + +import vvpkassistant.common.ErrorCode; + +/** + * 抛异常工具类 + * + * @author 程序员鱼皮 + * @from 编程导航知识星球 + */ +public class ThrowUtils { + + /** + * 条件成立则抛异常 + * + * @param condition + * @param runtimeException + */ + public static void throwIf(boolean condition, RuntimeException runtimeException) { + if (condition) { + throw runtimeException; + } + } + + /** + * 条件成立则抛异常 + * + * @param condition + * @param errorCode + */ + public static void throwIf(boolean condition, ErrorCode errorCode) { + throwIf(condition, new BusinessException(errorCode)); + } + + /** + * 条件成立则抛异常 + * + * @param condition + * @param errorCode + * @param message + */ + public static void throwIf(boolean condition, ErrorCode errorCode, String message) { + throwIf(condition, new BusinessException(errorCode, message)); + } +} diff --git a/src/main/java/vvpkassistant/pk/controller/PkController.java b/src/main/java/vvpkassistant/pk/controller/PkController.java index cbaa740..3a633ff 100644 --- a/src/main/java/vvpkassistant/pk/controller/PkController.java +++ b/src/main/java/vvpkassistant/pk/controller/PkController.java @@ -63,11 +63,11 @@ public class PkController { // 判断该主播在当日是否已发布过pk信息 if (pkInfoModels.size() > 0) { - return ResponseData.error(ResponseInfo.ERROR,"该主播当日已有pk信息"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"该主播当日已有pk信息"); } int insert = pkDao.insert(pkModel); - return insert == 1 ? ResponseData.success(pkModel) : ResponseData.error(ResponseInfo.ERROR,null); + return insert == 1 ? ResponseData.success(pkModel) : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } // 更新pk信息 @@ -124,7 +124,7 @@ public class PkController { // 更新pk邀请记录 int update = recordDao.updateById(recordModel); - return update == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); + return update == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } // 创建PK记录 @@ -137,12 +137,12 @@ public class PkController { Integer dataCount = recordDao.getPendingInvitations(anchorIdA, anchorIdB); if (dataCount > 0) { - return ResponseData.error(ResponseInfo.ERROR,"已存在一条未处理的pk申请,不能重复发送,"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"已存在一条未处理的pk申请,不能重复发送,"); } record.setPkStatus(0); int insert = recordDao.insert(record); - return insert == 1 ? ResponseData.success(record) : ResponseData.error(ResponseInfo.ERROR,null); + return insert == 1 ? ResponseData.success(record) : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } // pk列表 @@ -220,7 +220,7 @@ public class PkController { PkInfoModel pkInfoModel = pkDao.selectById(id); if (pkInfoModel == null) { - return ResponseData.error(ResponseInfo.ERROR,"该信息不存在"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"该信息不存在"); } if (from == 1) { @@ -239,7 +239,7 @@ public class PkController { } return ResponseData.success(pkInfoModel); }else { - return ResponseData.error(ResponseInfo.ERROR,"当前信息已无效"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"当前信息已无效"); } }else{ Integer isHave = pkDao.checkIfUnfinishedPKExistsWithAnchor(userId, pkInfoModel.getAnchorId()); @@ -259,18 +259,18 @@ public class PkController { PkInfoModel pkInfoModel = pkDao.selectById(id); if (pkInfoModel.getPinExpireTime() > VVTools.currentTimeStamp()) { - return ResponseData.error(ResponseInfo.ERROR,"该信息在置顶中。如要删除清先取消置顶"); + return ResponseData.error(ResponseInfo.ERROR.getCode(),"该信息在置顶中。如要删除清先取消置顶"); } Integer result = pkDao.deletePkDataWithId(id); - return result == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,"删除数据失败"); + return result == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),"删除数据失败"); } //修改pk信息内容 @PostMapping("updatePkInfoById") public ResponseData updatePkInfoById(@RequestBody PkInfoModel infoModel) { int result = pkDao.updateById(infoModel); - return result == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); + return result == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } // 根据id查询pk记录 @@ -318,7 +318,7 @@ public class PkController { @PostMapping("updatePkRecordInfo") public ResponseData updatePkRecordInfo(@RequestBody PkRecord record) { int i = recordDao.updateById(record); - return i == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); + return i == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } // 插入pk明细表数据 @@ -326,7 +326,7 @@ public class PkController { public ResponseData insert(@RequestBody PkRecordDetail detail) { detail.setCreateTime(VVTools.currentTimeStamp()); int insert = detailDao.insert(detail); - return insert == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR,null); + return insert == 1 ? ResponseData.success("") : ResponseData.error(ResponseInfo.ERROR.getCode(),null); } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 05e7aa7..016bac5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: spring: profiles: - active: prd + active: local diff --git a/target/classes/application.yml b/target/classes/application.yml index 05e7aa7..016bac5 100644 --- a/target/classes/application.yml +++ b/target/classes/application.yml @@ -3,7 +3,7 @@ server: spring: profiles: - active: prd + active: local