camera_merge
王一鸣 5 years ago
parent 02ace2769a
commit 4e0ef0482a

@ -26,13 +26,18 @@ public class CameraControlController {
@PostMapping("/{id}") @PostMapping("/{id}")
@ApiOperation(value = "球机登录") @ApiOperation(value = "球机登录")
public Result<Long> login(@PathVariable Integer id) { public Result login(@PathVariable Integer id) {
Camera camera = cameraMapper.selectById(id); checkLogin(id);
return Result.success();
}
private NetSDKLib.LLong cameraLogin(Integer cameraId){
Camera camera = cameraMapper.selectById(cameraId);
Assert.notNull(camera,"球机不存在"); Assert.notNull(camera,"球机不存在");
NetSDKLib.LLong lLong = LoginModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword(),id); NetSDKLib.LLong lLong = LoginModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword(),cameraId);
Assert.isTrue(lLong.longValue() > 0,"登陆失败"); Assert.isTrue(lLong.longValue() > 0,"登陆失败");
CameraConnMap.conn(id,lLong); CameraConnMap.conn(cameraId,lLong);
return Result.success(lLong.longValue()); return lLong;
} }
@PostMapping("/up/{id}") @PostMapping("/up/{id}")
@ -281,7 +286,7 @@ public class CameraControlController {
@ApiOperation(value = "立即拍照") @ApiOperation(value = "立即拍照")
public Result pic(@PathVariable Integer id) { public Result pic(@PathVariable Integer id) {
checkLogin(id); checkLogin(id);
System.out.println(PtzControlModule.pic(id,0)); System.out.println(PtzControlModule.pic(id,0,"aaa",0));
return Result.success(); return Result.success();
} }
@ -295,7 +300,8 @@ public class CameraControlController {
private void checkLogin(Integer cameraId){ private void checkLogin(Integer cameraId){
if(CameraConnMap.getConnId(cameraId) == null){ if(CameraConnMap.getConnId(cameraId) == null){
login(cameraId); log.info("相机登录 cameraId:{}",cameraId);
checkLogin(cameraId);
} }
} }
} }

@ -1,15 +1,20 @@
package com.zhehekeji.web.controller; package com.zhehekeji.web.controller;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.common.util.ValidatorUtil;
import com.zhehekeji.core.pojo.Result; import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.entity.CameraIO;
import com.zhehekeji.web.pojo.camera.CameraSearchReq;
import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetSearch;
import com.zhehekeji.web.service.CameraService; import com.zhehekeji.web.service.CameraService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
@Api(value = "camera",tags = "球机管理") @Api(value = "camera",tags = "球机管理")
@RestController @RestController
@ -18,6 +23,8 @@ public class CameraController {
@Resource @Resource
private CameraService cameraService; private CameraService cameraService;
@Resource
private ValidatorUtil validatorUtil;
@PostMapping("/page") @PostMapping("/page")
@ApiOperation(value = "球机列表分页 ") @ApiOperation(value = "球机列表分页 ")
@ -31,6 +38,13 @@ public class CameraController {
return new Result<>(cameraService.add(camera)); return new Result<>(cameraService.add(camera));
} }
@PostMapping("/io/import/{cameraId}")
@ApiOperation(value = "球机IO导入 ")
public Result upload(MultipartFile file,@PathVariable Integer cameraId) throws IOException {
cameraService.importExcel(file,cameraId);
return Result.success();
}
@PutMapping("") @PutMapping("")
@ApiOperation(value = "球机修改") @ApiOperation(value = "球机修改")
public Result edit(@RequestBody Camera camera) { public Result edit(@RequestBody Camera camera) {
@ -45,5 +59,30 @@ public class CameraController {
return Result.success(); return Result.success();
} }
@PostMapping("/io")
@ApiOperation(value = "球机IO新增")
public Result<Integer> addIO(@RequestBody CameraIO cameraIO) {
return Result.success(cameraService.addIO(cameraIO));
}
@PostMapping("/io/page")
@ApiOperation(value = "球机IO列表")
public Result<PageInfo<CameraIO>> IOPage(@RequestBody CameraSearchReq req) {
validatorUtil.validate(req);
return Result.success(cameraService.IOPage(req));
}
@PutMapping("/io")
@ApiOperation(value = "球机IO修改")
public Result editIO(@RequestBody CameraIO cameraIO){
cameraService.editIO(cameraIO);
return Result.success();
}
@DeleteMapping("/io/{id}")
@ApiOperation(value = "球机IO删除")
public Result delIO(@PathVariable Integer id){
cameraService.delIO(id);
return Result.success();
}
} }

