|
|
|
@ -204,7 +204,17 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService {
|
|
|
|
|
String key = new StringJoiner(MesPcnExtConstWords.AND).add(reqBean.getWorkCenterCode()).add(pushSourceCode).toString();
|
|
|
|
|
ReentrantLock lock = lockMap.computeIfAbsent(key, item -> new ReentrantLock(true));
|
|
|
|
|
//500ms内拿不到锁的情况下监控锁是否已经超时
|
|
|
|
|
if (!lock.tryLock(MesPcnExtConstWords.FIVE_HUNDRED, TimeUnit.MILLISECONDS) && checkTimeOut(reqBean, pushSourceCode, key, lock)) return false;
|
|
|
|
|
if (!lock.tryLock(MesPcnExtConstWords.FIVE_HUNDRED, TimeUnit.MILLISECONDS)) {
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] false",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode);
|
|
|
|
|
if (checkTimeOut(reqBean, pushSourceCode, key, lock)) {
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] timeOut",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- tryLock [{}] true",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode);
|
|
|
|
|
lockTimeMap.put(key, TimeTool.getNowTime(true));
|
|
|
|
|
return true;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
@ -218,7 +228,11 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService {
|
|
|
|
|
private Boolean checkTimeOut(StationRequestBean reqBean, String pushSourceCode, String key, ReentrantLock lock) {
|
|
|
|
|
try {
|
|
|
|
|
String lockTime = lockTimeMap.get(key);
|
|
|
|
|
if ((StringUtils.isEmpty(lockTime) || TimeTool.getSecoundsBetweenTime(1, lockTime, TimeTool.getNowTime(true)) >= MesPcnExtConstWords.TEN) && lock.isLocked()) lock.unlock();
|
|
|
|
|
if ((StringUtils.isEmpty(lockTime) || TimeTool.getSecoundsBetweenTime(1, lockTime, TimeTool.getNowTime(true)) >= MesPcnExtConstWords.TEN) && lock.isLocked()) {
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- checkTimeOut [{}] unlock",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode);
|
|
|
|
|
lock.unlock();
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
if (lock.isLocked()) lock.unlock();
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- checkTimeOut [{}] EXCEPTION: {}",
|
|
|
|
@ -234,6 +248,8 @@ public class MesWorkOrderQueueAcceptStepService extends BaseStepService {
|
|
|
|
|
lockMap.computeIfPresent(key, (k, v) -> {
|
|
|
|
|
if (!v.isHeldByCurrentThread() || !v.isLocked()) return v;
|
|
|
|
|
v.unlock();
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- unLock [{}] true",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), pushSourceCode);
|
|
|
|
|
return v;
|
|
|
|
|
});
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|