Browse Source

重复提交代码微调

dev_shibei_match
jianjun 4 years ago
parent
commit
e1c55e263d
  1. 31
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aop/NoRepeatSubmitAop.java
  2. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ShiBeiScreenCollServiceImpl.java

31
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aop/NoRepeatSubmitAop.java

@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit;
/**
* desc:利用用户token及请求url 防止用户重复提交需要在没有唯一索引的保存或修改操作 方法入口上加上@NoRepeatSubMit注解
*
* @author zhaoqifeng
* @dscription
* @date 2020/11/24 9:59
@ -33,8 +34,8 @@ public class NoRepeatSubmitAop {
@Autowired
private DistributedLock distributedLock;
@Around("@annotation(noRepeatSubmit)")
public Object around(ProceedingJoinPoint pjp,NoRepeatSubmit noRepeatSubmit) {
@Around("@annotation(noRepeatSubmit)")
public Object around(ProceedingJoinPoint pjp, NoRepeatSubmit noRepeatSubmit) {
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
@ -44,21 +45,23 @@ public class NoRepeatSubmitAop {
String key = getKey(request.getRequestURI(), internalToken);
// 如果缓存中有这个url视为重复提交
Object result = null;
RLock lock = null;
try {
long leaseTime = noRepeatSubmit.leaseTime();
//如果获取不到锁等待0秒直接返回 持锁时间为leaseTime
RLock lock = distributedLock.getLock(RedisKeys.getNoRepeatSubmitKey(key), leaseTime, NumConstant.ZERO_L, TimeUnit.MILLISECONDS);
try {
//因为getLock如果获取失败抛异常 所以不做锁状态的判断
result = pjp.proceed();
} finally {
distributedLock.unLock(lock);
}
lock = distributedLock.getLock(RedisKeys.getNoRepeatSubmitKey(key), leaseTime, NumConstant.ZERO_L, TimeUnit.MILLISECONDS);
} catch (Exception e) {
log.warn("noRepeatSubmit exception",e);
log.warn("noRepeatSubmit key:{},msg:{}", key, e.getMessage());
//"未获取到锁,重复提交了
throw new RenException(EpmetErrorCode.REPEAT_SUBMIT.getCode());
}
try {
//因为getLock如果获取失败抛异常 所以不做锁状态的判断
result = pjp.proceed();
} finally {
distributedLock.unLock(lock);
}
return result;
} catch (RenException e) {
@ -67,10 +70,10 @@ public class NoRepeatSubmitAop {
log.error("验证重复提交时出现未知异常!");
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
}
}
}
private String getKey(String keyExpress,String token) {
return keyExpress+token;
}
private String getKey(String keyExpress, String token) {
return keyExpress + token;
}
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ShiBeiScreenCollServiceImpl.java

@ -34,7 +34,6 @@ import com.epmet.entity.evaluationindex.screen.ScreenCustomerAgencyEntity;
import com.epmet.entity.evaluationindex.screen.ScreenCustomerBizOrgEntity;
import com.epmet.entity.evaluationindex.screen.ScreenEventImgDataEntity;
import com.epmet.entity.evaluationindex.screen.ScreenUserJoinEntity;
import com.epmet.service.evaluationindex.screen.ScreenEventImgDataService;
import com.epmet.service.evaluationindex.screen.ShiBeiScreenCollService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
@ -99,8 +98,6 @@ public class ShiBeiScreenCollServiceImpl implements ShiBeiScreenCollService {
private ScreenIndexDataYearlyDao screenIndexDataYearlyDao;
@Autowired
private ScreenPublicPartiTotalDataDao screenPublicPartiTotalDataDao;
@Autowired
private ScreenEventImgDataService screenEventImgDataService;
@DataSource(value = DataSourceConstant.EVALUATION_INDEX, datasourceNameFromArg = true)
@Override

Loading…
Cancel
Save