add:redisson
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user