diff --git a/riven-api/src/main/java/cn/axzo/riven/client/req/ListThirdProjectPeopleReq.java b/riven-api/src/main/java/cn/axzo/riven/client/req/ListThirdProjectPeopleReq.java index 17f10c6..1c2eb48 100644 --- a/riven-api/src/main/java/cn/axzo/riven/client/req/ListThirdProjectPeopleReq.java +++ b/riven-api/src/main/java/cn/axzo/riven/client/req/ListThirdProjectPeopleReq.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; import javax.validation.constraints.NotBlank; import java.io.Serializable; @@ -21,10 +22,15 @@ public class ListThirdProjectPeopleReq implements Serializable { @NotBlank(message = "thirdCode不能为空") private String thirdCode; /** - * '三方项目编号' + * '三方项目编号' 此值 和workspaceId 不能都为空 */ - @NotBlank(message = "thirdProjectId不能为空") +// @NotBlank(message = "thirdProjectId不能为空") private String thirdProjectId; + + /** + * workspaceId 。此值 和 三方项目编号,不能都为空 + */ + private Long workspaceId; /** * 三方人员唯一ID */ @@ -36,4 +42,10 @@ public class ListThirdProjectPeopleReq implements Serializable { private Set personIds; private Boolean needThirdPerson; + + public void check() { + if (StringUtils.isBlank(thirdProjectId) && workspaceId == null) { + throw new IllegalArgumentException("workspaceId 和 thirdProjectId 不能都为空"); + } + } } diff --git a/riven-server/src/main/java/cn/axzo/riven/config/exception/ExceptionAdviceHandler.java b/riven-server/src/main/java/cn/axzo/riven/config/exception/ExceptionAdviceHandler.java new file mode 100644 index 0000000..6d9af8f --- /dev/null +++ b/riven-server/src/main/java/cn/axzo/riven/config/exception/ExceptionAdviceHandler.java @@ -0,0 +1,252 @@ +package cn.axzo.riven.config.exception; + +import cn.axzo.apollo.core.exception.ApiException; +import cn.axzo.apollo.core.web.ControllerException; +import cn.axzo.foundation.exception.BusinessException; +import cn.axzo.foundation.result.ApiResult; +import cn.axzo.maokai.api.labour.common.lang.BizException; +import cn.azxo.framework.common.model.CommonResponse; +import cn.azxo.framework.common.utils.LogUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingRequestHeaderException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +import javax.servlet.ServletException; +import javax.validation.ConstraintViolationException; +import java.nio.file.AccessDeniedException; +import java.util.List; + +import static cn.axzo.maokai.api.labour.common.enums.ErrorCodeEnum.FORBIDDEN; +import static cn.axzo.maokai.api.labour.common.enums.ErrorCodeEnum.INVALID_PARAMETER; +import static cn.axzo.maokai.api.labour.common.enums.ErrorCodeEnum.SYSTEM_ERROR; + +/** + * @author cn + * @version 1.0 + * @description + * @date 2022/6/11 15:53 + */ + +@Order(value = 0) +@RestControllerAdvice +@Slf4j +public class ExceptionAdviceHandler { + + @ExceptionHandler(value = cn.axzo.basics.common.exception.ServiceException.class) + public CommonResponse bizException(cn.axzo.basics.common.exception.ServiceException e) { + log.warn("ControllerExceptionHandler.bizException Exception", e); + return CommonResponse.error(e.getErrorCode(), e.getMessage()); + } + + @ExceptionHandler(value = cn.axzo.core.service.ServiceException.class) + public CommonResponse bizException(cn.axzo.core.service.ServiceException e) { + log.warn("ControllerExceptionHandler.bizException Exception", e); + return CommonResponse.error(9998, e.getMessage()); + } + + @ExceptionHandler(value = BizException.class) + public CommonResponse bizException(BizException e) { + log.warn("ControllerExceptionHandler.bizException Exception", e); + return CommonResponse.error(e.getBizCode(), e.getMessage()); + } + + @ExceptionHandler(value = ApiException.class) + public CommonResponse handleApiException(ApiException e) { + log.warn("ControllerExceptionHandler.handleApiException Exception", e); + return CommonResponse.error(e.getCode(), e.getMessage()); + } + + @ExceptionHandler(value = IllegalArgumentException.class) + public CommonResponse handleIllegalArgumentException(IllegalArgumentException e) { + log.warn("ControllerExceptionHandler.handleIllegalArgumentException Exception message", e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), e.getMessage()); + } + + @ExceptionHandler(value = Exception.class) + public CommonResponse handleOtherException(Exception e) { + LogUtil.error(LogUtil.ErrorType.ERROR_SYSTEM, "ControllerExceptionHandler.handleOtherException Exception", e); + return CommonResponse.error(SYSTEM_ERROR.getCode(), SYSTEM_ERROR.getMessage()); + } + + @ExceptionHandler(value = Throwable.class) + public CommonResponse handleThrowableException(Throwable e) { + LogUtil.error(LogUtil.ErrorType.ERROR_SYSTEM, "ControllerExceptionHandler.handleThrowableException Exception", e); + return CommonResponse.error(SYSTEM_ERROR.getCode(), SYSTEM_ERROR.getMessage()); + } + + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public CommonResponse handleArgumentValidException(MethodArgumentNotValidException e){ + log.info("ControllerExceptionHandler.handleArgumentValidException Exception", e); + BindingResult bindingResult = e.getBindingResult(); + StringBuilder errorMsg = new StringBuilder(); + for (FieldError fieldError : bindingResult.getFieldErrors()) { + if (-1 == errorMsg.indexOf(fieldError.getDefaultMessage())) { + errorMsg.append(fieldError.getDefaultMessage()).append(","); + } + } + errorMsg.deleteCharAt(errorMsg.length() - 1); + return CommonResponse.error(INVALID_PARAMETER.getCode(), errorMsg.toString()); + } + + /** + * 捕捉Exception异常 + * + * @param ex + * @return + */ + @ExceptionHandler(BusinessException.class) + public ApiResult exceptionHandler(BusinessException ex) { + log.warn("业务异常", ex); + return ApiResult.error(ex.getErrorCode(), ex.getErrorMsg()); + } + + @ExceptionHandler(value = cn.axzo.apollo.core.service.ServiceException.class) + public CommonResponse handleServiceException(cn.axzo.apollo.core.service.ServiceException e) { + log.error("ControllerExceptionHandler.ServiceException Exception", e); + return CommonResponse.error(SYSTEM_ERROR.getCode(), e.getMessage()); + } + + /** + * 捕捉Exception异常 + * + * @param e + * @return + */ + @ExceptionHandler(DuplicateKeyException.class) + public CommonResponse exceptionHandler(DuplicateKeyException e) { + log.info("重复数据提交", e); + return CommonResponse.error(SYSTEM_ERROR.getCode(), "重复数据提交"); + } + + /** + * 捕捉Exception异常 + * + * @param e + * @return + */ + @ExceptionHandler(ServletException.class) + public CommonResponse exceptionHandler(ServletException e) { + LogUtil.error(LogUtil.ErrorType.ERROR_UNKNOWN, "接口异常", e); + return CommonResponse.error(SYSTEM_ERROR.getCode(), "操作失败,请联系工作人员处理"); + } + /** + * 捕捉Exception异常 + * + * @param e + * @return + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public CommonResponse exceptionHandler(MethodArgumentTypeMismatchException e) { + log.warn("参数错误", e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), "参数错误", null); + } + /** + * 捕捉Exception异常 + * + * @param e + * @return + */ + @ExceptionHandler(ControllerException.class) + public CommonResponse exceptionHandler(ControllerException e) { + LogUtil.error(LogUtil.ErrorType.ERROR_UNKNOWN, "控制层异常", e); + return CommonResponse.error(e.getMessage()); + } + + /** + * 请求方式不正确 + * + * @param e + * @return + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public CommonResponse exceptionHandler(HttpRequestMethodNotSupportedException e) { + log.warn("请求方式不正确", e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), "请求方式不正确", null); + } + + + /** + * 参数验证失败 + * + * @param e + * @return + */ + @ExceptionHandler(BindException.class) + public CommonResponse exceptionHandler(BindException e) { + List allErrors = e.getBindingResult().getAllErrors(); + if (CollectionUtils.isEmpty(allErrors)) { + return CommonResponse.fail("操作失败 请联系系统管理员"); + } + ObjectError objectError = allErrors.get(0); + String objectErrorDefaultMessage = objectError.getDefaultMessage(); + return CommonResponse.fail(objectErrorDefaultMessage); + } + + + /** + * 参数验证失败 + * + * @param e + * @return + */ + @ExceptionHandler(HttpMediaTypeNotSupportedException.class) + public CommonResponse exceptionHandler(HttpMediaTypeNotSupportedException e) { + log.warn(e.getMessage(), e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), "请求的内容格式不正确", null); + } + + /** + * 无权限访问接口 + * + * @param e + * @return + */ + @ExceptionHandler(AccessDeniedException.class) + public CommonResponse handle401(AccessDeniedException e) { + log.warn("您没有权限访问", e); + return CommonResponse.error(FORBIDDEN.getCode(), "您没有权限访问", null); + } + + @ExceptionHandler(MissingServletRequestParameterException.class) + public CommonResponse exceptionHandler(MissingServletRequestParameterException e) { + log.warn("参数错误", e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), "参数错误", null); + } + + @ExceptionHandler(MissingRequestHeaderException.class) + public CommonResponse exceptionHandler(MissingRequestHeaderException e) { + log.warn("参数错误", e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), "参数错误", null); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public CommonResponse exceptionHandler(HttpMessageNotReadableException e) { + log.warn("参数错误", e); + if (e.getMessage().contains("out of range")) { + return CommonResponse.error("参数超出范围"); + } + return CommonResponse.error(INVALID_PARAMETER.getCode(), "参数错误", null); + } + + @ExceptionHandler(ConstraintViolationException.class) + public CommonResponse exceptionHandler(ConstraintViolationException e) { + log.warn("参数错误", e); + return CommonResponse.error(INVALID_PARAMETER.getCode(), + e.getConstraintViolations().iterator().next().getMessage(), null); + } + +} diff --git a/riven-server/src/main/resources/logback-spring.xml b/riven-server/src/main/resources/logback-spring.xml index 922ff24..977ff74 100644 --- a/riven-server/src/main/resources/logback-spring.xml +++ b/riven-server/src/main/resources/logback-spring.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/riven-third/src/main/java/cn/axzo/riven/third/controller/ThirdPartPersonController.java b/riven-third/src/main/java/cn/axzo/riven/third/controller/ThirdPartPersonController.java index 31c453d..af2713b 100644 --- a/riven-third/src/main/java/cn/axzo/riven/third/controller/ThirdPartPersonController.java +++ b/riven-third/src/main/java/cn/axzo/riven/third/controller/ThirdPartPersonController.java @@ -52,8 +52,10 @@ public class ThirdPartPersonController implements ThirdPartPersonApi { @Override public ApiResult> listThirdProjectPeople(ListThirdProjectPeopleReq param) { + param.check(); ThirdProject thirdProject = thirdProjectDao.lambdaQuery().eq(ThirdProject::getThirdCode, param.getThirdCode()) - .eq(ThirdProject::getThirdProjectId, param.getThirdProjectId()) + .eq(StrUtil.isNotBlank(param.getThirdProjectId()), ThirdProject::getThirdProjectId, param.getThirdProjectId()) + .apply(param.getWorkspaceId() != null, " third_project_ext -> '$.workspaceId' = {0} ", param.getWorkspaceId()) .eq(ThirdProject::getIsDelete, TableIsDeleteEnum.NORMAL.value) .one(); if (thirdProject == null){ @@ -64,7 +66,7 @@ public class ThirdPartPersonController implements ThirdPartPersonApi { } List result = thirdProjectPersonDao.lambdaQuery() .eq(ThirdProjectPerson::getThirdCode, param.getThirdCode()) - .eq(ThirdProjectPerson::getThirdProjectId, param.getThirdProjectId()) + .eq(ThirdProjectPerson::getThirdProjectId, thirdProject.getThirdProjectId()) .in(CollUtil.isNotEmpty(param.getThirdUniquePersonIds()), ThirdProjectPerson::getThirdUniquePersonId, param.getThirdUniquePersonIds()) .eq(ThirdProjectPerson::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list() @@ -95,7 +97,7 @@ public class ThirdPartPersonController implements ThirdPartPersonApi { List result = thirdProjectPersonDao.lambdaQuery() .eq(ThirdProjectPerson::getThirdCode, param.getThirdCode()) - .eq(ThirdProjectPerson::getThirdProjectId, param.getThirdProjectId()) + .eq(ThirdProjectPerson::getThirdProjectId, thirdProject.getThirdProjectId()) .in(ThirdProjectPerson::getThirdUniquePersonId, thirdPersonMap.keySet()) .eq(ThirdProjectPerson::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list()