rev:添加锁:保障wms申请任务时只有一个
This commit is contained in:
@@ -14,6 +14,7 @@ import org.nl.acs.ext.wms.data.CreateTaskRequest;
|
|||||||
import org.nl.acs.ext.wms.data.CreateTaskResponse;
|
import org.nl.acs.ext.wms.data.CreateTaskResponse;
|
||||||
import org.nl.acs.ext.wms.service.WmsToAcsService;
|
import org.nl.acs.ext.wms.service.WmsToAcsService;
|
||||||
//import org.nl.modules.logging.InterfaceLogType;
|
//import org.nl.modules.logging.InterfaceLogType;
|
||||||
|
import org.nl.acs.utils.LockUtils;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
import org.nl.common.logging.annotation.Log;
|
import org.nl.common.logging.annotation.Log;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
@@ -38,28 +39,13 @@ import java.util.concurrent.locks.ReentrantLock;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class WmsToAcsController {
|
public class WmsToAcsController {
|
||||||
private final WmsToAcsService wmstoacsService;
|
private final WmsToAcsService wmstoacsService;
|
||||||
private ReentrantLock lock = new ReentrantLock();
|
|
||||||
|
|
||||||
@PostMapping("/task")
|
@PostMapping("/task")
|
||||||
@Log(value = "ACS接收WMS任务")
|
@Log(value = "ACS接收WMS任务")
|
||||||
@ApiOperation("接收WMS任务")
|
@ApiOperation("接收WMS任务")
|
||||||
@SaIgnore
|
@SaIgnore
|
||||||
public ResponseEntity<Object> createFromWms(@RequestBody List<CreateTaskRequest> reqs) {
|
public ResponseEntity<Object> createFromWms(@RequestBody List<CreateTaskRequest> reqs) {
|
||||||
CreateTaskResponse response = new CreateTaskResponse();
|
CreateTaskResponse response = LockUtils.lock("apply", () -> wmstoacsService.crateTask(reqs), 3);
|
||||||
try {
|
|
||||||
if (lock.tryLock() || lock.tryLock(2, TimeUnit.SECONDS)){
|
|
||||||
response = wmstoacsService.crateTask(reqs);
|
|
||||||
Thread.sleep(50000);
|
|
||||||
}else {
|
|
||||||
throw new BadRequestException("当前acs正在执行创建任务稍后再试");
|
|
||||||
}
|
|
||||||
}catch (Exception ex){
|
|
||||||
throw new BadRequestException("当前acs正在执行创建任务稍后再试");
|
|
||||||
}finally {
|
|
||||||
if (lock.isHeldByCurrentThread() && lock.isLocked()){
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new ResponseEntity<>(response, HttpStatus.OK);
|
return new ResponseEntity<>(response, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user