视频下载

camera_merge
王一鸣 5 years ago
parent 840fb4a2f3
commit c0e33bbd06

@ -17,6 +17,17 @@ public class PathUtil {
return time + "/" + UUID.randomUUID() + "."+fileType; return time + "/" + UUID.randomUUID() + "."+fileType;
} }
/**
*
* @param url
*/
public static void checkDirc(String url){
File file = new File(url);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
}
public static File getFile(String url){ public static File getFile(String url){
File file = new File(url); File file = new File(url);
//如果文件不存在,则新建一个 //如果文件不存在,则新建一个

@ -290,13 +290,13 @@ public class CameraControlController {
return Result.success(); return Result.success();
} }
@PostMapping("/mp4/{id}") // @PostMapping("/mp4/{id}")
@ApiOperation(value = "录像") // @ApiOperation(value = "录像")
public Result MP4(@PathVariable Integer id) { // public Result MP4(@PathVariable Integer id) {
checkLogin(id); // checkLogin(id);
PtzControlModule.downloadMp4(id,0); // PtzControlModule.downloadMp4(id);
return Result.success(); // return Result.success();
} // }
private void checkLogin(Integer cameraId){ private void checkLogin(Integer cameraId){
if(CameraConnMap.getConnId(cameraId) == null){ if(CameraConnMap.getConnId(cameraId) == null){

@ -40,14 +40,27 @@ public class OrderController {
@ApiOperation("工单拍照") @ApiOperation("工单拍照")
@GetMapping("/camera") @GetMapping("/camera")
public Result camera(@ApiParam("工单号") @RequestParam String orderNum,@ApiParam("类型 1入库 3出库 2货物图片") @RequestParam Integer type){ public Result camera(@ApiParam("工单号") @RequestParam String orderNum,@ApiParam("类型 1入库 3出库 2货物图片") @RequestParam Integer type){
//validatorUtil.validate(saveReq);
orderService.pic(type,orderNum); orderService.pic(type,orderNum);
return Result.success(); return Result.success();
} }
@ApiOperation("工单录像 结束") @ApiOperation("工单开始信号")
@GetMapping("/video/stop") @GetMapping("/start")
public Result video(@ApiParam("工单号") @RequestParam String orderNum){ public Result orderStart(@ApiParam("工单号") @RequestParam String orderNum){
orderService.orderStart(orderNum);
return Result.success();
}
@ApiOperation("工单结束信号")
@GetMapping("/stop")
public Result orderStop(@ApiParam("工单号") @RequestParam String orderNum){
orderService.orderStop(orderNum,null);
return Result.success();
}
@ApiOperation("工单被告警打断")
@GetMapping("/error")
public Result orderError(@ApiParam("工单号") @RequestParam String orderNum){
//validatorUtil.validate(saveReq); //validatorUtil.validate(saveReq);
//Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确"); //Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确");
return Result.success(); return Result.success();

@ -19,13 +19,16 @@ public class Order {
@ApiModelProperty("订单号") @ApiModelProperty("订单号")
private String orderNum; private String orderNum;
private String shelveId; @ApiModelProperty("0:正常 1告警")
private Integer status;
@TableField("`row`") // private String shelveId;
private Integer row; //
// @TableField("`row`")
@TableField("`column`") // private Integer row;
private Integer column; //
// @TableField("`column`")
// private Integer column;
// @ApiModelProperty("仓位号") // @ApiModelProperty("仓位号")
// private String positionNum; // private String positionNum;
@ -47,5 +50,9 @@ public class Order {
@ApiModelProperty("货位照片") @ApiModelProperty("货位照片")
private String goodsPath; private String goodsPath;
private LocalDateTime startTime;
private LocalDateTime endTime;
private LocalDateTime createTime; private LocalDateTime createTime;
} }

@ -1,6 +1,8 @@
package com.zhehekeji.web.lib; package com.zhehekeji.web.lib;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.zhehekeji.web.entity.Order;
import com.zhehekeji.web.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@ -27,6 +29,7 @@ public class CallBack {
@Override @Override
public void invoke(NetSDKLib.LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) { public void invoke(NetSDKLib.LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
if(dwDownLoadSize == -1) { if(dwDownLoadSize == -1) {
OrderRealtime.overDownload(lPlayHandle);
StopDownLoadThread stopDownLoadThread = new StopDownLoadThread(lPlayHandle); StopDownLoadThread stopDownLoadThread = new StopDownLoadThread(lPlayHandle);
stopDownLoadThread.start(); stopDownLoadThread.start();
} }

@ -1,6 +1,5 @@
package com.zhehekeji.web.lib; package com.zhehekeji.web.lib;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -16,6 +15,12 @@ public class OrderRealtime {
*/ */
private static Map<Integer,String> orderMap = new ConcurrentHashMap<>(); private static Map<Integer,String> orderMap = new ConcurrentHashMap<>();
/**
*
* key:
* value:
*/
private static Map<NetSDKLib.LLong,String> playOrderMap = new ConcurrentHashMap<>();
public static void startOrder(Integer streetId,String orderNum){ public static void startOrder(Integer streetId,String orderNum){
synchronized (streetId.toString().intern()){ synchronized (streetId.toString().intern()){
@ -23,6 +28,20 @@ public class OrderRealtime {
} }
} }
/**
*
* @param streetId
* @return
*/
public static String getOrderByStreetId(Integer streetId){
return orderMap.get(streetId);
}
/**
*
* @param streetId
* @return
*/
public static String stopOrder(Integer streetId){ public static String stopOrder(Integer streetId){
synchronized (streetId.toString().intern()){ synchronized (streetId.toString().intern()){
String orderNum = orderMap.get(streetId); String orderNum = orderMap.get(streetId);
@ -30,4 +49,19 @@ public class OrderRealtime {
return orderNum; return orderNum;
} }
} }
public static void startDownload(NetSDKLib.LLong play,String orderNum){
playOrderMap.put(play,orderNum);
}
/**
*
* @param play
* @return
*/
public static String overDownload(NetSDKLib.LLong play){
String orderNum = playOrderMap.get(play);
playOrderMap.remove(play);
return orderNum;
}
} }

@ -2,8 +2,11 @@ package com.zhehekeji.web.lib;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.IntByReference;
import com.zhehekeji.common.util.PathUtil;
import com.zhehekeji.common.util.SpringContextUtil;
import com.zhehekeji.core.util.Assert; import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.lib.common.ErrorCode; import com.zhehekeji.web.lib.common.ErrorCode;
import com.zhehekeji.web.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -229,20 +232,18 @@ public class PtzControlModule {
} }
public static void downloadMp4(Integer cameraId,int channelId){ public static void downloadMp4(Integer cameraId,String path,String orderNum,LocalDateTime start,LocalDateTime end){
PathUtil.checkDirc(path);
NetSDKLib.NET_TIME startTime = new NetSDKLib.NET_TIME(); NetSDKLib.NET_TIME startTime = new NetSDKLib.NET_TIME();
LocalDateTime now = LocalDateTime.now();
LocalDateTime start = now.minusMinutes(80);
startTime.setTime(start.getYear(),start.getMonthValue(),start.getDayOfMonth(),start.getHour(),start.getMinute(),start.getSecond()); startTime.setTime(start.getYear(),start.getMonthValue(),start.getDayOfMonth(),start.getHour(),start.getMinute(),start.getSecond());
NetSDKLib.NET_TIME endTime = new NetSDKLib.NET_TIME(); NetSDKLib.NET_TIME endTime = new NetSDKLib.NET_TIME();
LocalDateTime end = now.minusMinutes(75);
endTime.setTime(end.getYear(),end.getMonthValue(),end.getDayOfMonth(),end.getHour(),end.getMinute(),end.getSecond()); endTime.setTime(end.getYear(),end.getMonthValue(),end.getDayOfMonth(),end.getHour(),end.getMinute(),end.getSecond());
NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE download_by_data_type = new NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE(); NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE download_by_data_type = new NetSDKLib.NET_IN_DOWNLOAD_BY_DATA_TYPE();
download_by_data_type.nChannelID = 0; download_by_data_type.nChannelID = 0;
download_by_data_type.stStartTime = startTime; download_by_data_type.stStartTime = startTime;
download_by_data_type.stStopTime = endTime; download_by_data_type.stStopTime = endTime;
String u = UUID.randomUUID().toString(); System.out.println("path:"+path);
download_by_data_type.szSavedFileName="d:/qq/"+u+".mp4"; download_by_data_type.szSavedFileName=path;
download_by_data_type.emDataType = 3; download_by_data_type.emDataType = 3;
download_by_data_type.emRecordType = 0; download_by_data_type.emRecordType = 0;
download_by_data_type.cbDownLoadPos = mp4ReceiveCB; download_by_data_type.cbDownLoadPos = mp4ReceiveCB;
@ -254,6 +255,7 @@ public class PtzControlModule {
NetSDKLib.LLong l = LoginModule.netsdk.CLIENT_DownloadByDataType(CameraConnMap.getConnId(cameraId),download_by_data_type,net_out_download_by_data_type,0); NetSDKLib.LLong l = LoginModule.netsdk.CLIENT_DownloadByDataType(CameraConnMap.getConnId(cameraId),download_by_data_type,net_out_download_by_data_type,0);
System.out.println("下载句柄: "+l.longValue()); System.out.println("下载句柄: "+l.longValue());
if(l.longValue() == 0){ if(l.longValue() == 0){
OrderRealtime.startDownload(l,orderNum);
System.out.println(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); System.out.println(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()));
//System.out.println(ToolKits.getErrorCodePrint()); //System.out.println(ToolKits.getErrorCodePrint());
} }

@ -2,6 +2,10 @@ package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.Order; import com.zhehekeji.web.entity.Order;
import org.apache.ibatis.annotations.Select;
public interface OrderMapper extends BaseMapper<Order> { public interface OrderMapper extends BaseMapper<Order> {
@Select("select * from `order` where order_num = #{orderNum} limit 1")
Order getOneByOrderNum(String orderNum);
} }

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

@ -1,28 +1,28 @@
package com.zhehekeji.web.service; package com.zhehekeji.web.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhehekeji.core.util.Assert; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zhehekeji.common.util.PathUtil;
import com.zhehekeji.web.entity.Order; import com.zhehekeji.web.entity.Order;
import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.entity.StreetShelve; import com.zhehekeji.web.entity.StreetShelve;
import com.zhehekeji.web.lib.OrderRealtime;
import com.zhehekeji.web.lib.PtzControlModule; import com.zhehekeji.web.lib.PtzControlModule;
import com.zhehekeji.web.mapper.OrderMapper; import com.zhehekeji.web.mapper.OrderMapper;
import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.mapper.StreetShelveMapper; import com.zhehekeji.web.mapper.StreetShelveMapper;
import com.zhehekeji.web.pojo.OrderSaveReq; import com.zhehekeji.web.pojo.OrderSaveReq;
import com.zhehekeji.web.pojo.OrderSearch; import com.zhehekeji.web.pojo.OrderSearch;
import org.springframework.beans.BeanUtils; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@Service @Service
@Slf4j
public class OrderService { public class OrderService {
@Resource @Resource
@ -35,37 +35,108 @@ public class OrderService {
@Value("${picPort}") @Value("${picPort}")
private String picPort; private String picPort;
public List<Order> orders(OrderSearch orderSearch){ @Value("${mp4Path}")
QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>().eq("order_num",orderSearch.getOrderNum()); private String mp4Path;
public List<Order> orders(OrderSearch orderSearch) {
QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>().eq("order_num", orderSearch.getOrderNum());
List<Order> orders = orderMapper.selectList(queryWrapper); List<Order> orders = orderMapper.selectList(queryWrapper);
return orders; return orders;
} }
public void pic(Integer type,String orderNum){ public void pic(Integer type, String orderNum) {
//todo 根据订单号直接找到货架号 //todo 根据订单号直接找到货架号
String shelveId = "aaa"; String shelveId = "aaa";
List<StreetShelve> streetShelves = streetShelveMapper.selectList(new QueryWrapper<StreetShelve>().eq("shelve_id",shelveId)); List<StreetShelve> streetShelves = streetShelveMapper.selectList(new QueryWrapper<StreetShelve>().eq("shelve_id", shelveId));
if(streetShelves.size() > 0){ if (streetShelves.size() > 0) {
Street street = streetMapper.selectById(streetShelves.get(0).getStreetId()); Street street = streetMapper.selectById(streetShelves.get(0).getStreetId());
if(street.getCamera1Id() != null){ if (street.getCamera1Id() != null) {
PtzControlModule.pic(street.getCamera1Id(),0,orderNum,type); PtzControlModule.pic(street.getCamera1Id(), 0, orderNum, type);
}else if(street.getCamera2Id() != null){ } else if (street.getCamera2Id() != null) {
PtzControlModule.pic(street.getCamera2Id(),0,orderNum,type); PtzControlModule.pic(street.getCamera2Id(), 0, orderNum, type);
} }
} }
} }
public Long add(OrderSaveReq saveReq){ public Long add(OrderSaveReq saveReq) {
Order order = new Order(); Order order = new Order();
String orderNum = saveReq.getOrderNum(); String orderNum = saveReq.getOrderNum();
//todo 转换row shelveId column order.setStatus(0);
order.setColumn(1);
order.setShelveId("aaa");
order.setRow(1);
order.setOrderNum(orderNum); order.setOrderNum(orderNum);
order.setCreateTime(LocalDateTime.now()); order.setCreateTime(LocalDateTime.now());
orderMapper.insert(order); orderMapper.insert(order);
return order.getId(); return order.getId();
} }
public void orderStart(String orderNum) {
Order order = new Order();
order.setOrderNum(orderNum);
order.setStartTime(LocalDateTime.now());
//todo 根据订单号找到plcId,找到巷道
String plcId = "123";
Street street = streetMapper.getStreetByPlcId(plcId);
if(street == null){
log.error("订单开始信号巷道不存在orderNum:{},plcId:{}", orderNum,plcId);
return;
}
OrderRealtime.startOrder(street.getId(), orderNum);
orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum));
}
/**
* ,
* @param orderNum
* @param type 1
*/
public void orderStop(String orderNum,Integer type) {
Order order = orderMapper.getOneByOrderNum(orderNum);
if (order == null) {
log.error("订单结束信号订单不存在orderNum:{}", orderNum);
return;
}
if (order.getStartTime() == null) {
log.error("订单结束信号订单未开始orderNum:{}", orderNum);
return;
}
if(type != null && type == 1){
order.setStatus(type);
}
order.setOrderNum(orderNum);
order.setEndTime(LocalDateTime.now());
//todo 根据订单号找到plcId,找到巷道
String plcId = "123";
Street street = streetMapper.getStreetByPlcId(plcId);
if(street == null){
log.error("订单结束信号巷道不存在orderNum:{},plcId:{}", orderNum,plcId);
return;
}
if (street.getCamera1Id() != null) {
String path = PathUtil.createFileName("mp4");
PtzControlModule.downloadMp4(street.getCamera1Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime());
order.setVideoPath1(path);
}
if (street.getCamera2Id() != null) {
String path = PathUtil.createFileName("mp4");
PtzControlModule.downloadMp4(street.getCamera2Id(), mp4Path + path, orderNum, order.getStartTime(), order.getEndTime());
order.setVideoPath2(path);
}
orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum));
OrderRealtime.stopOrder(street.getId());
}
/**
*
* @param plcId
*/
public void error(String plcId){
Street street = streetMapper.getStreetByPlcId(plcId);
if(street == null){
return;
}
String orderNum = OrderRealtime.stopOrder(street.getId());
//停止订单
orderStop(orderNum,1);
}
} }

@ -37,3 +37,4 @@ cameraPassword: admin123
cameraUser: admin cameraUser: admin
cameraPort: 37777 cameraPort: 37777
mediaPath: d:\\media\ mediaPath: d:\\media\
mp4Path: d:\\mp4\

@ -37,3 +37,4 @@ cameraPassword: hzleaper123
cameraUser: admin cameraUser: admin
cameraPort: 37777 cameraPort: 37777
mediaPath: d:\\media\ mediaPath: d:\\media\
mp4Path: d:\\media_mp4\

Loading…
Cancel
Save