@ -9,6 +9,7 @@ import com.zhehekeji.web.pojo.OrderSearch;
import com.zhehekeji.web.service.OrderService; import com.zhehekeji.web.service.OrderService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -32,16 +33,32 @@ public class OrderController {
@PostMapping("/") @PostMapping("/")
public Result<Long> save(@RequestBody OrderSaveReq saveReq){ public Result<Long> save(@RequestBody OrderSaveReq saveReq){
validatorUtil.validate(saveReq); validatorUtil.validate(saveReq);
Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确"); //Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确");
return Result.success(orderService.add(saveReq)); return Result.success(orderService.add(saveReq));
} }
@ApiOperation("工单拍照")
@GetMapping("/camera")
public Result camera(@ApiParam("工单号") @RequestParam String orderNum,@ApiParam("类型 1入库 3出库 2货物图片") @RequestParam Integer type){
//validatorUtil.validate(saveReq);
orderService.pic(type,orderNum);
return Result.success();
}
@ApiOperation("工单录像 结束")
@GetMapping("/video/stop")
public Result video(@ApiParam("工单号") @RequestParam String orderNum){
//validatorUtil.validate(saveReq);
//Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确");
return Result.success();
}
@PostMapping("/list") @PostMapping("/list")
@ApiOperation(value = "查询") @ApiOperation(value = "查询")
//@SessionHandler //@SessionHandler
public Result<List<Order>> findRoleList(@RequestBody OrderSearch orderSearch) { public Result<List<Order>> orders(@RequestBody OrderSearch orderSearch) {
validatorUtil.validate(orderSearch); validatorUtil.validate(orderSearch);
return new Result<>(orderService.orders(orderSearch)); return Result.success(orderService.orders(orderSearch));
} }
@GetMapping("/media") @GetMapping("/media")

@ -0,0 +1,24 @@
package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("camera_io")
public class CameraIO {
@TableId(type = IdType.AUTO)
private Integer id;
private Integer cameraId;
private String name;
private Integer ptzId;
private LocalDateTime updateTime;
}

