增加烟名与烟编码对应

完善队列管理
just-order
LAPTOP-S9HJSOEB\昊天 2 years ago
parent a992e94093
commit e6b42d74c3

@ -67,8 +67,8 @@ public class StockController {
@ApiOperation(value = "获取品规列表") @ApiOperation(value = "获取品规列表")
@RequestMapping(value = "/getCategoryList", method = RequestMethod.POST) @RequestMapping(value = "/getCategoryList", method = RequestMethod.POST)
public Result<List<String>> getCategoryList() { public Result<Map<String,String>> getCategoryList() {
List<String> list = stockService.getCategoryList(); Map<String,String> list = stockService.getCategoryList();
return Result.success(list); return Result.success(list);
} }

@ -1,5 +1,6 @@
package com.zhehekeji.web.lib; package com.zhehekeji.web.lib;
import com.zhehekeji.web.service.client.TransmissionPojo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -16,6 +17,8 @@ public class CameraDelayTask implements Delayed {
private String cameraPlcId; private String cameraPlcId;
private LocalDateTime startTime; private LocalDateTime startTime;
private TransmissionPojo transmissionPojo;
private LocalDateTime endTime; private LocalDateTime endTime;
private String command; private String command;
@ -32,6 +35,7 @@ public class CameraDelayTask implements Delayed {
private Integer ptzId; private Integer ptzId;
public CameraDelayTask(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime, String path, Integer type, long delayTime) { public CameraDelayTask(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime, String path, Integer type, long delayTime) {
this.cameraId = cameraId; this.cameraId = cameraId;
this.startTime = startTime; this.startTime = startTime;
@ -42,11 +46,21 @@ public class CameraDelayTask implements Delayed {
this.delayTime = delayTime; this.delayTime = delayTime;
} }
public CameraDelayTask(String cameraPlcId, String command, long delayTime,TransmissionPojo transmissionPojo) {
this.cameraPlcId = cameraPlcId;
this.command = command;
this.executeTime = System.currentTimeMillis()+delayTime;
this.delayTime = delayTime;
this.transmissionPojo = transmissionPojo;
}
public CameraDelayTask(String cameraPlcId, String command, long delayTime) { public CameraDelayTask(String cameraPlcId, String command, long delayTime) {
this.cameraPlcId = cameraPlcId; this.cameraPlcId = cameraPlcId;
this.command = command; this.command = command;
this.executeTime = System.currentTimeMillis()+delayTime; this.executeTime = System.currentTimeMillis()+delayTime;
this.delayTime = delayTime; this.delayTime = delayTime;
} }
@Override @Override
public long getDelay(TimeUnit unit) { public long getDelay(TimeUnit unit) {

@ -738,16 +738,16 @@ public class PlcService {
//只采用队列,队列中有数据则自动发送 //只采用队列,队列中有数据则自动发送
//模拟随行 //模拟随行
if (configProperties.isInventorySimulationFollow()) { if (configProperties.isInventorySimulationFollow()) {
TransmissionPojo transmissionPojoFollow = new TransmissionPojo(street, transmissionPojo.getRow(),transmissionPojo.getColumn(),transmissionPojo.getDirection(), "");
String s = (new TransmissionPojo(street, transmissionPojo.getRow(),transmissionPojo.getColumn(),transmissionPojo.getDirection(), "")).toString(TransmissionType.GPS); String s = (transmissionPojoFollow).toString(TransmissionType.GPS);
//放置到队列中,等待取图返回后删除 //放置到队列中,等待取图返回后删除
GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), s, configProperties.getQueueSpanTime()); GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), s, configProperties.getQueueSpanTime(),transmissionPojoFollow);
} }
//放置到队列中,等待取图返回后删除 //放置到队列中,等待取图返回后删除
GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), transmissionPojo.toString(TransmissionType.GPS), configProperties.getQueueSpanTime()); GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), transmissionPojo.toString(TransmissionType.GPS), configProperties.getQueueSpanTime(),transmissionPojo);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {

@ -327,10 +327,11 @@ public class StockService {
//stock.setShelveId(stockCheck.getShelveId()); //stock.setShelveId(stockCheck.getShelveId());
stock.setStatus(0); stock.setStatus(0);
} }else {
stock.setOveroperationPic("http://" + street.getPlcIp() + ":8007" + "/storeData/" + street.getPlcId() + "/" + stock.getRow() + "/" + stock.getColumn() + "/" + (stock.getDirection() + 2) + ".PNG"); stock.setOveroperationPic("http://" + street.getPlcIp() + ":8007" + "/storeData/" + street.getPlcId() + "/" + stock.getRow() + "/" + stock.getColumn() + "/" + (stock.getDirection() + 2) + ".PNG");
}
return stock; return stock;
} }
@ -445,12 +446,21 @@ public class StockService {
return stock; return stock;
} }
public List<String> getCategoryList() { public Map<String,String> getCategoryList() {
List<String> list = new ArrayList<>(); Map<String,String> map = new HashMap<>();
if(configProperties.getProductDoc() != null){ if(configProperties.getProductDoc() != null){
List<String> list = new ArrayList<>();
list = FileUtil.readLinesToList(configProperties.getProductDoc()); list = FileUtil.readLinesToList(configProperties.getProductDoc());
for(String s : list){
String[] split = s.split(":");
if(split.length == 2) {
map.put(split[0], split[1]);
}else {
map.put(split[0], split[0]);
}
}
} }
return list; return map;
} }

