推送只推送一条给算法

just-order
LAPTOP-S9HJSOEB\昊天 2 years ago
parent f059a2b3d6
commit 7926a7d590

@ -733,6 +733,7 @@ public class PlcService {
Thread.sleep(50L);
if (lock.tryLock()) {
//队列中没有任务,发送取图指令
//只采用队列,队列中有数据则自动发送
if (GetPhotoDelayExecutor.cameraDelayTasks.size() == 0 && ClientChanel.get(dataInfo.getSRMNumber()) != null) {
ClientChanel.get(street.getPlcId()).writeAndFlush(transmissionPojo.toString(TransmissionType.GPS));
}

@ -10,63 +10,95 @@ import com.zhehekeji.web.service.ksec.KsecNettyClient;
import java.util.Map;
import java.util.concurrent.*;
/**
* GetPhotoDelayExecutor
*/
public class GetPhotoDelayExecutor {
// 延时队列存放CameraDelayTask任务
public static DelayQueue<CameraDelayTask> cameraDelayTasks = new DelayQueue<>();
// 线程池,用于执行延时任务
private static ExecutorService exec = Executors.newFixedThreadPool(1);
/**
*
*
* @param cameraPlcId PLC
* @param getPhotoCommand
* @param time
*/
public static void addCameraDelayTask(String cameraPlcId, String getPhotoCommand, long time) {
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraPlcId, getPhotoCommand, time);
cameraDelayTasks.add(cameraDelayTask);
}
/**
* PLC
*
* @param getPhotoCommand
* @param cameraPlcId
*/
public static void remove(String getPhotoCommand, String cameraPlcId) {
cameraPlcId = cameraPlcId.intern();
synchronized (cameraPlcId) {
// 将延时队列中的任务转换为数组,便于遍历和移除
Object[] cameraDelayTask = cameraDelayTasks.toArray();
for (Object cameraDelayTask1 : cameraDelayTask) {
CameraDelayTask cameraDelayTask2 = (CameraDelayTask) cameraDelayTask1;
if (cameraDelayTask2.getCommand().equals(getPhotoCommand)) {
if (cameraDelayTask2.getCameraPlcId().equals(getPhotoCommand)) {
cameraDelayTasks.remove(cameraDelayTask2);
}
}
}
}
/**
*
*
* @param cameraPlcId PLC使
* @return null
*/
public static CameraDelayTask getNext(String cameraPlcId) {
Object[] cameraDelayTask = cameraDelayTasks.toArray();
if (cameraDelayTask.length > 0) {
CameraDelayTask cameraDelayTask2 = (CameraDelayTask) cameraDelayTask[0];
remove(cameraDelayTask2.getCommand(), cameraPlcId);
return cameraDelayTask2;
}
return null;
}
/**
*
*/
public static void runExecutor() {
exec.execute(new GetPhotoDelayExecutor.Consumer());
}
/**
* ConsumerRunnable
*/
private static class Consumer implements Runnable {
/**
*
*/
@Override
public void run() {
while (true) {
try {
// 从Spring上下文中获取PlcService实例
PlcService plcService = SpringContextUtil.getBean(PlcService.class);
// 从延时队列中获取并移除一个任务
CameraDelayTask cameraDelayTask = cameraDelayTasks.take();
if(cameraDelayTask != null) {
// 构造传输对象,并将任务命令等信息设置进去
TransmissionPojo transmissionPojo = new TransmissionPojo(cameraDelayTask.getCommand());
//发送给上位机
// 调用PLC服务模拟发送数据到上位机
KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo, "E");
ksecInfo.getData().setTypeNum(transmissionPojo.getCategory());
ksecInfo.getData().setQuantity(transmissionPojo.getCount());
ksecInfo.getData().setCheckRlt(0);
// 将信息发送给上位机
KsecNettyClient.write(ksecInfo);
}
} catch (InterruptedException e) {

Loading…
Cancel
Save