@ -21,8 +21,10 @@ public class Order {
private String shelveId; private String shelveId;
@TableField("`row`")
private Integer row; private Integer row;
@TableField("`column`")
private Integer column; private Integer column;
// @ApiModelProperty("仓位号") // @ApiModelProperty("仓位号")
@ -35,7 +37,7 @@ public class Order {
private String putPath; private String putPath;
@ApiModelProperty("出库照片") @ApiModelProperty("出库照片")
private String outPutPath; private String outputPath;
@ApiModelProperty("货位照片") @ApiModelProperty("货位照片")
private String goodsPath; private String goodsPath;

@ -1,5 +1,6 @@
package com.zhehekeji.web.entity; package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
@ -10,7 +11,10 @@ import lombok.Data;
@Data @Data
public class OrderLastMedia { public class OrderLastMedia {
@TableId @TableId(type = IdType.AUTO)
private Integer id;
@TableField
private String shelveId; private String shelveId;
@TableField("`row`") @TableField("`row`")
@ -19,17 +23,17 @@ public class OrderLastMedia {
@TableField("`column`") @TableField("`column`")
private Integer column; private Integer column;
private Long lastPutOrderId; private String lastPutOrderNum;
@ApiModelProperty("入库照片") @ApiModelProperty("入库照片")
private String putPath; private String putPath;
private Long lastOutOrderId; private String lastOutOrderNum;
@ApiModelProperty("出库照片") @ApiModelProperty("出库照片")
private String outPutPath; private String outPutPath;
private Long lastGoodsOrderId; private String lastGoodsOrderNum;
@ApiModelProperty("货位照片") @ApiModelProperty("货位照片")
private String goodsPath; private String goodsPath;

@ -0,0 +1,45 @@
package com.zhehekeji.web.lib;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
import javax.swing.*;
@Slf4j
public class CallBack {
/**
* 线
*/
public static class DisConnectCallBack implements NetSDKLib.fDisConnect {
@Override
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
Integer cameraId = CameraConnMap.getCameraIdByLoginId(lLoginID);
log.error("球机:{}掉线",cameraId);
//CameraConnMap.disConn(cameraId);
}
}
/**
* mp4
*/
public static class Mp4ReceiveCB implements NetSDKLib.fTimeDownLoadPosCallBack {
@Override
public void invoke(NetSDKLib.LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
if(dwDownLoadSize == -1) {
StopDownLoadThread stopDownLoadThread = new StopDownLoadThread(lPlayHandle);
stopDownLoadThread.start();
}
}
}
public static class HaveReConnect implements NetSDKLib.fHaveReConnect {
@Override
public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
log.info("球机:{}重连,loginId:{}",pchDVRIP,m_hLoginHandle.longValue());
System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
}
}
}

@ -5,22 +5,39 @@ import java.util.Map;
public class CameraConnMap{ public class CameraConnMap{
/**
* key :cameraId
* value: loginId
*/
public static Map<Integer, NetSDKLib.LLong> cameraMap = new HashMap<>(); public static Map<Integer, NetSDKLib.LLong> cameraMap = new HashMap<>();
/**
* key:loginId
* value: cameraId
*/
public static Map<NetSDKLib.LLong,Integer> loginMap = new HashMap<>();
public static void conn(Integer cameraId,NetSDKLib.LLong handlerId){ public static void conn(Integer cameraId,NetSDKLib.LLong handlerId){
synchronized (cameraId.toString().intern()){ synchronized (cameraId.toString().intern()){
cameraMap.put(cameraId,handlerId); cameraMap.put(cameraId,handlerId);
loginMap.put(handlerId,cameraId);
} }
} }
public static void disConn(Integer cameraId){ public static void disConn(Integer cameraId){
synchronized (cameraId.toString().intern()){ synchronized (cameraId.toString().intern()){
NetSDKLib.LLong lLong = cameraMap.get(cameraId);
cameraMap.remove(cameraId); cameraMap.remove(cameraId);
loginMap.remove(lLong);
} }
} }
public static NetSDKLib.LLong getConnId(Integer cameraId){ public static NetSDKLib.LLong getConnId(Integer cameraId){
return cameraMap.get(cameraId); return cameraMap.get(cameraId);
} }
public static Integer getCameraIdByLoginId(NetSDKLib.LLong lLong){
return loginMap.get(lLong);
}
} }

@ -35,7 +35,7 @@ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{
/** /**
* 线 * 线
*/ */
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 200, private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 10, 200,
TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10000000)); TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10000000));
@Override @Override

