下载增加远程下载

(未测试,并且前端要同步修改未完成)
路径修改
减少报错
相机为空不报错
拍照端口修改
bozhou-古井贡酒
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 97826be003
commit bac44e656a

@ -80,12 +80,21 @@ public class ConfigProperties {
private Long scanTime = 5L; private Long scanTime = 5L;
} }
@Data
public class DownloadMp4{
private Integer type;//1.本地下载2.远程下载
private String path;
private String ip;
}
@Data @Data
public static class CameraConfig{ public static class CameraConfig{
private Integer cameraType; private Integer cameraType;
private Integer downloadType;
private String cameraPassword; private String cameraPassword;

@ -5,6 +5,7 @@ import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.core.util.Assert; import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.entity.CameraDownload;
import com.zhehekeji.web.lib.*; import com.zhehekeji.web.lib.*;
import com.zhehekeji.web.lib.hik.HCNetSDK; import com.zhehekeji.web.lib.hik.HCNetSDK;
import com.zhehekeji.web.lib.joyware.NetSDKLib; import com.zhehekeji.web.lib.joyware.NetSDKLib;
@ -14,6 +15,7 @@ import com.zhehekeji.web.service.PlcService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -313,11 +315,7 @@ public class CameraControlController {
//checkLogin(id); //checkLogin(id);
plcService.cameraVideo(1,LocalDateTime.now().minusSeconds(id),LocalDateTime.now().plusSeconds(3)); plcService.cameraVideo(1,LocalDateTime.now().minusSeconds(id),LocalDateTime.now().plusSeconds(3));
plcService.cameraVideo(2,LocalDateTime.now().minusSeconds(id),LocalDateTime.now().plusSeconds(3)); plcService.cameraVideo(2,LocalDateTime.now().minusSeconds(id),LocalDateTime.now().plusSeconds(3));
/*String path = PathUtil.createFileName("mp4",id); return Result.success();
String realPath = configProperties.getSavePath().getMp4Path() + path;
TaskDelayExecutor.addMp4DelayTask(id,realPath,LocalDateTime.now().minusMinutes(2),LocalDateTime.now().minusSeconds(7),12000L);*/
//cameraControlModule.downloadMp4(id,"D:\\work\\"+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".mp4", LocalDateTime.now().minusMinutes(10),LocalDateTime.now().minusMinutes(8));
return Result.success();
} }
@ -330,6 +328,17 @@ public class CameraControlController {
return Result.success(); return Result.success();
} }
@PostMapping("/mp4/delay")
@ApiOperation(value = "录像")
public String MP4delay( HttpEntity<CameraDownload> httpEntity) {
CameraDownload cameraDownload = httpEntity.getBody();
//checkLogin(id);
String path = plcService.cameraVideo(cameraDownload.getId(),cameraDownload.getStartTime(),cameraDownload.getEndTime());
return path;
}
@Resource @Resource
private CameraService cameraService; private CameraService cameraService;

@ -47,7 +47,7 @@ public class StreetController {
@ApiOperation(value = "全部巷道") @ApiOperation(value = "全部巷道")
//@SessionHandler //@SessionHandler
public Result<List<StreetVO>> list() { public Result<List<StreetVO>> list() {
return new Result(streetService.list()); return new Result(streetService.listVo());
} }
@PostMapping("") @PostMapping("")

@ -0,0 +1,15 @@
package com.zhehekeji.web.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class CameraDownload {
private Integer id;
private String ip;
private String port;
LocalDateTime startTime;
LocalDateTime endTime;
}

@ -13,7 +13,9 @@ public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack {
Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)); Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID));
if(dwType == 32768){ if(dwType == 32768){
log.error("hik disconnect,cameraId:{}", cameraId); if(cameraId != null){
log.error("hik disconnect,cameraId:{}", cameraId);
}
}else if(dwType == 32791){ }else if(dwType == 32791){
log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID))); log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)));

