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