@ -1,5 +1,6 @@
package com.zhehekeji.web.lib; package com.zhehekeji.web.lib;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.common.util.PathUtil;
import com.zhehekeji.web.entity.Order; import com.zhehekeji.web.entity.Order;
@ -46,65 +47,65 @@ public class CaptureRunnable implements Runnable {
public void run() { public void run() {
OrderInfo orderInfo = OrderCmdSerial.getOrderInfo(CmdSerial); OrderInfo orderInfo = OrderCmdSerial.getOrderInfo(CmdSerial);
OrderCmdSerial.remove(CmdSerial); OrderCmdSerial.remove(CmdSerial);
if(orderInfo != null){ if (orderInfo != null) {
String path = PathUtil.createFileName(fileType); String path = PathUtil.createFileName(fileType);
String picPath = savePic(pBuf,RevLen,mediaPath+path); String picPath = savePic(pBuf, RevLen, mediaPath + path);
if(picPath == null){ if (picPath == null) {
return; return;
} }
log.debug("save pic orderId:{} path:{}",orderInfo.getOrderId(),picPath); log.debug("save pic orderId:{} path:{}", orderInfo.getOrderId(), picPath);
//todo 根据orderNum找到货架暂时qqq
OrderLastMedia orderLastMedia = lastMediaMapper.selectById("qqq"); String shelveId = "qqq";
if(orderLastMedia == null){ Integer row = 1;
orderLastMedia = initLastOrder(); Integer column = 1;
OrderLastMedia orderLastMedia = lastMediaMapper.getOne(shelveId,row,column);
if (orderLastMedia == null) {
orderLastMedia = initLastOrder(shelveId,row,column);
} }
Order order = new Order(); Order order = new Order();
order.setId(orderInfo.getOrderId()); //order.setId(orderInfo.getOrderId());
if(OrderInfo.OrderPathType.GOODS.getType().equals(orderInfo.getType())){ if (OrderInfo.OrderPathType.GOODS.getType().equals(orderInfo.getType())) {
order.setGoodsPath(path); order.setGoodsPath(path);
if(orderInfo.getOrderId()>orderLastMedia.getLastGoodsOrderId()){ orderLastMedia.setLastGoodsOrderNum(orderInfo.getOrderNum());
orderLastMedia.setGoodsPath(path); orderLastMedia.setGoodsPath(path);
lastMediaMapper.updateById(orderLastMedia); } else if (OrderInfo.OrderPathType.PUT.getType().equals(orderInfo.getType())) {
}
}else if(OrderInfo.OrderPathType.PUT.getType().equals(orderInfo.getType())){
order.setPutPath(path); order.setPutPath(path);
if(orderInfo.getOrderId()>orderLastMedia.getLastPutOrderId()){ orderLastMedia.setLastPutOrderNum(orderInfo.getOrderNum());
orderLastMedia.setPutPath(path); orderLastMedia.setPutPath(path);
lastMediaMapper.updateById(orderLastMedia); } else if (OrderInfo.OrderPathType.OUTPUT.getType().equals(orderInfo.getType())) {
} order.setOutputPath(path);
orderLastMedia.setLastOutOrderNum(orderInfo.getOrderNum());
}else if(OrderInfo.OrderPathType.OUTPUT.getType().equals(orderInfo.getType())){ orderLastMedia.setOutPutPath(path);
order.setOutPutPath(path);
if(orderInfo.getOrderId()>orderLastMedia.getLastOutOrderId()){
orderLastMedia.setOutPutPath(path);
lastMediaMapper.updateById(orderLastMedia);
}
} }
orderMapper.updateById(order); lastMediaMapper.updateById(orderLastMedia);
orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num",orderInfo.getOrderNum()));
return; return;
} }
log.warn("no order"); log.warn("no order");
} }
private OrderLastMedia initLastOrder(){ private OrderLastMedia initLastOrder(String shelveId,Integer row,Integer column) {
OrderLastMedia orderLastMedia = new OrderLastMedia(); OrderLastMedia orderLastMedia = new OrderLastMedia();
orderLastMedia.setShelveId("qqq"); //todo 解析订单号
orderLastMedia.setLastOutOrderId(0L); orderLastMedia.setShelveId(shelveId);
orderLastMedia.setLastPutOrderId(0L); orderLastMedia.setRow(row);
orderLastMedia.setLastGoodsOrderId(0L); orderLastMedia.setColumn(column);
// orderLastMedia.setLastOutOrderId(0L);
// orderLastMedia.setLastPutOrderId(0L);
// orderLastMedia.setLastGoodsOrderId(0L);
lastMediaMapper.insert(orderLastMedia); lastMediaMapper.insert(orderLastMedia);
return orderLastMedia; return orderLastMedia;
} }
private String savePic(Pointer pBuf, int RevLen,String path){ private String savePic(Pointer pBuf, int RevLen, String path) {
BufferedImage bufferedImage = null; BufferedImage bufferedImage = null;
if(pBuf != null && RevLen > 0) { if (pBuf != null && RevLen > 0) {
byte[] buf = pBuf.getByteArray(0, RevLen); byte[] buf = pBuf.getByteArray(0, RevLen);
ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf); ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf);
try { try {
bufferedImage = ImageIO.read(byteArrInput); bufferedImage = ImageIO.read(byteArrInput);
if(bufferedImage == null) { if (bufferedImage == null) {
return null; return null;
} }
File file = PathUtil.getFile(path); File file = PathUtil.getFile(path);
@ -112,8 +113,8 @@ public class CaptureRunnable implements Runnable {
return path; return path;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}finally { } finally {
if(bufferedImage != null){ if (bufferedImage != null) {
bufferedImage.flush(); bufferedImage.flush();
} }
} }

@ -1,22 +0,0 @@
package com.zhehekeji.web.lib;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class DisConnectCallBack implements NetSDKLib.fDisConnect {
private Integer cameraId;
public DisConnectCallBack(Integer id){
cameraId = id;
}
@Override
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
log.info("球机:{}掉线",cameraId);
CameraConnMap.disConn(cameraId);
}
}

@ -1,18 +1,10 @@
package com.zhehekeji.web.lib; package com.zhehekeji.web.lib;
import com.sun.jna.Pointer;
import com.zhehekeji.common.util.SpringContextUtil; import com.zhehekeji.common.util.SpringContextUtil;
import com.zhehekeji.web.lib.NetSDKLib.LLong; import com.zhehekeji.web.lib.NetSDKLib.LLong;
import com.zhehekeji.web.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY; import com.zhehekeji.web.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY;
import com.zhehekeji.web.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY; import com.zhehekeji.web.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY;
import com.zhehekeji.web.lib.common.Res;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.IOException;
/** /**
* *
@ -26,6 +18,10 @@ public class LoginModule {
// 设备信息 // 设备信息
public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
private static CallBack.DisConnectCallBack disConnectCallBack = new CallBack.DisConnectCallBack();
private static CallBack.HaveReConnect haveReConnect = new CallBack.HaveReConnect();
// 登陆句柄 // 登陆句柄
public static LLong m_hLoginHandle = new LLong(0); public static LLong m_hLoginHandle = new LLong(0);
@ -70,7 +66,7 @@ public class LoginModule {
//设置登录超时时间和尝试次数,可选 //设置登录超时时间和尝试次数,可选
int waitTime = 5000; //登录请求响应超时时间设置为5S int waitTime = 5000; //登录请求响应超时时间设置为5S
int tryTimes = 1; //登录时尝试建立链接1次 int tryTimes = 3; //登录时尝试建立链接1次
netsdk.CLIENT_SetConnectTime(waitTime, tryTimes); netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
@ -113,7 +109,7 @@ public class LoginModule {
public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword,Integer id) { public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword,Integer id) {
//IntByReference nError = new IntByReference(0); //IntByReference nError = new IntByReference(0);
//入参 //入参
init(new DisConnectCallBack(id),null); init(disConnectCallBack,haveReConnect);
NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=new NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY(); NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=new NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
pstInParam.nPort=m_nPort; pstInParam.nPort=m_nPort;
pstInParam.szIP=m_strIp.getBytes(); pstInParam.szIP=m_strIp.getBytes();

@ -1,16 +0,0 @@
package com.zhehekeji.web.lib;
import com.sun.jna.Pointer;
public class Mp4ReceiveCB implements NetSDKLib.fTimeDownLoadPosCallBack {
@Override
public void invoke(NetSDKLib.LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
System.out.println("ing.... dwDownLoadSize:"+dwDownLoadSize+" dwTotalSize:"+dwTotalSize+
" lPlayHandle:"+lPlayHandle.longValue()+" index:"+index);
if(dwDownLoadSize == -1) {
System.out.println("下载结束");
LoginModule.netsdk.CLIENT_StopDownload(lPlayHandle);
}
}
}

@ -2,13 +2,8 @@ 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.web.lib.common.ErrorCode;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.UUID; import java.util.UUID;
@ -18,6 +13,8 @@ import java.util.UUID;
*/ */
public class PtzControlModule { public class PtzControlModule {
private static CallBack.Mp4ReceiveCB mp4ReceiveCB = new CallBack.Mp4ReceiveCB();
/** /**
* *
*/ */
@ -214,7 +211,7 @@ public class PtzControlModule {
0, 0, 0, 1); 0, 0, 0, 1);
} }
public static boolean pic(Integer cameraId,int nChannelID) { public static boolean pic(Integer cameraId,int nChannelID,String orderNum,Integer type) {
NetSDKLib.SNAP_PARAMS stuSnapParams = new NetSDKLib.SNAP_PARAMS(); NetSDKLib.SNAP_PARAMS stuSnapParams = new NetSDKLib.SNAP_PARAMS();
stuSnapParams.Channel = nChannelID; // channel stuSnapParams.Channel = nChannelID; // channel
stuSnapParams.mode = 0; // capture picture mode stuSnapParams.mode = 0; // capture picture mode
@ -222,10 +219,10 @@ public class PtzControlModule {
stuSnapParams.InterSnap = 0; // timer capture picture time interval stuSnapParams.InterSnap = 0; // timer capture picture time interval
stuSnapParams.CmdSerial = OrderCmdSerial.nextSerial(); stuSnapParams.CmdSerial = OrderCmdSerial.nextSerial();
Long orderId = 1L; Long orderId = 1L;
OrderInfo orderInfo = new OrderInfo(orderId,"qwe",1); OrderInfo orderInfo = new OrderInfo(orderId,orderNum,type);
OrderCmdSerial.put(stuSnapParams.CmdSerial,orderInfo); OrderCmdSerial.put(stuSnapParams.CmdSerial,orderInfo);
IntByReference reserved = new IntByReference(0); IntByReference reserved = new IntByReference(0);
return LoginModule.netsdk.CLIENT_SnapPictureEx(CameraConnMap.getConnId(cameraId), stuSnapParams, reserved); return LoginModule.netsdk.CLIENT_SnapPictureEx(CameraConnMap.getConnId(cameraId), stuSnapParams, reserved);
} }
@ -245,7 +242,7 @@ public class PtzControlModule {
download_by_data_type.szSavedFileName="d:/qq/"+u+".mp4"; download_by_data_type.szSavedFileName="d:/qq/"+u+".mp4";
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 = new Mp4ReceiveCB(); download_by_data_type.cbDownLoadPos = mp4ReceiveCB;
NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE net_out_download_by_data_type = new NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE(); NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE net_out_download_by_data_type = new NetSDKLib.NET_OUT_DOWNLOAD_BY_DATA_TYPE();
//NetSDKLib.LLong l = LoginModule.netsdk.CLIENT_DownloadByTimeEx2(CameraConnMap.getConnId(cameraId),channelId,0,startTime,endTime,"./q2q.mp4",null,null,null,null,3,null); //NetSDKLib.LLong l = LoginModule.netsdk.CLIENT_DownloadByTimeEx2(CameraConnMap.getConnId(cameraId),channelId,0,startTime,endTime,"./q2q.mp4",null,null,null,null,3,null);
@ -254,11 +251,14 @@ 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){
System.out.println(ToolKits.getErrorCodePrint()); System.out.println(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()));
//System.out.println(ToolKits.getErrorCodePrint());
} }
} }
} }

