焦作-mxbc-北起
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 40b5232811
commit 2d10ca8ae3

@ -47,7 +47,7 @@ public class CameraControlController {
log.info("相机登录 cameraId:{}",cameraId);
Camera camera = cameraMapper.selectById(cameraId);
Assert.notNull(camera,"球机不存在");
NetSDKLib.LLong lLong = loginControlModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword());
NetSDKLib.LLong lLong = loginControlModule.login(cameraId,camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword());
return lLong;
}
@ -335,6 +335,11 @@ public class CameraControlController {
private void checkLogin(Integer cameraId) {
if (CameraConnMap.getConnId(cameraId) != null) {
Camera camera = cameraMapper.selectById(cameraId);
if (CameraConnMap.getConnId(cameraId)!=null){
cameraService.cameraLogin(camera);
}
Boolean ok = false;
if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(cameraId).intValue());
@ -344,7 +349,6 @@ public class CameraControlController {
if (!ok) {
{
CameraConnMap.disConn(cameraId);
Camera camera = cameraMapper.selectById(cameraId);
cameraService.cameraLogin(camera);
}
}

@ -46,6 +46,7 @@ public class CheckLog {
private Integer status;
private String subtag;;
private String taskId;
private String pic;

@ -8,5 +8,5 @@ public class UploadCheckResults {
private String wmsTaskId;
private String palno;
private String addre;
private Integer flag;
private String flag;
}

@ -1,5 +1,6 @@
package com.zhehekeji.web.lib;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.lib.joyware.NetSDKLib;
import java.util.HashMap;
@ -15,6 +16,11 @@ public class CameraConnMap {
* value: loginId
*/
public static Map<Integer, NetSDKLib.LLong> cameraMap = new HashMap<>();
/**
* key :cameraId
* value: loginId
*/
public static Map<Integer, Camera> cameraByIdMap = new HashMap<>();
/**
* key:loginId
@ -23,10 +29,9 @@ public class CameraConnMap {
public static Map<NetSDKLib.LLong,Integer> loginMap = new HashMap<>();
public static void conn(Integer cameraId,NetSDKLib.LLong handlerId){
synchronized (cameraId.toString().intern()){
cameraMap.put(cameraId,handlerId);
loginMap.put(handlerId,cameraId);
}
}

@ -4,6 +4,6 @@ import com.zhehekeji.web.lib.joyware.NetSDKLib;
public interface CameraControlLoginModule {
NetSDKLib.LLong login(String ip, int port, String user, String password);
NetSDKLib.LLong login(Integer cameraId,String ip, int port, String user, String password);
}

@ -120,7 +120,7 @@ public interface CameraControlModule {
boolean pic(Integer cameraId, int channel, String realPath);
void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end);
boolean downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end);
/**
*

@ -1,14 +1,19 @@
package com.zhehekeji.web.lib;
import com.zhehekeji.common.util.SpringContextUtil;
import com.zhehekeji.web.service.CameraService;
import java.time.LocalDateTime;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static com.zhehekeji.web.lib.CameraConnMap.cameraMap;
public class TaskDelayExecutor {
private static ExecutorService exec = Executors.newFixedThreadPool(1);
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
@ -28,8 +33,9 @@ public class TaskDelayExecutor {
cameraDelayTask.setPtzId(ptzId);
queue.add(cameraDelayTask);
}
private static CameraService cameraService = SpringContextUtil.getBean(CameraService.class);
public static void runMp4DownloadExecutor(){
exec.execute(new Consumer());
}
@ -44,10 +50,21 @@ public class TaskDelayExecutor {
if(cameraDelayTask != null){
if(cameraDelayTask.getType() == 0){
cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime());
for(int i = 0; i < 3; i++) {
if(cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime())){
break;
}else {
cameraService.cameraConnect( cameraDelayTask.getCameraId());
}
}
}else if(cameraDelayTask.getType() == 1){
cameraControlModule.pic(cameraDelayTask.getCameraId(),0, cameraDelayTask.getPath());
for(int i = 0; i < 10; i++) {
if(cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath())){
break;
}else {
cameraService.cameraConnect( cameraDelayTask.getCameraId());
}
}
}else if(cameraDelayTask.getType() == 2){
cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId());
}

@ -306,7 +306,7 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
return picResult;
}
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
public boolean downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
PathUtil.checkDirc(path);
HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME();
@ -318,12 +318,15 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
int lUserID = CameraConnMap.getConnId(cameraId).intValue();
int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(lUserID, 1, startTime, endTime, path);
if (result == -1) {
log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path);
return false;
} else {
HikLoginModuleImpl.hcNetsdk.NET_DVR_PlayBackControl(result, HikLoginModuleImpl.hcNetsdk.NET_DVR_PLAYSTART,0,null);
Timer downloadtimer = new Timer();
downloadtimer.schedule(new DownloadTask(result,downloadtimer,path,cameraId), 0, 5000);
return true;
}
}

@ -1,6 +1,7 @@
package com.zhehekeji.web.lib.hik;
import com.sun.jna.Pointer;
import com.zhehekeji.web.lib.CameraConnMap;
import com.zhehekeji.web.lib.CameraControlLoginModule;
import com.zhehekeji.web.lib.joyware.NetSDKLib;
import lombok.extern.slf4j.Slf4j;
@ -69,7 +70,7 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
*
* \endif
*/
public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
public NetSDKLib.LLong login(Integer cameraId,String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
init();
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
@ -89,6 +90,17 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
m_strLoginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息
////先注销,在登录
if (CameraConnMap.getConnId(cameraId) !=null ) {
if(hcNetsdk.NET_DVR_Logout_V30(CameraConnMap.getConnId(cameraId).intValue())) {
log.error("hik logout error,ip:{},port:{},errorCode:{}", m_strIp, m_nPort, hcNetsdk.NET_DVR_GetLastError());
}else {
CameraConnMap.disConn(cameraId);
}
}
int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);
int lChannel = 2;
//byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值

@ -288,7 +288,7 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule {
return ok;
}
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
public boolean downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
PathUtil.checkDirc(path);
NetSDKLib.NET_TIME startTime = new NetSDKLib.NET_TIME();
@ -311,9 +311,11 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule {
NetSDKLib.LLong l = JoywareLoginModuleImpl.netsdk.CLIENT_DownloadByDataType(CameraConnMap.getConnId(cameraId), download_by_data_type.getPointer(), net_out_download_by_data_type.getPointer(), 8000);
if(l.longValue() != 0){
log.info("start download mp4 path:{},startTime:{} ,endTime:{},now:{},status:{},cameraId:{}", path, start, end, LocalDateTime.now(),l.longValue(),cameraId);
}else {
return true;
}else {
log.error("download mp4 error:{},startTime:{} ,endTime:{},cameraId:{}",ToolKits.getErrorCodePrint(),start,end,cameraId);
return false;
}
}

@ -117,7 +117,7 @@ public class JoywareLoginModuleImpl implements CameraControlLoginModule {
*
* \endif
*/
public LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
public LLong login(Integer cameraId,String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
//IntByReference nError = new IntByReference(0);
//入参
init(disConnectCallBack,haveReConnect);

@ -11,6 +11,7 @@ import java.time.LocalDateTime;
public class CheckLogSearch {
private String lotnum;
private String taskId;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTimestamp;

@ -14,6 +14,7 @@ public class StockCheck {
// private String shelveId;
private Integer streetId;
private Integer streetPlc;
private Integer direction;

@ -186,7 +186,7 @@ public class CameraService {
public List<Camera> allCameras3(){
Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn();
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit 2,4"));
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit 4,4"));
return cameras;
}
@ -344,12 +344,23 @@ public class CameraService {
}
}
public void cameraConnect(Integer cameraId){
log.error("camera unconnected,cameraId:{}",cameraId);
Camera camera = cameraMapper.selectById(cameraId);
cameraLogin(camera);
}
public void cameraLogin(Camera camera){
NetSDKLib.LLong lLong = cameraControlLoginModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword());
synchronized (camera.getId().toString().intern()){
NetSDKLib.LLong lLong = cameraControlLoginModule.login(camera.getId(),camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword());
if(lLong != null){
log.info("camera login success,cameraId:{},ip:{}",camera.getId(),camera.getIp());
CameraConnMap.conn(camera.getId(),lLong);
}
}
}

@ -52,6 +52,7 @@ public class CheckLogService {
if(search.getStreetId() != null && search.getStreetId() != 0){
wrapper.eq("`street_id`",search.getStreetId());
}
wrapper.like(search.getTaskId()!= null && !search.getTaskId().equals(""), "`task_id`",search.getTaskId());
wrapper.orderByDesc("create_Time");
List<CheckLog>stockChecks = checkLogMapper.selectList(wrapper);
stockChecks.forEach(l->{

@ -117,6 +117,9 @@ public class CronTab {
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<>());
for (Camera camera : cameras){
Boolean ok = false;
if (CameraConnMap.getConnId(camera.getId()) !=null){
cameraService.cameraLogin(camera);
}
if(configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA ){
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue());
}else {

@ -25,6 +25,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
@ -84,6 +85,7 @@ public class InitService implements ApplicationRunner {
cameras.forEach(camera -> {
LoginThread loginThread = new LoginThread(camera);
loginThread.start();
CameraConnMap.cameraByIdMap.put(camera.getId(),camera);
});
LPLicense.createLicKeyIfNotExist();
//plc连接

@ -142,6 +142,7 @@ public class PlcService {
OrderRealtime.startOrder(street.getId(), plcCmdInfo.getOrderNum());
}
}
public boolean openStreetLightSource(Integer streetId) {
List<LightSource> lightSources = lightSourceService.getLightSourceByStreetId(streetId);
lightSources.forEach(lightSource -> {
@ -176,29 +177,22 @@ public class PlcService {
verticalAdjustment(street.getCamera2Id());
}
}
public void verticalAdjustment(Integer cameraId) {
log.info("球机" + cameraId + "重置垂直方向开始");
Double origin = null;
int i = 10 ;
while (i >=0){
i-- ;
CameraPtzPojo cameraPtzPojo = cameraControlModule.ptzGetDVRConfig(cameraId);
if (cameraPtzPojo.isGetSuccess()) {
cameraControlModule.ptzControlDownStart(cameraId, 0, 0, 1);
log.info("球机控制向下");
System.out.println("获取的垂直位置" + cameraPtzPojo.getWTiltPos());
if (origin == null) {
origin = cameraPtzPojo.getWTiltPos();
} else if (cameraPtzPojo.getWTiltPos() <= origin) {
break;
}
}
try {
Thread.sleep(500);
//预设5秒回到原点位
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
log.info("球机" + cameraId + "重置垂直方向成功");
cameraControlModule.ptzControlDownEnd(cameraId, 0);
gyrateCameraByCode(cameraId, "C1");
@ -221,6 +215,7 @@ public class PlcService {
return true;
}
/**
*
*
@ -767,6 +762,7 @@ public class PlcService {
log.info("time:{}millisecond", s);
return true;
}
public void checkLog(Stock stock) {
CheckLog checkLog = new CheckLog();
checkLog.setCheckNum(stock.getCheckNum());
@ -776,6 +772,7 @@ public class PlcService {
checkLog.setSide(stock.getSide());
checkLog.setSubtag(stock.getSubtag());
checkLog.setCode(stock.getCode());
checkLog.setTaskId(stock.getTaskWMSId());
checkLog.setWmsCode(stock.getWmsCode());
checkLog.setStatus(stock.getStatus());
checkLog.setRow(stock.getRow());
@ -788,6 +785,7 @@ public class PlcService {
checkLogMapper.insert(checkLog);
log.info("checklogmapper insert new checklog info finished.");
}
public void truncateStock() {
stockMapper.truncate();
}
@ -821,6 +819,7 @@ public class PlcService {
}
return tags;
}
public ConfigProperties getConfigProperties() {
return configProperties;
}

@ -1,6 +1,7 @@
package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@ -19,6 +20,9 @@ import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -407,17 +411,25 @@ public class StockService {
*/
public Stock stockInfo(StockCheck stockCheck) {
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(stockCheck.getStreetId(), stockCheck.getDirection(), stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn());
Street street = streetMapper.selectOne(new QueryWrapper<Street>()
.eq(stockCheck.getStreetPlc()!=null,"plc_Id", stockCheck.getStreetPlc())
.eq(stockCheck.getStreetId()!=null,"id", stockCheck.getStreetId()));
Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("`row`", stockCheck.getRow())
.eq("`column`", stockCheck.getColumn())
.eq("`direction`", stockCheck.getDirection())
.eq("`side`", stockCheck.getSide())
.eq(stockCheck.getStreetId()!=null,"`street_id`", stockCheck.getStreetId())
.eq(stockCheck.getStreetPlc()!=null,"`street_id`", stockCheck.getStreetPlc()));
if (stock == null) {
stock = new Stock();
stock.setColumn(stockCheck.getColumn());
stock.setRow(stockCheck.getRow());
//stock.setShelveId(stockCheck.getShelveId());
stock.setStatus(0);
Street street = streetMapper.selectById(stockCheck.getStreetId());
stock.setStreetName(street.getName());
} else {
Street street = streetMapper.selectById(stock.getStreetId());
stock.setStreetName(street.getName());
List<StockLog> stockLogs = stockLogMapper.selectList(new QueryWrapper<StockLog>().eq("`row`", stockCheck.getRow()).eq("`column`", stockCheck.getColumn()).eq("street_id", stockCheck.getStreetId()).eq("direction", stockCheck.getDirection()).eq("side", stockCheck.getSide()).orderByDesc("create_time").last(" limit 2"));
@ -495,6 +507,9 @@ public class StockService {
public void uploadResultsWMS(Stock stock, Integer stockStatus) {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
ResponseEntity<String> body = null;
RestTemplate restTemplate = new RestTemplate();
String url = configProperties.getUploadResultsApiUrl();
@ -507,14 +522,17 @@ public class StockService {
uploadCheckResults.setWcsTaskId(stock.getCheckNum().split("_")[1]);
uploadCheckResults.setWmsTaskId(stock.getTaskWMSId());
uploadCheckResults.setPalno(stock.getWmsCode());
uploadCheckResults.setFlag(stockStatus == 1 ? 1 : 0);
uploadCheckResults.setFlag(stockStatus == 1 ? "1" : "0");
uploadCheckResults.setAddre(stock.getAddre());
List<UploadCheckResults> list = new ArrayList<>();
list.add(uploadCheckResults);
HttpEntity<List<UploadCheckResults>> requestEntity = new HttpEntity<>(list, requestHeaders);
try {
// String jsonString = gson.toJson(algorithmPojo);
body = restTemplate.postForEntity(url, uploadCheckResults, String.class);
JSONObject.parseObject(body.getBody(), UploadCheckResults.class);
System.out.println("上传信息:"+ JSON.toJSONString(list));
body = restTemplate.postForEntity(url, list, String.class);
System.out.println(body);
} catch (RestClientException e) {
@ -523,6 +541,24 @@ public class StockService {
}
}
public static void main(String[] args) {
UploadCheckResults uploadCheckResults = new UploadCheckResults();
//String url = "http://127.0.0.1:8083"+"/visionCompute";
uploadCheckResults.setWcsTaskId("1111");
uploadCheckResults.setWmsTaskId("stock.getTaskWMSId()");
uploadCheckResults.setPalno("stock.getWmsCode()");
uploadCheckResults.setFlag(1 == 1 ? "1" : "0");
uploadCheckResults.setAddre("stock.getAddre()");
List<UploadCheckResults> list = new ArrayList<>();
list.add(uploadCheckResults);
System.out.println(JSON.toJSONString(list));
}
@Resource
private CheckLogMapper checkLogMapper;

@ -10,7 +10,7 @@ public class KsecDataInfo {
private String cmdName;
private String taskId;
private String taskWMSId;
private String taskWMSTaskId;
private Integer fromColumn;

@ -97,7 +97,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
plcCmdInfo = new PlcCmdInfo(dataInfo.getSRMNumber(), dataInfo.getTaskId(), dataInfo.getFromSide(), dataInfo.getFromDirection(), dataInfo.getFromColumn(), dataInfo.getFromRow(), dataInfo.getFromSeparation(), dataInfo.getToSide(), dataInfo.getToDirection(), dataInfo.getToColumn(), dataInfo.getToRow(), dataInfo.getToSeparation(), lotnum);
plcCmdInfo.setSubtag(dataInfo.getSubtag());
plcCmdInfo.setAddre(dataInfo.getAddre());
plcCmdInfo.setTaskWMSId(dataInfo.getTaskWMSId());
plcCmdInfo.setTaskWMSId(dataInfo.getTaskWMSTaskId());
plcCmdInfo.setAddre(dataInfo.getAddre());
plcCmdInfo.setWmsTrayCode(dataInfo.getTrayCode());
plcCmdInfo.setTrayCode(dataInfo.getCode());

@ -50,6 +50,10 @@ public class KsecNettyClient {
* @param upId
*/
public void reconnect(Integer upId) {
if(channel!=null){
channel.disconnect();
channel.close();
}
Boolean isConnected = false;
int num = 0;
ConfigProperties.KSEC ksec = configProperties.getKsec();

Loading…
Cancel
Save