|
|
@@ -850,7 +850,7 @@ public class WaybillOrderService {
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public OrderTakingResp orderTaking(OrderCirculateTakingQueryParam param) {
|
|
|
- // 1. 幂等性校验:检查是否已经存在该车辆针对该物流订单的有效运单
|
|
|
+ // 1. 幂等性校验
|
|
|
checkIdempotent(param);
|
|
|
|
|
|
// 2. 构建分布式锁Key(物流订单ID+车牌号 唯一标识)
|
|
|
@@ -869,11 +869,11 @@ public class WaybillOrderService {
|
|
|
// 4. 再次幂等性校验(防止锁等待期间已经创建运单)
|
|
|
checkIdempotent(param);
|
|
|
|
|
|
- // 6. 执行核心接单逻辑
|
|
|
+ // 5. 执行接单
|
|
|
return takingOrderHandler.handler(param);
|
|
|
|
|
|
} finally {
|
|
|
- // 7. 释放分布式锁(只有获取锁的请求才能释放)
|
|
|
+ // 6. 释放分布式锁
|
|
|
if (lockAcquired) {
|
|
|
releaseLock(lockKey, requestId);
|
|
|
log.info("释放接单分布式锁成功,lockKey:{}, requestId:{}", lockKey, requestId);
|
|
|
@@ -886,7 +886,7 @@ public class WaybillOrderService {
|
|
|
* @param param 接单参数
|
|
|
*/
|
|
|
private void checkIdempotent(OrderCirculateTakingQueryParam param) {
|
|
|
- // 查询该车辆针对该物流订单是否已有有效运单
|
|
|
+ // 查询该物流订单+车牌号+企业下是否已有接单状态运单
|
|
|
KwtWaybillOrder existingOrder = waybillOrderRepository.findOneByTruckNo(param.getLogOrderId(), param.getTruckNo(), param.getEntId());
|
|
|
|
|
|
if (existingOrder != null) {
|
|
|
@@ -908,7 +908,7 @@ public class WaybillOrderService {
|
|
|
private boolean acquireLock(String lockKey, String requestId, long expireSeconds, long waitMillis) {
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
while (System.currentTimeMillis() - startTime < waitMillis) {
|
|
|
- // 使用SET NX EX命令获取锁(原子操作)
|
|
|
+ // 使用SET NX EX命令获取锁
|
|
|
Boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireSeconds, TimeUnit.SECONDS);
|
|
|
if (Boolean.TRUE.equals(success)) {
|
|
|
log.info("获取接单分布式锁成功,lockKey:{}, requestId:{}", lockKey, requestId);
|