@ -0,0 +1,16 @@
package com.zhehekeji.web.lib;
public class StopDownLoadThread extends Thread {
private NetSDKLib.LLong lPlayHandle;
public StopDownLoadThread(NetSDKLib.LLong lPlayHandle){
this.lPlayHandle = lPlayHandle;
}
@Override
public void run() {
System.out.println("下载结束"+lPlayHandle.longValue());
LoginModule.netsdk.CLIENT_StopDownload(lPlayHandle);
}
}

@ -0,0 +1,11 @@
package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.CameraIO;
import java.util.List;
public interface CameraIOMapper extends BaseMapper<CameraIO> {
void batchInsert(List<CameraIO> list);
}

@ -2,6 +2,11 @@ package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.OrderLastMedia; import com.zhehekeji.web.entity.OrderLastMedia;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface OrderLastMediaMapper extends BaseMapper<OrderLastMedia> { public interface OrderLastMediaMapper extends BaseMapper<OrderLastMedia> {
@Select("select * from order_last_media where shelve_id = #{shelveId} and `row` = #{row} and `column` = #{column} limit 1")
OrderLastMedia getOne(@Param("shelveId")String shelveId,@Param("row")Integer row,@Param("column")Integer column);
} }

@ -9,15 +9,18 @@ import javax.validation.constraints.NotNull;
@Data @Data
public class OrderSaveReq { public class OrderSaveReq {
@ApiModelProperty("订单号") @ApiModelProperty("订单号 序号+巷道+垛机ID+货位号+动作")
@NotEmpty(message = "orderNum订单号不能为空") @NotEmpty(message = "orderNum订单号不能为空")
private String orderNum; private String orderNum;
@ApiModelProperty("仓位号") // @ApiModelProperty("仓位号")
@NotEmpty(message = "positionNum仓位号不能为空") // @NotEmpty(message = "positionNum仓位号不能为空")
private String positionNum; // private String positionNum;
@ApiModelProperty("约定token") // @ApiModelProperty("约定token")
@NotEmpty(message = "token不能为空") // @NotEmpty(message = "token不能为空")
private String token; // private String token;
@NotEmpty(message = "plcId不能为空")
private String plcId;
} }

