获取个数和品规采用opencv逻辑

淮阴-烟草
LAPTOP-S9HJSOEB\昊天 1 year ago
parent d3bc511b70
commit 5fcefe85f1

@ -0,0 +1,13 @@
package com.zhehekeji.web.pojo;
import lombok.Data;
@Data
public class AlgorithmPojo {
//旋转路径
private String rotationPath;
//判定路径
private String determinePath;
//结果
private Boolean result;
}

@ -8,6 +8,7 @@ import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.entity.*; import com.zhehekeji.web.entity.*;
import com.zhehekeji.web.lib.*; import com.zhehekeji.web.lib.*;
import com.zhehekeji.web.mapper.*; import com.zhehekeji.web.mapper.*;
import com.zhehekeji.web.pojo.AlgorithmPojo;
import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.pojo.OrderVO;
import com.zhehekeji.web.pojo.camera.CameraPtzPojo; import com.zhehekeji.web.pojo.camera.CameraPtzPojo;
import com.zhehekeji.web.pojo.stock.StockStatus; import com.zhehekeji.web.pojo.stock.StockStatus;
@ -20,6 +21,7 @@ import com.zhehekeji.web.service.client.TransmissionPojo;
import com.zhehekeji.web.service.client.TransmissionType; import com.zhehekeji.web.service.client.TransmissionType;
import com.zhehekeji.web.service.ksec.KsecDataInfo; import com.zhehekeji.web.service.ksec.KsecDataInfo;
import com.zhehekeji.web.service.ksec.KsecInfo; import com.zhehekeji.web.service.ksec.KsecInfo;
import com.zhehekeji.web.service.ksec.KsecNettyClient;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -663,7 +665,7 @@ public class PlcService {
Lock lock = new ReentrantLock(); Lock lock = new ReentrantLock();
public void check(PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo) { public boolean check(PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo) {
Street street = streetService.getStreetByPlcId(dataInfo.getSRMNumber()); Street street = streetService.getStreetByPlcId(dataInfo.getSRMNumber());
//开始盘点具体货位 //开始盘点具体货位
@ -683,7 +685,6 @@ public class PlcService {
checkLog.setWmsCount(dataInfo.getQuantity()); checkLog.setWmsCount(dataInfo.getQuantity());
checkLog.setWmsCategory(dataInfo.getTypeNum()); checkLog.setWmsCategory(dataInfo.getTypeNum());
checkLogMapper.insert(checkLog);
//如果存在则清空表 //如果存在则清空表
if (stockMapper.selectCount(new QueryWrapper<Stock>().eq("lotnum", checkLog.getLotnum())) == 0) { if (stockMapper.selectCount(new QueryWrapper<Stock>().eq("lotnum", checkLog.getLotnum())) == 0) {
stockMapper.delete(new QueryWrapper<Stock>().ne("lotnum", checkLog.getLotnum())); stockMapper.delete(new QueryWrapper<Stock>().ne("lotnum", checkLog.getLotnum()));
@ -710,43 +711,66 @@ public class PlcService {
if(stock.getCategory().length() == 6) { if(stock.getCategory().length() == 6) {
stock.setStatus(StockStatus.PENDING.getStatus()); stock.setStatus(StockStatus.PENDING.getStatus());
} }
stock.setExportTime(LocalDateTime.now());
if (stock.getId() == null) {
stockMapper.insert(stock);
} else stockMapper.updateById(stock);
TransmissionPojo transmissionPojo = new TransmissionPojo(checkLog, street);
if (ClientChanel.get(dataInfo.getSRMNumber()) != null) {
ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.ST));
} else {
log.error("未找到对应plc" + transmissionPojo.toString());
}
//取货完成进行拍照
try {
//不为其他状态进入队列 //进行品规识别,完成进行拍照
if (lock.tryLock()) { if( stock.getCategory() != null && "20".equals(stock.getCategory())) {
//队列中没有任务,发送取图指令 checkLog.setStatus(StockStatus.OTHER.getStatus());
//只采用队列,队列中有数据则自动发送 stock.setStatus(StockStatus.OTHER.getStatus());
//模拟随行 }
if (configProperties.isInventorySimulationFollow() ) { AlgorithmPojo algorithmPojo = sendHttp(street,stock.getDirection(),dataInfo.getTypeNum());
TransmissionPojo transmissionPojoFollow = new TransmissionPojo(street, transmissionPojo.getRow(),transmissionPojo.getColumn(),transmissionPojo.getDirection(), ""); if (algorithmPojo!=null){
String s = (transmissionPojoFollow).toString(TransmissionType.GPS); if (algorithmPojo.getResult()){
checkLog.setStatus(StockStatus.SUCCESS.getStatus());
stock.setStatus(StockStatus.SUCCESS.getStatus());
stock.setCategory(dataInfo.getTypeNum());
//放置到队列中,等待取图返回后删除 checkLog.setCategory(dataInfo.getTypeNum());
GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), s, configProperties.getQueueSpanTime(),transmissionPojoFollow);
}else {
checkLog.setStatus(StockStatus.ERROR.getStatus());
stock.setStatus(StockStatus.ERROR.getStatus());
}
} checkLog.setPic("http://"+street.getPlcIp()+":9007/pic/"+algorithmPojo.getDeterminePath());
//放置到队列中,等待取图返回后删除 stock.setCheckPic("http://"+street.getPlcIp()+":9007/pic/"+algorithmPojo.getDeterminePath());
GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), transmissionPojo.toString(TransmissionType.GPS), configProperties.getQueueSpanTime(),transmissionPojo); }
}
} catch (Exception e) { checkLogMapper.insert(checkLog);
log.error("取图命令 error", e); stock.setExportTime(LocalDateTime.now());
} finally { if (stock.getId() == null) {
lock.unlock(); stockMapper.insert(stock);
log.info("盘点完成"); } else stockMapper.updateById(stock);
} if (algorithmPojo != null) {
return algorithmPojo.getResult();
}else {
return false;
}
// try {
//
// //不为其他状态进入队列
// if (lock.tryLock()) {
// //队列中没有任务,发送取图指令
// //只采用队列,队列中有数据则自动发送
// //模拟随行
// if (configProperties.isInventorySimulationFollow() ) {
// TransmissionPojo transmissionPojoFollow = new TransmissionPojo(street, transmissionPojo.getRow(),transmissionPojo.getColumn(),transmissionPojo.getDirection(), "");
// String s = (transmissionPojoFollow).toString(TransmissionType.GPS);
//
// //放置到队列中,等待取图返回后删除
// GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), s, configProperties.getQueueSpanTime(),transmissionPojoFollow);
//
//
// }
// //放置到队列中,等待取图返回后删除
// GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), transmissionPojo.toString(TransmissionType.GPS), configProperties.getQueueSpanTime(),transmissionPojo);
// }
//
// } catch (Exception e) {
// log.error("取图命令 error", e);
// } finally {
// lock.unlock();
// log.info("盘点完成");
// }
// ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(); // ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush();
@ -780,6 +804,30 @@ public class PlcService {
checkLogMapper.updateById(checkLog); checkLogMapper.updateById(checkLog);
stockMapper.updateById(stock); stockMapper.updateById(stock);
} }
public static AlgorithmPojo sendHttp(Street street,Integer direction , String category ){
// 创建RestTemplate实例
RestTemplate restTemplate = new RestTemplate();
// 定义请求URL
String url = "http://"+street.getPlcIp()+":8097/hik/distinguish?streetNumber={streetNumber}&direction={direction}&category={category}";
// 定义请求参数
// 替换为实际的category
// 发送GET请求并获取响应
ResponseEntity<AlgorithmPojo> response = restTemplate.getForEntity(url, AlgorithmPojo.class, street.getPlcId(),direction, category);
// 输出响应结果
if (response.getStatusCode().is2xxSuccessful()) {
System.out.println("Distinguish result: " + response);
return response.getBody();
} else {
System.out.println("Failed to get response. Status code: " + response.getStatusCode());
return null;
}
}
public int sendHttp(String streetNumber,PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo){ public int sendHttp(String streetNumber,PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo){
Street street = streetService.getStreetByPlcId(streetNumber); Street street = streetService.getStreetByPlcId(streetNumber);
@ -787,13 +835,14 @@ public class PlcService {
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
// 定义 URL // 定义 URL
String url = "http://"+street.getPlcIp()+":8097/category/getBoxCount"; String url = "http://"+street.getPlcIp()+":8097/category/getBoxCountByCategory?streetId={streetNumber}&category={category}";
boolean flag = false; boolean flag = false;
int count = 0; int count = 0;
try { try {
// 发起 GET 请求 // 发起 GET 请求
ResponseEntity<Integer> response = restTemplate.getForEntity(url, Integer.class); ResponseEntity<Integer> response = restTemplate.getForEntity(url, Integer.class,streetNumber,plcCmdInfo.getCategoryName());
count = response.getBody(); count = response.getBody();
flag = true; flag = true;

@ -182,13 +182,16 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
if (Cmd.E1.name().equals(cmdName)){ if (Cmd.E1.name().equals(cmdName)){
plcService.check(plcCmdInfo, dataInfo); boolean f = plcService.check(plcCmdInfo, dataInfo);
ksecInfo.getData().setCheckRlt(f?1:0);
ksecInfo.getData().setCmdName("E2");
KsecNettyClient.write(ksecInfo);
}else if (Cmd.E3.name().equals(cmdName)){ }else if (Cmd.E3.name().equals(cmdName)){
//获取个数 //获取个数
int count = plcService.sendHttp(dataInfo.getSRMNumber(),plcCmdInfo,dataInfo); int status = plcService.sendHttp(dataInfo.getSRMNumber(),plcCmdInfo,dataInfo);
dataInfo.setCmdName("E4"); dataInfo.setCmdName("E4");
dataInfo.setCheckRlt(count); dataInfo.setCheckRlt(status);
KsecNettyClient.write(ksecInfo); KsecNettyClient.write(ksecInfo);
} }

Loading…
Cancel
Save