From 924006f3faa4f4a11bc8e0a60db7df6bfeac30c5 Mon Sep 17 00:00:00 2001 From: zhangzq Date: Mon, 16 Dec 2024 17:21:10 +0800 Subject: [PATCH] =?UTF-8?q?add:acs=E7=94=B3=E8=AF=B7=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A7=E5=88=B6:=E7=9B=B8=E5=90=8C?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8F=AA=E8=83=BD=E7=94=B3=E8=AF=B7=E4=B8=80?= =?UTF-8?q?=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/common/LockUtils.java | 64 +++++++++++++++++++ .../acs/controller/AcsToWmsController.java | 13 +++- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/LockUtils.java diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/LockUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/LockUtils.java new file mode 100644 index 0000000..91dcd0e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/LockUtils.java @@ -0,0 +1,64 @@ +package org.nl.common; + +import org.nl.common.exception.BadRequestException; + +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Supplier; + +public class LockUtils { + private static ConcurrentHashMap locks = new ConcurrentHashMap<>(); + public static T lock(String key, Supplier supplier,Integer second) { + ReentrantLock lock; + synchronized (key.intern()){ + lock = locks.get(key); + if (lock==null){ + lock = new ReentrantLock(); + locks.put(key, lock) ; + } + } + boolean isLock = false; + if (second !=null){ + try { + isLock = lock.tryLock(second, TimeUnit.SECONDS); + }catch (Exception ex){ + isLock = false; + } + }else { + isLock = lock.tryLock(); + } + try { + if (isLock){ + return supplier.get(); + }else { + throw new BadRequestException(Thread.currentThread().getName()+"当前业务"+key+"正在执行"); + } + }catch (Exception ex){ + throw new BadRequestException(Thread.currentThread().getName()+"当前业务"+key+"正在执行"); + }finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()){ + lock.unlock(); + } + } + } + + public static void main(String[] args) { + for (int i = 0; i < 100; i++) { + new Thread(()->{ + String key = String.valueOf(new Random().nextInt(5)); + String result = LockUtils.lock(key, () -> { + try { + System.out.println(Thread.currentThread().getName() + "正在执行"); + Thread.sleep(2000); + } catch (Exception ex) { + } + return key; + }, null); + System.out.println("执行结果"+result); + }).start(); + } + } +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java index 07578c8..a681f87 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java @@ -5,8 +5,10 @@ import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.nl.common.LockUtils; import org.nl.common.logging.annotation.Log; import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.sch.point.service.ISchBasePointService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.locks.ReentrantLock; + /** * @Author: lyd * @Description: acs请求lms接口 @@ -30,6 +34,8 @@ public class AcsToWmsController { @Autowired private ISchBasePointService schBasePointService; + private static ReentrantLock lock = new ReentrantLock(); + @Autowired private AcsToWmsService acsToWmsService; @@ -40,7 +46,12 @@ public class AcsToWmsController { //@SaCheckPermission("@el.check('schBaseTask:add')") @SaIgnore public ResponseEntity apply(@RequestBody JSONObject param) { - return new ResponseEntity<>(acsToWmsService.acsApply(param), HttpStatus.OK); + + String device_code = param.getString("device_code"); + BaseResponse response = LockUtils.lock( + device_code, + () -> acsToWmsService.acsApply(param), 2); + return new ResponseEntity<>(response, HttpStatus.OK); } @PostMapping("/status")