@ -9,4 +9,8 @@ public class OrderSearch {
@NotEmpty(message = "订单号不能为空") @NotEmpty(message = "订单号不能为空")
private String orderNum; private String orderNum;
private Long startTimestamp;
private Long endTimestamp;
} }

@ -0,0 +1,18 @@
package com.zhehekeji.web.pojo.camera;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class CameraSearchReq {
@NotNull(message = "page不能为空")
private Integer page;
@NotNull(message = "size不能为空")
private Integer size;
@NotNull(message = "cameraId不能为空")
private Integer cameraId;
}

@ -0,0 +1,9 @@
package com.zhehekeji.web.pojo.camera;
import lombok.Data;
@Data
public class IOImport {
private String name;
}

@ -1,18 +1,27 @@
package com.zhehekeji.web.service; package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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;
import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.entity.CameraIO;
import com.zhehekeji.web.mapper.CameraIOMapper;
import com.zhehekeji.web.mapper.CameraMapper; import com.zhehekeji.web.mapper.CameraMapper;
import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.pojo.camera.CameraSearchReq;
import com.zhehekeji.web.pojo.camera.IOImport;
import com.zhehekeji.web.pojo.stock.StockExcel;
import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetSearch;
import lombok.extern.slf4j.Slf4j; 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.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -25,6 +34,8 @@ public class CameraService {
private CameraMapper cameraMapper; private CameraMapper cameraMapper;
@Resource @Resource
private StreetMapper streetMapper; private StreetMapper streetMapper;
@Resource
private CameraIOMapper ioMapper;
@Value("${cameraPassword}") @Value("${cameraPassword}")
private String cameraPassword; private String cameraPassword;
@ -68,5 +79,30 @@ public class CameraService {
return new PageInfo<>(cameras); return new PageInfo<>(cameras);
} }
public void importExcel(MultipartFile file,Integer cameraId) throws IOException {
EasyExcel.read(file.getInputStream(), IOImport.class, new IOImportListener(ioMapper,cameraId)).sheet().doRead();
}
public Integer addIO(CameraIO cameraIO){
cameraIO.setUpdateTime(LocalDateTime.now());
ioMapper.insert(cameraIO);
return cameraIO.getId();
}
public PageInfo<CameraIO> IOPage(CameraSearchReq req){
PageHelper.startPage(req.getPage(),req.getSize());
List<CameraIO> list = ioMapper.selectList(new QueryWrapper<CameraIO>().eq("camera_id",req.getCameraId()));
return new PageInfo<>(list);
}
public void editIO(CameraIO cameraIO){
cameraIO.setUpdateTime(LocalDateTime.now());
ioMapper.updateById(cameraIO);
}
public void delIO(Integer id){
ioMapper.deleteById(id);
}
} }

