推送只推送一条给算法

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

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

Loading…
Cancel
Save