@ -112,7 +112,7 @@ public class Decoder extends DelimiterBasedFrameDecoder {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
//删除队列的拍照数据 //删除队列的拍照数据
GetPhotoDelayExecutor.remove(transmissionPojo.getStreetNumber(),transmissionPojo.toString(TransmissionType.GPS)); GetPhotoDelayExecutor.remove(transmissionPojo.getStreetNumber(),transmissionPojo);
//读取下一个发送 //读取下一个发送
CameraDelayTask cameraDelayTask = GetPhotoDelayExecutor.nextOne(transmissionPojo.getStreetNumber(),transmissionPojo.toString(TransmissionType.GPS)); CameraDelayTask cameraDelayTask = GetPhotoDelayExecutor.nextOne(transmissionPojo.getStreetNumber(),transmissionPojo.toString(TransmissionType.GPS));
if (cameraDelayTask != null) { if (cameraDelayTask != null) {
@ -131,6 +131,7 @@ public class Decoder extends DelimiterBasedFrameDecoder {
ksecInfo.getData().setQuantity(transmissionPojo.getCount()); ksecInfo.getData().setQuantity(transmissionPojo.getCount());
ksecInfo.getData().setCheckRlt(transmissionPojo.getResult()); ksecInfo.getData().setCheckRlt(transmissionPojo.getResult());
KsecNettyClient.write(ksecInfo); KsecNettyClient.write(ksecInfo);
GetPhotoDelayExecutor.removeTask(transmissionPojo.getStreetNumber(), transmissionPojo);

@ -23,7 +23,8 @@ public class GetPhotoDelayExecutor {
// 延时队列存放CameraDelayTask任务 // 延时队列存放CameraDelayTask任务
public static Map<String, DelayQueue<CameraDelayTask>> cameraDelayTaskMap = new ConcurrentHashMap<>(); public static Map<String, DelayQueue<CameraDelayTask>> cameraDelayTaskMap = new ConcurrentHashMap<>();
// 线程池,用于执行延时任务 // 线程池,用于执行延时任务
private static ExecutorService exec = Executors.newFixedThreadPool(10); public static DelayQueue<CameraDelayTask> delayTasks = new DelayQueue<>();
private static ExecutorService exec = Executors.newFixedThreadPool(15);
/** /**
* *
@ -32,7 +33,7 @@ public class GetPhotoDelayExecutor {
* @param getPhotoCommand * @param getPhotoCommand
* @param time * @param time
*/ */
public static void addCameraDelayTask(String cameraPlcId, String getPhotoCommand, long time) { public static void addCameraDelayTask(String cameraPlcId, String getPhotoCommand, long time,TransmissionPojo transmissionPojo) {
if(cameraDelayTaskMap.get(cameraPlcId)==null || cameraDelayTaskMap.get(cameraPlcId).size() == 0) { if(cameraDelayTaskMap.get(cameraPlcId)==null || cameraDelayTaskMap.get(cameraPlcId).size() == 0) {
if( ClientChanel.get(cameraPlcId) != null){ if( ClientChanel.get(cameraPlcId) != null){
@ -43,7 +44,7 @@ public class GetPhotoDelayExecutor {
log.info("队列中无数据,未找到通信"+cameraPlcId); log.info("队列中无数据,未找到通信"+cameraPlcId);
} }
} }
CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraPlcId, getPhotoCommand, time); CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraPlcId, getPhotoCommand, time,transmissionPojo);
if(cameraDelayTaskMap.get(cameraPlcId)!=null){ if(cameraDelayTaskMap.get(cameraPlcId)!=null){
cameraDelayTaskMap.get(cameraPlcId).add(cameraDelayTask); cameraDelayTaskMap.get(cameraPlcId).add(cameraDelayTask);
@ -51,28 +52,57 @@ public class GetPhotoDelayExecutor {
cameraDelayTaskMap.put(cameraPlcId,new DelayQueue<>()); cameraDelayTaskMap.put(cameraPlcId,new DelayQueue<>());
cameraDelayTaskMap.get(cameraPlcId).add(cameraDelayTask); cameraDelayTaskMap.get(cameraPlcId).add(cameraDelayTask);
} }
delayTasks.add(cameraDelayTask);
} }
/** /**
* PLC * PLC
* *
* @param getPhotoCommand
* @param cameraPlcId * @param cameraPlcId
*/ */
public static CameraDelayTask remove(String cameraPlcId, String getPhotoCommand) { public static CameraDelayTask remove(String cameraPlcId, TransmissionPojo transmissionPojo) {
cameraPlcId = cameraPlcId.intern();
synchronized (cameraPlcId) { synchronized (cameraPlcId) {
// 将延时队列中的任务转换为数组,便于遍历和移除 // 将延时队列中的任务转换为数组,便于遍历和移除
Object[] objects = cameraDelayTaskMap.get(cameraPlcId).toArray(); Object[] objects = cameraDelayTaskMap.get(cameraPlcId).toArray();
if(objects.length > 0) { if(objects.length > 0) {
CameraDelayTask cameraDelayTask = (CameraDelayTask)objects[0]; for(Object object : objects){
if (cameraDelayTask != null) { CameraDelayTask cameraDelayTask = (CameraDelayTask)object;
if (cameraDelayTask != null
&& cameraDelayTask.getTransmissionPojo().getTaskId().equals(transmissionPojo.getTaskId())
&& cameraDelayTask.getTransmissionPojo().getCheckId().equals(transmissionPojo.getCheckId())
&& cameraDelayTask.getTransmissionPojo().getDirection().equals(transmissionPojo.getDirection())) {
cameraDelayTaskMap.get(cameraPlcId).remove(cameraDelayTask); cameraDelayTaskMap.get(cameraPlcId).remove(cameraDelayTask);
return cameraDelayTask; return cameraDelayTask;
} }
} }
}
}
return null;
}
public static CameraDelayTask removeTask(String cameraPlcId, TransmissionPojo transmissionPojo) {
synchronized (cameraPlcId){
// 将延时队列中的任务转换为数组,便于遍历和移除
Object[] objects = delayTasks.toArray();
if(objects.length > 0) {
for(Object object : objects){
CameraDelayTask cameraDelayTask = (CameraDelayTask)object;
if (cameraDelayTask != null
&& cameraDelayTask.getTransmissionPojo().getTaskId().equals(transmissionPojo.getTaskId())
&& cameraDelayTask.getTransmissionPojo().getCheckId().equals(transmissionPojo.getCheckId())
&& cameraDelayTask.getTransmissionPojo().getDirection().equals(transmissionPojo.getDirection())) {
delayTasks.remove(cameraDelayTask);
return cameraDelayTask;
}
}
}
} }
return null; return null;
} }
@ -100,6 +130,7 @@ public class GetPhotoDelayExecutor {
exec.execute(new GetPhotoDelayExecutor.Consumer(street)); exec.execute(new GetPhotoDelayExecutor.Consumer(street));
} }
exec.execute(new GetPhotoDelayExecutor.TaskConsumer());
} }
/** /**
@ -122,6 +153,38 @@ public class GetPhotoDelayExecutor {
// 从延时队列中获取并移除一个任务 // 从延时队列中获取并移除一个任务
if (cameraDelayTaskMap.get(street.getPlcId())!=null) { if (cameraDelayTaskMap.get(street.getPlcId())!=null) {
CameraDelayTask cameraDelayTask = cameraDelayTaskMap.get(street.getPlcId()).take(); CameraDelayTask cameraDelayTask = cameraDelayTaskMap.get(street.getPlcId()).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);
// // 将信息发送给上位机
// if (!transmissionPojo.getTaskId().equals("0"))
// KsecNettyClient.write(ksecInfo);
// }
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private static class TaskConsumer implements Runnable {
/**
*
*/
@Override
public void run() {
while (true) {
try {
// 从Spring上下文中获取PlcService实例
PlcService plcService = SpringContextUtil.getBean(PlcService.class);
// 从延时队列中获取并移除一个任务
CameraDelayTask cameraDelayTask = delayTasks.take();
if (cameraDelayTask != null) { if (cameraDelayTask != null) {
// 构造传输对象,并将任务命令等信息设置进去 // 构造传输对象,并将任务命令等信息设置进去
TransmissionPojo transmissionPojo = new TransmissionPojo(cameraDelayTask.getCommand()); TransmissionPojo transmissionPojo = new TransmissionPojo(cameraDelayTask.getCommand());
@ -134,7 +197,6 @@ public class GetPhotoDelayExecutor {
if (!transmissionPojo.getTaskId().equals("0")) if (!transmissionPojo.getTaskId().equals("0"))
KsecNettyClient.write(ksecInfo); KsecNettyClient.write(ksecInfo);
} }
}
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -142,5 +204,4 @@ public class GetPhotoDelayExecutor {
} }
} }
} }

