package com.poyee.base.controller; import com.poyee.base.dto.BaseDto; import com.poyee.base.dto.BaseReq; import com.poyee.base.dto.UserInfo; import com.poyee.base.service.BaseService; import com.poyee.common.exception.AuthException; import com.poyee.i18n.I18nUtils; import com.poyee.util.DateUtils; import com.poyee.util.ServletUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.util.Date; import java.util.Objects; import static com.poyee.i18n.I18nMessageEnums.GET_USER_INFO_ERROR; import static com.poyee.i18n.I18nMessageEnums.NO_PERMISSION; /** * */ @Slf4j public abstract class BaseController, T extends BaseReq, R extends BaseDto> { @Autowired protected S baseService; /** * 日志 * @param label * @param obj */ public void console(String label, Object obj ){ //当前操作用户 及 角色 ,操作时间 String userName = "游客"; String roleCode = "游客"; try{ UserInfo userInfo = ServletUtils.getUserInfo(); String name = StringUtils.isNotBlank(userInfo.getDisplayName()) ? userInfo.getDisplayName() : userInfo.getSub(); if(StringUtils.isBlank(name)){ userName = StringUtils.isNotBlank(userInfo.getUserId()) ? "用户id:"+userInfo.getUserId() : userName; } String role = userInfo.getRoleCode(); if (StringUtils.isBlank(role)) { roleCode = userInfo.isMerchant() ? "商户" : roleCode; } } catch (Exception e) { log.error("当前用户[{}] 角色【{}】获取用户信息异常", userName, roleCode, e); } finally { log.info("{} {}\n" + " 当前用户[{}] 角色【{}】操作时间[{}] ", label, obj, userName, roleCode , DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, new Date())); } } /** * 检查商户权限 * @param p * @param

*/ public

void checkAndSetMerchantId(P p){ try { UserInfo userInfo = ServletUtils.getUserInfo(); if(userInfo.isMerchant()) { //解析 p 中的user_id if (Objects.nonNull(p)) { Field merchantId = p.getClass().getDeclaredField("merchantId"); if (Objects.nonNull(merchantId)) { merchantId.setAccessible(true); String typeName = merchantId.getType().getName(); if (Objects.equals("java.lang.Long", typeName)) { merchantId.set(p, Long.valueOf(userInfo.getMerchantId())); } else if (Objects.equals("java.lang.Integer", typeName)) { merchantId.set(p, userInfo.getMerchantId()); } } } } } catch (NoSuchFieldException ne) { log.error("请求参数中无userId",ne); throw new AuthException(402, I18nUtils.get(NO_PERMISSION, "【权限不足】")); } catch (Exception e) { log.error("获取用户信息失败",e); throw new AuthException(I18nUtils.get(GET_USER_INFO_ERROR)); } } /** * 获取request */ public HttpServletRequest getRequest() { return ServletUtils.getRequest(); } }