|  | @@ -26,97 +26,98 @@ import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  |  import java.net.URLEncoder;
 | 
	
		
			
				|  |  |  import java.util.HashMap;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  | +import java.util.Optional;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @ControllerAdvice
 | 
	
		
			
				|  |  |  public class BaseController {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	private final static Logger logger = LoggerFactory.getLogger(BaseController.class);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> succeed(T object) {
 | 
	
		
			
				|  |  | -		return getResponseData(true, HttpStatus.OK, object, "");
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> succeed() {
 | 
	
		
			
				|  |  | -		return getResponseData(true, HttpStatus.OK, null, "");
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> succeedData(T obj) {
 | 
	
		
			
				|  |  | -		return getResponseData(true, HttpStatus.OK, obj, "操作成功");
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> warned(String message) {
 | 
	
		
			
				|  |  | -		return failed(HttpStatus.MULTI_STATUS, message);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> failed() {
 | 
	
		
			
				|  |  | -		return failed("");
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> failed(String msg) {
 | 
	
		
			
				|  |  | -		return failed(HttpStatus.INTERNAL_SERVER_ERROR, msg);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
 | 
	
		
			
				|  |  | -		return getResponseData(false, statusCode, null, msg);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
 | 
	
		
			
				|  |  | -		return getResponseData(false, statusCode, data, msg);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
 | 
	
		
			
				|  |  | -		HttpResponseResult<T> obj = new HttpResponseResult<T>();
 | 
	
		
			
				|  |  | -		obj.setStatus(status);
 | 
	
		
			
				|  |  | -		obj.setCode(statusCode.value());
 | 
	
		
			
				|  |  | -		obj.setData(data);
 | 
	
		
			
				|  |  | -		obj.setMsg(message);
 | 
	
		
			
				|  |  | -		return obj;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	private static <T> HttpResponseResult<T> getResponseData(boolean status, int statusCode, T data, String message) {
 | 
	
		
			
				|  |  | -		HttpResponseResult<T> obj = new HttpResponseResult<T>();
 | 
	
		
			
				|  |  | -		obj.setStatus(status);
 | 
	
		
			
				|  |  | -		obj.setCode(statusCode);
 | 
	
		
			
				|  |  | -		obj.setData(data);
 | 
	
		
			
				|  |  | -		obj.setMsg(message);
 | 
	
		
			
				|  |  | -		return obj;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * 处理一般异常
 | 
	
		
			
				|  |  | -	 *
 | 
	
		
			
				|  |  | -	 * @param ex
 | 
	
		
			
				|  |  | -	 * @param request
 | 
	
		
			
				|  |  | -	 * @return
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	@ExceptionHandler(Exception.class)
 | 
	
		
			
				|  |  | -	public HttpResponseResult<String> handleException(Exception ex, HttpServletRequest request) {
 | 
	
		
			
				|  |  | -		Throwable e = ExceptionUtils.getRootCause(ex);
 | 
	
		
			
				|  |  | -		if (e == null) {
 | 
	
		
			
				|  |  | -			e = ex;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		logger.error("System Error", e);
 | 
	
		
			
				|  |  | -		// return failed(e.getMessage());
 | 
	
		
			
				|  |  | -		if (e instanceof BizException || e instanceof ThirdpartyException) {
 | 
	
		
			
				|  |  | -			if(e.getMessage().equals("205")){
 | 
	
		
			
				|  |  | -				return failed(HttpStatus.RESET_CONTENT,e.getMessage());
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			// 自定义错误码
 | 
	
		
			
				|  |  | -			if (e instanceof BizException) {
 | 
	
		
			
				|  |  | -				BizException bizException = (BizException) e;
 | 
	
		
			
				|  |  | -				return getResponseData(false, bizException.getCode(), null, bizException.getMessage());
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			// 默认返回错误码
 | 
	
		
			
				|  |  | -			return failed(e.getMessage());
 | 
	
		
			
				|  |  | -		} else if (e instanceof AccessDeniedException) {
 | 
	
		
			
				|  |  | -			return failed("禁止访问");
 | 
	
		
			
				|  |  | -		}else if(e instanceof BindException){
 | 
	
		
			
				|  |  | -			String errors = ((BindException) e).getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining("\n"));
 | 
	
		
			
				|  |  | -			return failed(errors);
 | 
	
		
			
				|  |  | -		} else if(e instanceof MethodArgumentNotValidException){
 | 
	
		
			
				|  |  | +    private final static Logger logger = LoggerFactory.getLogger(BaseController.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> succeed(T object) {
 | 
	
		
			
				|  |  | +        return getResponseData(true, HttpStatus.OK, object, "");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> succeed() {
 | 
	
		
			
				|  |  | +        return getResponseData(true, HttpStatus.OK, null, "");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> succeedData(T obj) {
 | 
	
		
			
				|  |  | +        return getResponseData(true, HttpStatus.OK, obj, "操作成功");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> warned(String message) {
 | 
	
		
			
				|  |  | +        return failed(HttpStatus.MULTI_STATUS, message);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> failed() {
 | 
	
		
			
				|  |  | +        return failed("");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> failed(String msg) {
 | 
	
		
			
				|  |  | +        return failed(HttpStatus.INTERNAL_SERVER_ERROR, msg);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
 | 
	
		
			
				|  |  | +        return getResponseData(false, statusCode, null, msg);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
 | 
	
		
			
				|  |  | +        return getResponseData(false, statusCode, data, msg);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
 | 
	
		
			
				|  |  | +        HttpResponseResult<T> obj = new HttpResponseResult<T>();
 | 
	
		
			
				|  |  | +        obj.setStatus(status);
 | 
	
		
			
				|  |  | +        obj.setCode(statusCode.value());
 | 
	
		
			
				|  |  | +        obj.setData(data);
 | 
	
		
			
				|  |  | +        obj.setMsg(message);
 | 
	
		
			
				|  |  | +        return obj;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private static <T> HttpResponseResult<T> getResponseData(boolean status, int statusCode, T data, String message) {
 | 
	
		
			
				|  |  | +        HttpResponseResult<T> obj = new HttpResponseResult<T>();
 | 
	
		
			
				|  |  | +        obj.setStatus(status);
 | 
	
		
			
				|  |  | +        obj.setCode(statusCode);
 | 
	
		
			
				|  |  | +        obj.setData(data);
 | 
	
		
			
				|  |  | +        obj.setMsg(message);
 | 
	
		
			
				|  |  | +        return obj;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 处理一般异常
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param ex
 | 
	
		
			
				|  |  | +     * @param request
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @ExceptionHandler(Exception.class)
 | 
	
		
			
				|  |  | +    public HttpResponseResult<String> handleException(Exception ex, HttpServletRequest request) {
 | 
	
		
			
				|  |  | +        Throwable e = ExceptionUtils.getRootCause(ex);
 | 
	
		
			
				|  |  | +        if (e == null) {
 | 
	
		
			
				|  |  | +            e = ex;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        logger.error("System Error", e);
 | 
	
		
			
				|  |  | +        // return failed(e.getMessage());
 | 
	
		
			
				|  |  | +        if (e instanceof BizException || e instanceof ThirdpartyException) {
 | 
	
		
			
				|  |  | +            if(e.getMessage().equals("205")){
 | 
	
		
			
				|  |  | +                return failed(HttpStatus.RESET_CONTENT,e.getMessage());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 自定义错误码
 | 
	
		
			
				|  |  | +            if (e instanceof BizException) {
 | 
	
		
			
				|  |  | +                BizException bizException = (BizException) e;
 | 
	
		
			
				|  |  | +                return getResponseData(false, bizException.getCode(), null, bizException.getMessage());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 默认返回错误码
 | 
	
		
			
				|  |  | +            return failed(e.getMessage());
 | 
	
		
			
				|  |  | +        } else if (e instanceof AccessDeniedException) {
 | 
	
		
			
				|  |  | +            return failed("禁止访问");
 | 
	
		
			
				|  |  | +        }else if(e instanceof BindException){
 | 
	
		
			
				|  |  | +            String errors = ((BindException) e).getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining("\n"));
 | 
	
		
			
				|  |  | +            return failed(errors);
 | 
	
		
			
				|  |  | +        } else if(e instanceof MethodArgumentNotValidException){
 | 
	
		
			
				|  |  |              MethodArgumentNotValidException validException = (MethodArgumentNotValidException) ex;
 | 
	
		
			
				|  |  |              String errorMsg = validException.getBindingResult()
 | 
	
		
			
				|  |  |                      .getFieldErrors()
 | 
	
	
		
			
				|  | @@ -125,34 +126,34 @@ public class BaseController {
 | 
	
		
			
				|  |  |                      .collect(Collectors.joining());
 | 
	
		
			
				|  |  |              return failed(errorMsg);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -		try {
 | 
	
		
			
				|  |  | -			Map<String,Object> paramMap = new HashMap<>(2);
 | 
	
		
			
				|  |  | -			JSONObject jsonObject = new JSONObject();
 | 
	
		
			
				|  |  | -			jsonObject.put("content","系统繁忙请及时处理: " + request.getRequestURL() + "   " + e);
 | 
	
		
			
				|  |  | -			paramMap.put("text",jsonObject.toJSONString());
 | 
	
		
			
				|  |  | -			paramMap.put("msgtype","text");
 | 
	
		
			
				|  |  | -			Map<String,String> headers = new HashMap<>(1);
 | 
	
		
			
				|  |  | -			headers.put("Content-Type","application/json");
 | 
	
		
			
				|  |  | -			HttpUtil.postForHttps(dingTalkRobotsSecurityParam(),JSON.toJSONString(paramMap),headers);
 | 
	
		
			
				|  |  | -		}catch (Exception exception){
 | 
	
		
			
				|  |  | -			logger.error("System Error", exception);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            Map<String,Object> paramMap = new HashMap<>(2);
 | 
	
		
			
				|  |  | +            JSONObject jsonObject = new JSONObject();
 | 
	
		
			
				|  |  | +            jsonObject.put("content","系统繁忙请及时处理: " + request.getRequestURL() + "   " + e);
 | 
	
		
			
				|  |  | +            paramMap.put("text",jsonObject.toJSONString());
 | 
	
		
			
				|  |  | +            paramMap.put("msgtype","text");
 | 
	
		
			
				|  |  | +            Map<String,String> headers = new HashMap<>(1);
 | 
	
		
			
				|  |  | +            headers.put("Content-Type","application/json");
 | 
	
		
			
				|  |  | +            HttpUtil.postForHttps(dingTalkRobotsSecurityParam(),JSON.toJSONString(paramMap),headers);
 | 
	
		
			
				|  |  | +        }catch (Exception exception){
 | 
	
		
			
				|  |  | +            logger.error("System Error", exception);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(e.getMessage())) {
 | 
	
		
			
				|  |  |              return failed(e.getMessage());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -		return failed("系统繁忙");
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	public String dingTalkRobotsSecurityParam() throws Exception{
 | 
	
		
			
				|  |  | -		Long timestamp = System.currentTimeMillis();
 | 
	
		
			
				|  |  | -		String secret = "SEC5e3b73acccb12fc2a2a7d36d416c1967c66adb99a75dce24ecc324b50e528a29";
 | 
	
		
			
				|  |  | -		String stringToSign = timestamp + "\n" + secret;
 | 
	
		
			
				|  |  | -		Mac mac = Mac.getInstance("HmacSHA256");
 | 
	
		
			
				|  |  | -		mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
 | 
	
		
			
				|  |  | -		byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
 | 
	
		
			
				|  |  | -		String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
 | 
	
		
			
				|  |  | -		StringBuffer sb = new StringBuffer("https://api.dingtalk.com/robot/send?access_token=22d7b3b54ea7f1633c640dfdf17083d0731c3757719a84bd333740a8b18eb035×tamp=");
 | 
	
		
			
				|  |  | -		sb.append(timestamp).append("&sign=").append(sign);
 | 
	
		
			
				|  |  | -		return sb.toString();
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +        return failed("系统繁忙");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public String dingTalkRobotsSecurityParam() throws Exception{
 | 
	
		
			
				|  |  | +        Long timestamp = System.currentTimeMillis();
 | 
	
		
			
				|  |  | +        String secret = "SEC5e3b73acccb12fc2a2a7d36d416c1967c66adb99a75dce24ecc324b50e528a29";
 | 
	
		
			
				|  |  | +        String stringToSign = timestamp + "\n" + secret;
 | 
	
		
			
				|  |  | +        Mac mac = Mac.getInstance("HmacSHA256");
 | 
	
		
			
				|  |  | +        mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
 | 
	
		
			
				|  |  | +        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
 | 
	
		
			
				|  |  | +        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
 | 
	
		
			
				|  |  | +        StringBuffer sb = new StringBuffer("https://api.dingtalk.com/robot/send?access_token=22d7b3b54ea7f1633c640dfdf17083d0731c3757719a84bd333740a8b18eb035×tamp=");
 | 
	
		
			
				|  |  | +        sb.append(timestamp).append("&sign=").append(sign);
 | 
	
		
			
				|  |  | +        return sb.toString();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |