//package cn.superdesk.uniorder.common.exception;
//
//import cn.superdesk.app.base.log.LogContext;
//import cn.superdesk.libs.common.SuperdeskBaseException;
//import cn.superdesk.libs.springweb.model.WrapperResponseEntity;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.http.HttpStatus;
//import org.springframework.validation.BindException;
//import org.springframework.validation.BindingResult;
//import org.springframework.validation.FieldError;
//import org.springframework.validation.ObjectError;
//import org.springframework.web.bind.annotation.ControllerAdvice;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import javax.servlet.http.HttpServletResponse;
//import java.util.List;
//
///**
// * 全局异常处理
// */
//@Slf4j
//@ControllerAdvice
//public class GlobalExceptionHandler {
//
//
//	/**
//	 * web端全局异常处理
//	 *
//	 * @param e
//	 * @param response
//	 * @return
//	 */
//	@ExceptionHandler(Exception.class)
//	@ResponseBody
//	public WrapperResponseEntity exceptionHandler(Exception e, HttpServletResponse response) {
//
//		WrapperResponseEntity resp = new WrapperResponseEntity();
//
//		if (e instanceof SuperdeskBaseException) {
//
//			SuperdeskBaseException e1 = (SuperdeskBaseException) e;
//			resp.setCode(e1.getCode());
//			resp.setMsg(e1.getMessage());
//
//		} else if (e instanceof org.springframework.web.HttpRequestMethodNotSupportedException) {
//
//			resp.setCode(HttpStatus.METHOD_NOT_ALLOWED.value());
//			resp.setMsg(e.getMessage());
//
//		} else if (e instanceof org.springframework.web.HttpMediaTypeException) {
//
//			resp.setCode(HttpStatus.UNSUPPORTED_MEDIA_TYPE.value());
//			resp.setMsg(e.getMessage());
//
//		} else if (e instanceof org.springframework.web.bind.MissingServletRequestParameterException) {
//
//			resp.setCode(ExceptionMsg.REQUEST_PARAM_REQUIRED.code);
//			resp.setMsg(e.getMessage());
//
//		} else if (e instanceof org.springframework.validation.BindException) {
//			// validat参数校验(参数以对象形式接收)
//			BindException ex       = (BindException) e;
//			StringBuilder messages = new StringBuilder();
//			BindingResult result   = ex.getBindingResult();
//			if (result.hasErrors()) {
//				List<ObjectError> errors = result.getAllErrors();
//				for (ObjectError error : errors) {
//					FieldError fieldError = (FieldError) error;
//					messages.append(fieldError.getDefaultMessage()).append(",");
//				}
//				log.error(messages.toString());
//			}
//
//			resp.setCode(ExceptionMsg.REQUEST_PARAM_REQUIRED.code);
//			resp.setMsg(messages.toString());
//		} else if (e instanceof javax.validation.ConstraintViolationException) {
//			// validat参数校验(参数以普通形式接收)
//			resp.setCode(ExceptionMsg.REQUEST_PARAM_REQUIRED.code);
//			resp.setMsg(e.getMessage().contains(":") ? e.getMessage().split(":")[1] : e.getMessage());
//		} else {
//
//			Throwable parent = getActualThrowable(e);
//			if (parent instanceof SuperdeskBaseException) {
//				SuperdeskBaseException e1 = (SuperdeskBaseException) parent;
//				resp.setCode(e1.getCode());
//				resp.setMsg(e1.getMessage());
//			} else if (parent instanceof IllegalStateException) {
//				resp.setCode(ExceptionMsg.ILLEGAL_STATE.code);
//				resp.setMsg(e.getMessage());
//			} else {
//				resp.setCode(ExceptionMsg.SYSTEM_ERROR.code);
//				resp.setMsg(ExceptionMsg.SYSTEM_ERROR.defaultMessage);
//				LogContext.exception(e);
//			}
//
//			log.error("", e);
//		}
//
////		if (resp.getCode() >= 400 && resp.getCode() <= 500) {
////			response.setStatus(resp.getCode());
////		}
//		LogContext.end(String.valueOf(resp.getCode()), resp.getMsg());
//
//		return resp;
//	}
//
//	private Throwable getActualThrowable(Throwable e) {
//		Throwable cause = e;
//		while (cause.getCause() != null) {
//			cause = cause.getCause();
//		}
//		return cause;
//	}
//}
