add:redisson

This commit is contained in:
zhangzhiqiang
2023-02-06 10:00:44 +08:00
parent 669821f526
commit acae1ade0d

View File

@@ -28,6 +28,8 @@ import org.nl.wms.sch.tasks.EmptyVehicleTask;
import org.nl.wms.sch.tasks.SendOutTask; import org.nl.wms.sch.tasks.SendOutTask;
import org.nl.wms.st.inbill.service.RawAssistIStorService; import org.nl.wms.st.inbill.service.RawAssistIStorService;
import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.inbill.service.StorPublicService;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -44,7 +46,7 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class AcsToWmsServiceImpl implements AcsToWmsService { public class AcsToWmsServiceImpl implements AcsToWmsService {
private static Interner<String> lock = Interners.newWeakInterner(); private static Interner<String> Heap_Lock = Interners.newWeakInterner();
private final PrintService printService; private final PrintService printService;
@@ -55,7 +57,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private final CutConveyorTask cutConveyorTask; private final CutConveyorTask cutConveyorTask;
// private final RedissonClient redissonClient; private final RedissonClient redissonClient;
/** /**
* task_id任务标识 * task_id任务标识
@@ -194,8 +196,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
log.info("apply请求参数---------------------------------------------"+whereJson.toString()); log.info("apply请求参数---------------------------------------------"+whereJson.toString());
String type = whereJson.getString("type"); String type = whereJson.getString("type");
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
synchronized (lock.intern(type)){ RLock lock = redissonClient.getLock("acs_to_wms:" + type);
{ boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock){
String device_code = whereJson.getString("device_code"); String device_code = whereJson.getString("device_code");
String vehicle_code = whereJson.getString("vehicle_code"); String vehicle_code = whereJson.getString("vehicle_code");
WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point");
@@ -253,13 +257,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
} }
if (type.equals("2")) { if (type.equals("2")) {
//查询一个可用的空载具点位并下发给ACS //查询一个可用的空载具点位并下发给ACS
/* /*
* 1、优先存放空托盘区、托盘号默认99999空托盘区没有位置再找空巷道或者空巷道有空位置的货位。 * 1、优先存放空托盘区、托盘号默认99999空托盘区没有位置再找空巷道或者空巷道有空位置的货位。
2、分配货位规则 2、分配货位规则
a、查找片区内有空位的巷道并且两头能够通畅的巷道排判断巷道的任务类型只能为入库或者无任务类型 a、查找片区内有空位的巷道并且两头能够通畅的巷道排判断巷道的任务类型只能为入库或者无任务类型
b、没有则优先找空的巷道按空位置顺序分配 b、没有则优先找空的巷道按空位置顺序分配
3、任务下发判断巷道的任务类型只能为空盘入库或者无任务类型 3、任务下发判断巷道的任务类型只能为空盘入库或者无任务类型
* */ * */
vehicle_code = CodeUtil.getNewCode("VEHICCLE_CODE_KTP"); vehicle_code = CodeUtil.getNewCode("VEHICCLE_CODE_KTP");
JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "21").process().uniqueResult(0); JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "21").process().uniqueResult(0);
@@ -322,13 +326,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
} }
if (type.equals("3")) { if (type.equals("3")) {
//查询一个可用的空载具点位并下发给ACS //查询一个可用的空载具点位并下发给ACS
/* /*
* 1、优先存放空托盘区、托盘号默认99999空托盘区没有位置再找空巷道或者空巷道有空位置的货位。 * 1、优先存放空托盘区、托盘号默认99999空托盘区没有位置再找空巷道或者空巷道有空位置的货位。
2、分配货位规则 2、分配货位规则
a、查找片区内有空位的巷道并且两头能够通畅的巷道排判断巷道的任务类型只能为入库或者无任务类型 a、查找片区内有空位的巷道并且两头能够通畅的巷道排判断巷道的任务类型只能为入库或者无任务类型
b、没有则优先找空的巷道按空位置顺序分配 b、没有则优先找空的巷道按空位置顺序分配
3、任务下发判断巷道的任务类型只能为空盘入库或者无任务类型 3、任务下发判断巷道的任务类型只能为空盘入库或者无任务类型
* */ * */
JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "22").process().uniqueResult(0); JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "22").process().uniqueResult(0);
JSONObject struct_jo = new JSONObject(); JSONObject struct_jo = new JSONObject();
@@ -444,8 +448,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("message", "下发成功!"); result.put("message", "下发成功!");
return result; return result;
} }
}finally {
if (tryLock){
lock.unlock();
} }
}
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "申请任务超时!"+type);
return result;
} }
@Override @Override