zhuyifan

菜品售卖量接口

......@@ -44,6 +44,11 @@ public @interface RepeatSubmit {
String message() default "不允许重复提交,请稍后再试";
/**
* 是否根据登录用户ID加锁
*/
boolean isLockByLoginUser() default true;
/**
* 方法执行完自动释放锁
*/
boolean methodAutoUnlock() default true;
......
......@@ -110,7 +110,11 @@ public class RepeatSubmitAspect {
}
}
}
final var operatorId = LoginContextHolder.hasLogin() ? LoginContextHolder.getId() : null;
return requestLock.prefix() + (operatorId != null ? CommonConstants.COLON + operatorId : "") + (sb.length() > 0 ? CommonConstants.UNDERLINE + sb : "");
if (requestLock.isLockByLoginUser()) {
final var operatorId = LoginContextHolder.hasLogin() ? LoginContextHolder.getId() : null;
return requestLock.prefix() + (operatorId != null ? CommonConstants.COLON + operatorId : "") + (sb.length() > 0 ? CommonConstants.UNDERLINE + sb : "");
} else {
return requestLock.prefix() + (sb.length() > 0 ? CommonConstants.UNDERLINE + sb : "");
}
}
}
......
......@@ -9,7 +9,7 @@ import io.lettuce.core.resource.ClientResources;
import io.lettuce.core.tracing.BraveTracing;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -68,7 +68,7 @@ public class RedisConfig {
@Value(REDIS_PORT) final String port,
@Value(REDIS_DATABASE) final int dbToken) {
final var config = new Config();
config.setCodec(StringCodec.INSTANCE);
config.setCodec(new JsonJacksonCodec());
config.useSingleServer()
.setAddress("redis://" + url + ":" + port)
......
......@@ -15,8 +15,15 @@ import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
......@@ -40,8 +47,26 @@ public class RestTemplateConfig {
private Integer keepAliveDuration;
@Bean
public OkHttpClient okHttpClient() {
public OkHttpClient okHttpClient() throws NoSuchAlgorithmException, KeyManagementException {
TrustManager[] trustAllCertificates = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCertificates, new SecureRandom());
return new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCertificates[0])
.hostnameVerifier((hostname, session) -> true)
.connectTimeout(connectTimeout, TimeUnit.SECONDS)
.readTimeout(readTimeout, TimeUnit.SECONDS)
.writeTimeout(writeTimeout, TimeUnit.SECONDS)
......
......@@ -68,7 +68,7 @@ public class OrderController {
@ApiOperation(value = "创建订单")
@PostMapping("/orders")
@ResponseStatus(HttpStatus.OK)
@RepeatSubmit(prefix = "createOrder")
@RepeatSubmit(prefix = "createOrder", isLockByLoginUser = false)
public CreateOrderResponse createOrder(@Valid @RequestBody CreateOrderDto createOrderDto) {
return orderService.createOrder(createOrderDto);
}
......@@ -76,7 +76,7 @@ public class OrderController {
@ApiOperation(value = "院区端创建订单")
@PostMapping("/operator/orders")
@ResponseStatus(HttpStatus.OK)
@RepeatSubmit(prefix = "createOrder")
@RepeatSubmit(prefix = "createOrder", isLockByLoginUser = false)
public CreateOrderResponse createOrderByOperator(@Valid @RequestBody OrderDbDTO.OperatorCreateOrderDto createOrderDto) {
return orderService.orderCreation(createOrderDto);
}
......