@ -0,0 +1,65 @@
package com.zhehekeji.web.service;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhehekeji.web.entity.CameraIO;
import com.zhehekeji.web.mapper.CameraIOMapper;
import com.zhehekeji.web.pojo.camera.IOImport;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
public class IOImportListener extends AnalysisEventListener<IOImport> {
private static Integer LENGTH = 5000;
private CameraIOMapper cameraIOMapper;
private Integer cameraId;
private List<String> names = new ArrayList<>();
public IOImportListener(CameraIOMapper cameraIOMapper,Integer cameraId){
this.cameraIOMapper = cameraIOMapper;
this.cameraId = cameraId;
List<CameraIO> cameraIOS = cameraIOMapper.selectList(new QueryWrapper<CameraIO>().select("name").eq("camera_id",cameraId));
if(cameraIOS.size() >0){
this.names = cameraIOS.stream().map(CameraIO::getName).collect(Collectors.toList());
}
}
private List<CameraIO> stocks = new ArrayList<>(LENGTH);
@Override
public void invoke(IOImport ioImport, AnalysisContext analysisContext) {
if(!names.contains(ioImport.getName())){
CameraIO cameraIO = new CameraIO();
cameraIO.setName(ioImport.getName());
cameraIO.setCameraId(cameraId);
cameraIO.setUpdateTime(LocalDateTime.now());
stocks.add(cameraIO);
if(stocks.size() > LENGTH){
save(stocks);
stocks.clear();
}
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
save(stocks);
log.info("导入球机IO");
}
private void save(List<CameraIO> stocks) {
if(stocks.size() > 0){
cameraIOMapper.batchInsert(stocks);
}
}
}

@ -0,0 +1,39 @@
package com.zhehekeji.web.service;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.lib.CameraConnMap;
import com.zhehekeji.web.lib.LoginModule;
import com.zhehekeji.web.lib.NetSDKLib;
import com.zhehekeji.web.mapper.CameraMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
@Component
@Slf4j
public class InitService implements ApplicationRunner {
@Resource
private CameraMapper cameraMapper;
@Override
public void run(ApplicationArguments args) throws Exception {
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0));
cameras.forEach(camera -> {
NetSDKLib.LLong lLong = LoginModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword(),camera.getId());
if(lLong.longValue() <= 0){
log.error("初始相机 登录失败cameraId{}",camera.getId());
}else {
CameraConnMap.conn(camera.getId(),lLong);
log.debug("初始相机登录成功 cameraId:{}",camera.getId());
}
});
}
}

