package com.zy.core.cache;
|
|
import com.zy.core.model.protocol.TaskProtocol;
|
import lombok.extern.slf4j.Slf4j;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
/**
|
* Created by IX on 2025/02/21
|
*/
|
@Slf4j
|
public class TaskProtocolCache {
|
// 本地缓存,键为 taskNo,值为 TaskProtocol
|
private final ConcurrentHashMap<String, TaskProtocol> cache = new ConcurrentHashMap<>();
|
|
// 读写锁,确保线程安全
|
// private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
|
/**
|
* 更新设备状态
|
*/
|
public void updateTaskProtocol(TaskProtocol status) {
|
cache.put(status.getTaskNoDirection(), status);
|
}
|
|
/**
|
* 删除任务缓存
|
*/
|
public TaskProtocol removeTaskProtocol(String taskNoDirection) {
|
// lock.readLock().lock(); // 加读锁
|
try {
|
return cache.remove(taskNoDirection);
|
} finally {
|
// lock.readLock().unlock(); // 释放读锁
|
}
|
}
|
|
/**
|
* 获取所有任务
|
*/
|
public ConcurrentHashMap<String, TaskProtocol> getAllTaskProtocol() {
|
// lock.readLock().lock(); // 加读锁
|
try {
|
return new ConcurrentHashMap<>(cache); // 返回副本
|
} finally {
|
// lock.readLock().unlock(); // 释放读锁
|
}
|
}
|
|
/**
|
* 获取所有取任务
|
*/
|
public List<TaskProtocol> getTakeOrPutTaskProtocol(short loaded) {
|
if (loaded == 0){
|
return getAllTakeTaskProtocol();
|
} else if (loaded == 1){
|
return getAllPutTaskProtocol();
|
}
|
return new ArrayList<>();
|
}
|
|
/**
|
* 获取所有取任务
|
*/
|
public List<TaskProtocol> getAllTakeTaskProtocol() {
|
// lock.readLock().lock(); // 加读锁
|
try {
|
List<TaskProtocol> allTakeTaskProtocol = new ArrayList<>();
|
for (TaskProtocol task : cache.values()) {
|
if (task.getTaskStatus()==1) {
|
allTakeTaskProtocol.add(task);
|
}
|
}
|
return allTakeTaskProtocol; // 返回副本
|
} finally {
|
// lock.readLock().unlock(); // 释放读锁
|
}
|
}
|
|
/**
|
* 获取所有放任务
|
*/
|
public List<TaskProtocol> getAllPutTaskProtocol() {
|
// lock.readLock().lock(); // 加读锁
|
try {
|
List<TaskProtocol> allPutTaskProtocol = new ArrayList<>();
|
for (TaskProtocol task : cache.values()) {
|
if (task.getTaskStatus()==2) {
|
allPutTaskProtocol.add(task);
|
}
|
}
|
return allPutTaskProtocol; // 返回副本
|
} finally {
|
// lock.readLock().unlock(); // 释放读锁
|
}
|
}
|
|
/**
|
* 获取所有行走任务
|
*/
|
public List<TaskProtocol> getAllWalkTaskProtocol() {
|
// lock.readLock().lock(); // 加读锁
|
try {
|
List<TaskProtocol> allWalkTaskProtocol = new ArrayList<>();
|
for (TaskProtocol task : cache.values()) {
|
if (task.getTaskStatus()==0) {
|
allWalkTaskProtocol.add(task);
|
}
|
}
|
return allWalkTaskProtocol; // 返回副本
|
} finally {
|
// lock.readLock().unlock(); // 释放读锁
|
}
|
}
|
|
}
|