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(); } }