@ -3,7 +3,12 @@ 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.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Order; import com.zhehekeji.web.entity.Order;
import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.entity.StreetShelve;
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.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 org.springframework.beans.BeanUtils;
@ -11,6 +16,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
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.RequestParam;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -21,6 +27,10 @@ public class OrderService {
@Resource @Resource
private OrderMapper orderMapper; private OrderMapper orderMapper;
@Resource
private StreetShelveMapper streetShelveMapper;
@Resource
private StreetMapper streetMapper;
@Value("${picPort}") @Value("${picPort}")
private String picPort; private String picPort;
@ -31,6 +41,20 @@ public class OrderService {
return orders; return orders;
} }
public void pic(Integer type,String orderNum){
//todo 根据订单号直接找到货架号
String shelveId = "aaa";
List<StreetShelve> streetShelves = streetShelveMapper.selectList(new QueryWrapper<StreetShelve>().eq("shelve_id",shelveId));
if(streetShelves.size() > 0){
Street street = streetMapper.selectById(streetShelves.get(0).getStreetId());
if(street.getCamera1Id() != null){
PtzControlModule.pic(street.getCamera1Id(),0,orderNum,type);
}else if(street.getCamera2Id() != null){
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();
@ -38,6 +62,7 @@ public class OrderService {
order.setColumn(1); order.setColumn(1);
order.setShelveId("aaa"); order.setShelveId("aaa");
order.setRow(1); order.setRow(1);
order.setOrderNum(orderNum);
order.setCreateTime(LocalDateTime.now()); order.setCreateTime(LocalDateTime.now());
orderMapper.insert(order); orderMapper.insert(order);
return order.getId(); return order.getId();

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zhehekeji.web.mapper.CameraIOMapper">
<insert id="batchInsert" parameterType="java.util.List">
insert into camera_io(
name,camera_id
) values
<foreach collection="list" item="item" separator=",">
(#{item.name},#{item.cameraId})
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save