package com.yihu.jw.web; import com.fasterxml.jackson.databind.ObjectMapper; import com.yihu.jw.restmodel.web.ObjEnvelop; import com.yihu.jw.util.DateUtil; import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.util.ReflectionUtils; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.util.*; public class BaseController { private static Logger logger = LoggerFactory.getLogger(BaseController.class); @Autowired protected HttpServletRequest request; /** * 獲取髮送請求用戶的uid * * @return */ public String getUID() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("uid"); } catch (Exception e) { return null; } } /** * 获取被代理人的code * @return */ public String getRepresentedUID() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("represented"); } catch (Exception e) { return null; } } /** * 获取被代理人code,若没有则返回当前登录者 * @return */ public String getRepUID(){ try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); if(json.isNull("represented")){ return json.getString("uid"); } return json.getString("represented"); } catch (Exception e) { return null; } } /** * 獲取髮送請求用戶的uid * * @return */ public String getLastUid() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("lastUid"); } catch (Exception e) { return null; } } public String getAppVersion() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("appVersion"); } catch (Exception e) { return null; } } public String getOpenid() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("openid"); } catch (Exception e) { return null; } } /** * 获取用户ID * * @return */ public long getId() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getLong("id"); } catch (Exception e) { return 0; } } public String getIMEI() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("imei"); } catch (Exception e) { return null; } } public String getToken() { try { String userAgent = request.getHeader("userAgent"); if (StringUtils.isEmpty(userAgent)) { userAgent = request.getHeader("User-Agent"); } JSONObject json = new JSONObject(userAgent); return json.getString("token"); } catch (Exception e) { return null; } } public void error(Exception e) { logger.error(DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss")+":"+getClass().getName() + ":", e.getMessage()); e.printStackTrace(); } public void warn(Exception e) { logger.warn(getClass().getName() + ":", e.getMessage()); e.printStackTrace(); } public void infoMessage(String message) { logger.info(message); } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @return */ public String error(int code, String msg) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return null; } } /** * 接口处理成功 * * @param msg * @return */ public String success(String msg) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", 200); map.put("msg", msg); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return null; } } public String write(int code, String msg) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return null; } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @return */ public String write(int code, String msg, String key, List list) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); map.put(key, list); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @param value 结果数据 * @return */ public String write(int code, String msg, String key, JSONObject value) { try { JSONObject json = new JSONObject(); json.put("status", code); json.put("msg", msg); json.put(key, value); return json.toString(); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @param value 结果数据 * @return */ public String write(int code, String msg, String key, JSONArray value) { try { JSONObject json = new JSONObject(); json.put("status", code); json.put("msg", msg); json.put(key, value); return json.toString(); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @param total 总数 * @param value 结果数据 * @return */ public String write(int code, String msg, int total, String key, JSONArray value) { try { JSONObject json = new JSONObject(); json.put("status", code); json.put("msg", msg); json.put("total", total); json.put(key, value); return json.toString(); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @param value 结果数据 * @return */ public String write(int code, String msg, String key, Object value) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); map.put(key, value); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @return */ public String write(int code, String msg, String key, Page list) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); // 是否为第一页 map.put("isFirst", list.isFirst()); // 是否为最后一页 map.put("isLast", list.isLast()); // 总条数 map.put("total", list.getTotalElements()); // 总页数 map.put("totalPages", list.getTotalPages()); map.put(key, list.getContent()); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @return */ public String write(int code, String msg, String key, Page page, JSONArray array) { try { JSONObject json = new JSONObject(); json.put("status", code); json.put("msg", msg); // 是否为第一页 json.put("isFirst", page == null ? false : page.isFirst()); // 是否为最后一页 json.put("isLast", page == null ? true : page.isLast()); // 总条数 json.put("total", page == null ? 0 : page.getTotalElements()); // 总页数 json.put("totalPages", page == null ? 0 : page.getTotalPages()); json.put(key, array); return json.toString(); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @param value 结果数据 * @return */ public String write(int code, String msg, String key, Map value) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); map.put(key, value); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @param value 结果数据 * @return */ public String write(int code, String msg, String key, String value) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); map.put(key, value); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } } /* *//** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @return *//* public String write(int code, String msg, String key, IdEntity entity) { try { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map.put("status", code); map.put("msg", msg); map.put(key, entity); return mapper.writeValueAsString(map); } catch (Exception e) { error(e); return error(-1, "服务器异常,请稍候再试!"); } }*/ /** * 返回接口处理结果 * * @param code 结果码,成功为200 * @param msg 结果提示信息 * @return */ public String write(int code, String msg, boolean isFirst, boolean isLast, long total, int totalPages, String key, Object values) { try { JSONObject json = new JSONObject(); json.put("status", code); json.put("msg", msg); // 是否为第一页 json.put("isFirst", isFirst); // 是否为最后一页 json.put("isLast", isLast); // 总条数 json.put("total", total); // 总页数 json.put("totalPages", totalPages); json.put(key, values); return json.toString(); } catch (Exception e) { logger.error("BaseController:", e.getMessage()); return error(-1, "服务器异常,请稍候再试!"); } } public String trimEnd(String param, String trimChars) { if (param.endsWith(trimChars)) { param = param.substring(0, param.length() - trimChars.length()); } return param; } /** * 无效用户消息返回 * * @param e * @param defaultCode * @param defaultMsg * @return */ public String invalidUserException(Exception e, int defaultCode, String defaultMsg) { try { // if (e instanceof UndeclaredThrowableException) { // UndeclaredThrowableException ute = (UndeclaredThrowableException) e; // InvalidUserException iue = (InvalidUserException) ute.getUndeclaredThrowable(); // if (iue != null) { // return error(iue.getCode(), iue.getMsg()); // } // } return error(defaultCode, defaultMsg); } catch (Exception e2) { return null; } } public List> copyBeans(Collection beans, String... propertyNames) { List> result = new ArrayList<>(); for (Object bean : beans) { result.add(copyBeanProperties(bean, propertyNames)); } return result; } /** * 复制特定属性。 * * @param bean * @param propertyNames * @return */ public Map copyBeanProperties(Object bean, String... propertyNames) { Map simplifiedBean = new HashMap<>(); for (String propertyName : propertyNames) { Field field = ReflectionUtils.findField(bean.getClass(), propertyName); if (field != null) { field.setAccessible(true); Object value = ReflectionUtils.getField(field, bean); simplifiedBean.put(propertyName, value == null ? "" : value); } else { simplifiedBean.put(propertyName, ""); } } return simplifiedBean; } protected ObjEnvelop success(J obj){ return success("success", obj); } protected ObjEnvelop success(String message, J obj){ return success(message, 200, obj); } protected ObjEnvelop success(String message, int status, J obj){ ObjEnvelop objEnvelop = new ObjEnvelop<>(); objEnvelop.setMessage(message); objEnvelop.setStatus(status); objEnvelop.setObj(obj); return objEnvelop; } }