161 lines
6.1 KiB
Java
161 lines
6.1 KiB
Java
package com.xhpc.invoice.aspect;
|
||
|
||
|
||
import com.xhpc.common.core.constant.CacheConstants;
|
||
import com.xhpc.common.core.utils.SecurityUtils;
|
||
import com.xhpc.common.core.utils.StringUtils;
|
||
import com.xhpc.common.redis.service.RedisService;
|
||
import com.xhpc.system.api.model.LoginUser;
|
||
import org.apache.commons.beanutils.BeanUtils;
|
||
import org.aspectj.lang.ProceedingJoinPoint;
|
||
import org.aspectj.lang.annotation.Around;
|
||
import org.aspectj.lang.annotation.Aspect;
|
||
import org.aspectj.lang.annotation.Pointcut;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.context.annotation.Configuration;
|
||
import org.springframework.stereotype.Component;
|
||
import org.springframework.web.context.request.RequestContextHolder;
|
||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||
|
||
import javax.servlet.http.HttpServletRequest;
|
||
import java.util.Date;
|
||
|
||
/*
|
||
* TODO AO切面,插入创建人,创建时间,修改人,修改时间
|
||
* @author fjd
|
||
* @date 2020-07-09 11:59
|
||
*/
|
||
@Aspect
|
||
@Component
|
||
@Configuration
|
||
public class DaoAspect {
|
||
|
||
private static final String CREATE_USER = "createBy";
|
||
private static final String CREATE_TIME = "createTime";
|
||
private static final String UPDATE_USER = "updateBy";
|
||
private static final String UPDATE_TIME = "updateTime";
|
||
private static final String TENANT_ID = "tenantId";
|
||
|
||
@Pointcut("execution(* com.xhpc..*.update*(..))")
|
||
public void daoUpdate() {
|
||
|
||
}
|
||
|
||
@Pointcut("execution(* com.xhpc..*.insert*(..))")
|
||
public void daoCreate() {
|
||
|
||
}
|
||
|
||
@Autowired
|
||
private RedisService redisService;
|
||
|
||
@Around("daoUpdate()")
|
||
public Object doAroundUpdate(ProceedingJoinPoint point) throws Throwable {
|
||
|
||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||
if (attributes == null) {
|
||
return point.proceed();
|
||
}
|
||
HttpServletRequest request = attributes.getRequest();
|
||
try {
|
||
String token = request.getHeader(CacheConstants.HEADER);
|
||
token = token.substring(7);
|
||
LoginUser loginUser = new LoginUser();
|
||
try {
|
||
loginUser = redisService.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + token);
|
||
} catch (Exception e) {
|
||
}
|
||
String userName = "";
|
||
try {
|
||
userName = SecurityUtils.getUsername();
|
||
} catch (Exception e) {
|
||
}
|
||
if (StringUtils.isEmpty(userName)) {
|
||
userName = loginUser.getUsername();
|
||
}
|
||
if (StringUtils.isEmpty(userName)) {
|
||
userName = "admin";
|
||
}
|
||
if (userName != null) {
|
||
Object[] objects = point.getArgs();
|
||
if (objects != null && objects.length > 0) {
|
||
for (Object arg : objects) {
|
||
if (isProperty(arg, UPDATE_USER) && StringUtils.isEmpty(BeanUtils.getProperty(arg, UPDATE_USER))) {
|
||
BeanUtils.setProperty(arg, UPDATE_USER, userName);
|
||
}
|
||
if (isProperty(arg, UPDATE_TIME) && StringUtils.isEmpty(BeanUtils.getProperty(arg, UPDATE_TIME))) {
|
||
BeanUtils.setProperty(arg, UPDATE_TIME, new Date());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (Exception e) {
|
||
}
|
||
Object object = point.proceed();
|
||
return object;
|
||
|
||
}
|
||
|
||
@Around("daoCreate()")
|
||
public Object doAroundCreate(ProceedingJoinPoint point) throws Throwable {
|
||
|
||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||
if (attributes == null) {
|
||
return point.proceed();
|
||
}
|
||
HttpServletRequest request = attributes.getRequest();
|
||
try {
|
||
Object[] objects = point.getArgs();
|
||
if (objects != null && objects.length > 0) {
|
||
for (Object arg : objects) {
|
||
String token = request.getHeader(CacheConstants.HEADER);
|
||
token = token.substring(7);
|
||
LoginUser loginUser = new LoginUser();
|
||
try {
|
||
loginUser = redisService.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + token);
|
||
} catch (Exception e) {
|
||
}
|
||
String userName = "";
|
||
try {
|
||
userName = SecurityUtils.getUsername();
|
||
} catch (Exception e) {
|
||
}
|
||
if (StringUtils.isEmpty(userName)) {
|
||
userName = loginUser.getUsername();
|
||
}
|
||
if (StringUtils.isEmpty(userName)) {
|
||
userName = "admin";
|
||
}
|
||
Date date = new Date();
|
||
if (isProperty(arg, CREATE_USER) && StringUtils.isEmpty(BeanUtils.getProperty(arg, CREATE_USER))) {
|
||
BeanUtils.setProperty(arg, CREATE_USER, userName);
|
||
}
|
||
if (isProperty(arg, UPDATE_USER) && StringUtils.isEmpty(BeanUtils.getProperty(arg, UPDATE_USER))) {
|
||
BeanUtils.setProperty(arg, UPDATE_USER, userName);
|
||
}
|
||
|
||
if (isProperty(arg, CREATE_TIME) && StringUtils.isEmpty(BeanUtils.getProperty(arg, CREATE_TIME))) {
|
||
BeanUtils.setProperty(arg, CREATE_TIME, date);
|
||
}
|
||
if (isProperty(arg, UPDATE_TIME) && StringUtils.isEmpty(BeanUtils.getProperty(arg, UPDATE_TIME))) {
|
||
BeanUtils.setProperty(arg, UPDATE_TIME, date);
|
||
}
|
||
|
||
if (isProperty(arg, TENANT_ID) && StringUtils.isEmpty(BeanUtils.getProperty(arg, TENANT_ID))) {
|
||
BeanUtils.setProperty(arg, TENANT_ID, loginUser.getTenantId());
|
||
}
|
||
}
|
||
}
|
||
} catch (Exception e) {
|
||
}
|
||
Object object = point.proceed();
|
||
return object;
|
||
}
|
||
|
||
public static boolean isProperty(Object bean, String field) {
|
||
|
||
return StringUtils.isProperty(bean, field);
|
||
}
|
||
|
||
}
|