@ -122,7 +122,13 @@ public class TransmissionPojo {
this.result = Integer.parseInt(dataArray[7])==0 ?0:1; this.result = Integer.parseInt(dataArray[7])==0 ?0:1;
//不记录2d图像 //不记录2d图像
//String path2D = "/fileData/"+this.taskId+"/"+this.checkId+"/"+this.direction+".jpg"; //String path2D = "/fileData/"+this.taskId+"/"+this.checkId+"/"+this.direction+".jpg";
String path3D = "/fileData/"+this.taskId+"/"+this.checkId+"/"+(this.direction+2)+".PNG";
String path3D ;
if((this.taskId!=null) && !"".equals(this.taskId)){
path3D = "/fileData/"+this.taskId+"/"+this.checkId+"/"+(this.direction+2)+".PNG";
}else {
path3D = "/fileData/"+this.checkId+"/"+(this.direction+2)+".PNG";
}
Set<String> strings = new HashSet<>(); Set<String> strings = new HashSet<>();
//strings.add(path2D); //strings.add(path2D);
strings.add(path3D); strings.add(path3D);
@ -136,6 +142,7 @@ public class TransmissionPojo {
if(s[i].startsWith(".")) { if(s[i].startsWith(".")) {
s[i] = s[i].replaceFirst(".", ""); // 移除单个字符 s[i] = s[i].replaceFirst(".", ""); // 移除单个字符
} }
// 或者 // 或者
// stringArray[i] = stringArray[i].replaceAll(regexToRemove, ""); // 使用正则表达式移除字符类别 // stringArray[i] = stringArray[i].replaceAll(regexToRemove, ""); // 使用正则表达式移除字符类别
} }
@ -151,8 +158,8 @@ public class TransmissionPojo {
} }
public static void main(String[] args) { public static void main(String[] args) {
//2024-05-31 17:52:07,909 INFO (Decoder.java:96)- receive client:RTE&001/1/9&2812&&2&0341&30&1&.\fileData\\2812\4.PNG;\fileData\\2812\2_0341_rlt.jpg&.\fileData\\2812\4.pcd, data length:106
TransmissionPojo transmissionPojo = new TransmissionPojo("GPE&002/1/18&7&2&123&41111&30&0&fff;.\\\\f.png;/f.png>"); TransmissionPojo transmissionPojo = new TransmissionPojo("RTE&001/1/9&2812&&2&0341&30&1&.\\fileData\\\\2812\\4.PNG;\\fileData\\\\2812\\2_0341_rlt.jpg&.\\fileData\\\\2812\\4.pcd>");
System.out.println(transmissionPojo); System.out.println(transmissionPojo);
} }

@ -70,7 +70,7 @@ IP: 127.0.0.1
# 服务端TCP端口 # 服务端TCP端口
serverPort: 8056 serverPort: 8056
# 服务端队列时间间隔(单位ms) # 服务端队列时间间隔(单位ms)
queueSpanTime: 10000 queueSpanTime: 20000
# ------------ 实时视频流 全部页面的格式 行列数量 # ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig: videoStyleConfig:
videoStyleRow: 4 videoStyleRow: 4
@ -96,6 +96,6 @@ scanCodeMode:
# 照片 視頻保存多久 # 照片 視頻保存多久
deleteFileDays: 30 deleteFileDays: 30
productDoc: "C:/Users/昊天/Desktop/新建 文本文档 (3).txt" productDoc: "C:\\Users\\昊天\\Desktop\\新建文本文档.txt"
inventorySimulationFollow: false inventorySimulationFollow: true
Loading…
Cancel
Save