@ -13,7 +13,7 @@ public interface StreetMapper extends BaseMapper<Street> {
@Select("select count(0) from street where camera1_id = #{cameraId} or camera2_id = #{cameraId} limit 1") @Select("select count(0) from street where camera1_id = #{cameraId} or camera2_id = #{cameraId} limit 1")
Integer checkCamera(Integer cameraId); Integer checkCamera(Integer cameraId);
List<StreetVO> list(); List<StreetVO> listVo();
@Select("select * from street where plc_id = #{plcId} limit 1") @Select("select * from street where plc_id = #{plcId} limit 1")
Street getStreetByPlcId(String plcId); Street getStreetByPlcId(String plcId);

@ -38,7 +38,7 @@ public class CheckLogService {
wrapper.orderByDesc("create_time"); wrapper.orderByDesc("create_time");
List<CheckLog> stockChecks = checkLogMapper.selectList(wrapper); List<CheckLog> stockChecks = checkLogMapper.selectList(wrapper);
List<StreetVO> streetVOS = streetService.list(); List<StreetVO> streetVOS = streetService.listVo();
for (CheckLog checkLog : stockChecks) { for (CheckLog checkLog : stockChecks) {
for (StreetVO streetVO : streetVOS) { for (StreetVO streetVO : streetVOS) {
if (streetVO.getId().equals(checkLog.getStreetId())) { if (streetVO.getId().equals(checkLog.getStreetId())) {

@ -32,14 +32,21 @@ import org.apache.commons.collections4.SetUtils;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.poi.util.ArrayUtil; import org.apache.poi.util.ArrayUtil;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.*; import java.io.*;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -108,6 +115,15 @@ public class PlcService {
@Resource @Resource
private RfidLiveService rfidLiveService; private RfidLiveService rfidLiveService;
@Resource
private RestTemplate restTemplate ;
@Resource
private Environment environment;
public static Map<String, Set<String>> wmsTrayCodeMapByTask = new HashMap<>(); public static Map<String, Set<String>> wmsTrayCodeMapByTask = new HashMap<>();
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 8, 200, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100000)); private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 8, 200, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100000));
@ -251,14 +267,48 @@ public class PlcService {
public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) { public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) {
String path = PathUtil.createFileName("mp4", cameraId); String path = PathUtil.createFileName("mp4", cameraId);
Thread thread = new Thread(new Runnable() { if(configProperties.getCameraConfig().getDownloadType() == 1){
@Override String finalPath = path;
public void run() { Thread thread = new Thread(new Runnable() {
String realPath = configProperties.getSavePath().getMp4Path() + path; @Override
TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, configProperties.getCameraConfig().getDelayDownloadMp4()); public void run() {
String realPath = configProperties.getSavePath().getMp4Path() + finalPath;
TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, configProperties.getCameraConfig().getDelayDownloadMp4());
}
});
thread.start();
}else if(configProperties.getCameraConfig().getDownloadType() == 0){
Street street = streetService.getOne(new QueryWrapper<Street>().eq("camera1_Id",cameraId).or().eq("camera2_Id",cameraId));
if(street != null){
// 设置请求URL
String url = "http://"+street.getPlcIp()+":"+environment.getProperty("server.port")+"/api/camera/control/mp4/delay";
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 设置请求体
CameraDownload cameraDownload = new CameraDownload();
cameraDownload.setId(cameraId);
cameraDownload.setStartTime(startTime);
cameraDownload.setIp(street.getPlcIp());
cameraDownload.setPort(environment.getProperty("server.port"));
cameraDownload.setEndTime(endTime);
// 创建HttpEntity对象
HttpEntity<CameraDownload> requestEntity = new HttpEntity<>(cameraDownload, headers);
restTemplate.getMessageConverters().add(new StringHttpMessageConverter(Charset.forName("utf-8")));
// 发起POST请求获取响应数据
path = restTemplate.postForObject(url, requestEntity, String.class);
path = "http://"+street.getPlcIp()+":9007/api/mp4/"+path;
// 输出响应数据
System.out.println(path);
}else {
log.error("camera:{}未绑定巷道,无法远程下载",cameraId);
} }
}); }
thread.start();
//cameraControlModule.downloadMp4(cameraId,realPath,startTime,endTime); //cameraControlModule.downloadMp4(cameraId,realPath,startTime,endTime);
return path; return path;
} }
@ -651,9 +701,9 @@ public class PlcService {
//核对异常 //核对异常
Integer status = 1; Integer status = 1;
//托盘和货物都正确 //托盘和货物都正确
if (algorithmPojo.getResult() == 1 if (algorithmPojo != null && algorithmPojo.getResult() != null && algorithmPojo.getResult() == 1
&& algorithmPojo.getGoodsNumber().equals(algorithmPojo.getGoodsNumberResult()) && algorithmPojo.getGoodsNumber() != null && algorithmPojo.getGoodsNumber().equals(algorithmPojo.getGoodsNumberResult())
&& algorithmPojo.getGoodsType().equals(algorithmPojo.getGoodsTypeResult())) { && algorithmPojo.getGoodsType() != null && algorithmPojo.getGoodsType().equals(algorithmPojo.getGoodsTypeResult())) {
status = 2; status = 2;
} }
if (stock == null) { if (stock == null) {
@ -889,7 +939,7 @@ public class PlcService {
OutputStream os = null; OutputStream os = null;
InputStream is = null; InputStream is = null;
try { try {
socket.connect(new InetSocketAddress(street.getPlcIp(), street.getPlcPort()), 3000); socket.connect(new InetSocketAddress(street.getPlcIp(), 9040), 3000);
//socket.setSoTimeout(10000); //socket.setSoTimeout(10000);
os = socket.getOutputStream(); os = socket.getOutputStream();
Thread.sleep(100); Thread.sleep(100);

@ -2,6 +2,7 @@ package com.zhehekeji.web.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.util.Assert; import com.zhehekeji.core.util.Assert;
@ -37,7 +38,7 @@ import java.util.Map;
@Service @Service
@Slf4j @Slf4j
public class StreetService { public class StreetService extends ServiceImpl<StreetMapper, Street> {
@Resource @Resource
private StreetMapper streetMapper; private StreetMapper streetMapper;
@ -185,12 +186,12 @@ public class StreetService {
public PageInfo<StreetVO> page(StreetSearch search) { public PageInfo<StreetVO> page(StreetSearch search) {
PageHelper.startPage(search.getPageNum(), search.getPageSize()); PageHelper.startPage(search.getPageNum(), search.getPageSize());
List<StreetVO> streetVOS = streetMapper.list(); List<StreetVO> streetVOS = streetMapper.listVo();
return new PageInfo<>(streetVOS); return new PageInfo<>(streetVOS);
} }
public List<StreetVO> list(){ public List<StreetVO> listVo(){
return streetMapper.list(); return streetMapper.listVo();
} }
public void sensorGunConfig(StreetVO streetVO,Integer streetId){ public void sensorGunConfig(StreetVO streetVO,Integer streetId){

@ -29,7 +29,7 @@ public class AlgorithmService {
String url = "http://"+algorithmPojo.getIp()+":"+algorithmPojo.getPort()+configProperties.getVisualSense().getUrl(); String url = "http://"+algorithmPojo.getIp()+":"+algorithmPojo.getPort()+configProperties.getVisualSense().getUrl();
url = "http://127.0.0.1:8083"+configProperties.getVisualSense().getUrl(); //url = "http://127.0.0.1:8083"+configProperties.getVisualSense().getUrl();
ResponseEntity<String> body = null; ResponseEntity<String> body = null;
try { try {

@ -19,9 +19,8 @@ public class HikControlSocket {
* <${},${0 1},${get\post}> * <${},${0 1},${get\post}>
*/ */
public static void main(String[] args) { public static void main(String[] args) {
int code = openLight("172.16.0.72", 9000,2,0); int code = openLight("127.0.0.2", 9000,2,0);
}
}
public static int openLight(String ip,int port,int index,int bool){ public static int openLight(String ip,int port,int index,int bool){
Socket socket = new Socket(); Socket socket = new Socket();

@ -31,6 +31,7 @@ cameraConfig:
cameraPassword: a1234567 cameraPassword: a1234567
cameraUser: admin cameraUser: admin
cameraPort: 37777 cameraPort: 37777
downloadType: 0 # 0:远程下载 1:本地下载
videoServer: 127.0.0.1:8083 videoServer: 127.0.0.1:8083
#相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 #相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的
delayCaptureTime: 3500 delayCaptureTime: 3500

@ -31,6 +31,7 @@ cameraConfig:
cameraPassword: a1234567 cameraPassword: a1234567
cameraUser: admin cameraUser: admin
cameraPort: 37777 cameraPort: 37777
downloadType: 0 # 0:远程下载 1:本地下载
videoServer: 127.0.0.1:8083 videoServer: 127.0.0.1:8083
#相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 #相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的
delayCaptureTime: 3500 delayCaptureTime: 3500

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhehekeji.web.mapper.StreetMapper"> <mapper namespace="com.zhehekeji.web.mapper.StreetMapper">
<select id="list" parameterType="com.zhehekeji.web.pojo.street.StreetSearch" resultType="com.zhehekeji.web.pojo.street.StreetVO"> <select id="listVo" parameterType="com.zhehekeji.web.pojo.street.StreetSearch" resultType="com.zhehekeji.web.pojo.street.StreetVO">
select t.*,c1.name as camera1Name,c2.name as camera2Name,l.ip as lightSourceIp,l.port as lightSourcePort, select t.*,c1.name as camera1Name,c2.name as camera2Name,l.ip as lightSourceIp,l.port as lightSourcePort,
s1.ip as leftSensorGunIp ,s1.port as leftSensorGunPort, s1.ip as leftSensorGunIp ,s1.port as leftSensorGunPort,
s2.ip as rightSensorGunIp ,s2.port as rightSensorGunPort, s2.ip as rightSensorGunIp ,s2.port as rightSensorGunPort,

Loading…
Cancel
Save