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

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

@ -1,15 +1,20 @@
package com.zhehekeji.web.controller;
import com.github.pagehelper.PageInfo;
import com.zhehekeji.common.util.ValidatorUtil;
import com.zhehekeji.core.pojo.Result;
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.service.CameraService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
@Api(value = "camera",tags = "球机管理")
@RestController
@ -18,6 +23,8 @@ public class CameraController {
@Resource
private CameraService cameraService;
@Resource
private ValidatorUtil validatorUtil;
@PostMapping("/page")
@ApiOperation(value = "球机列表分页 ")
@ -31,6 +38,13 @@ public class CameraController {
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("")
@ApiOperation(value = "球机修改")
public Result edit(@RequestBody Camera camera) {
@ -45,5 +59,30 @@ public class CameraController {
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
@ -32,16 +33,32 @@ public class OrderController {
@PostMapping("/")
public Result<Long> save(@RequestBody OrderSaveReq saveReq){
validatorUtil.validate(saveReq);
Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确");
//Assert.isTrue(postToken.equals(saveReq.getToken()),"token不正确");
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")
@ApiOperation(value = "查询")
//@SessionHandler
public Result<List<Order>> findRoleList(@RequestBody OrderSearch orderSearch) {
public Result<List<Order>> orders(@RequestBody OrderSearch orderSearch) {
validatorUtil.validate(orderSearch);
return new Result<>(orderService.orders(orderSearch));
return Result.success(orderService.orders(orderSearch));
}
@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;
@TableField("`row`")
private Integer row;
@TableField("`column`")
private Integer column;
// @ApiModelProperty("仓位号")
@ -35,7 +37,7 @@ public class Order {
private String putPath;
@ApiModelProperty("出库照片")
private String outPutPath;
private String outputPath;
@ApiModelProperty("货位照片")
private String goodsPath;

@ -1,5 +1,6 @@
package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -10,7 +11,10 @@ import lombok.Data;
@Data
public class OrderLastMedia {
@TableId
@TableId(type = IdType.AUTO)
private Integer id;
@TableField
private String shelveId;
@TableField("`row`")
@ -19,17 +23,17 @@ public class OrderLastMedia {
@TableField("`column`")
private Integer column;
private Long lastPutOrderId;
private String lastPutOrderNum;
@ApiModelProperty("入库照片")
private String putPath;
private Long lastOutOrderId;
private String lastOutOrderNum;
@ApiModelProperty("出库照片")
private String outPutPath;
private Long lastGoodsOrderId;
private String lastGoodsOrderNum;
@ApiModelProperty("货位照片")
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{
/**
* key :cameraId
* value: loginId
*/
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){
synchronized (cameraId.toString().intern()){
cameraMap.put(cameraId,handlerId);
loginMap.put(handlerId,cameraId);
}
}
public static void disConn(Integer cameraId){
synchronized (cameraId.toString().intern()){
NetSDKLib.LLong lLong = cameraMap.get(cameraId);
cameraMap.remove(cameraId);
loginMap.remove(lLong);
}
}
public static NetSDKLib.LLong getConnId(Integer 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));
@Override

@ -1,5 +1,6 @@
package com.zhehekeji.web.lib;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.sun.jna.Pointer;
import com.zhehekeji.common.util.PathUtil;
import com.zhehekeji.web.entity.Order;
@ -46,65 +47,65 @@ public class CaptureRunnable implements Runnable {
public void run() {
OrderInfo orderInfo = OrderCmdSerial.getOrderInfo(CmdSerial);
OrderCmdSerial.remove(CmdSerial);
if(orderInfo != null){
if (orderInfo != null) {
String path = PathUtil.createFileName(fileType);
String picPath = savePic(pBuf,RevLen,mediaPath+path);
if(picPath == null){
String picPath = savePic(pBuf, RevLen, mediaPath + path);
if (picPath == null) {
return;
}
log.debug("save pic orderId:{} path:{}",orderInfo.getOrderId(),picPath);
OrderLastMedia orderLastMedia = lastMediaMapper.selectById("qqq");
if(orderLastMedia == null){
orderLastMedia = initLastOrder();
log.debug("save pic orderId:{} path:{}", orderInfo.getOrderId(), picPath);
//todo 根据orderNum找到货架暂时qqq
String shelveId = "qqq";
Integer row = 1;
Integer column = 1;
OrderLastMedia orderLastMedia = lastMediaMapper.getOne(shelveId,row,column);
if (orderLastMedia == null) {
orderLastMedia = initLastOrder(shelveId,row,column);
}
Order order = new Order();
order.setId(orderInfo.getOrderId());
if(OrderInfo.OrderPathType.GOODS.getType().equals(orderInfo.getType())){
//order.setId(orderInfo.getOrderId());
if (OrderInfo.OrderPathType.GOODS.getType().equals(orderInfo.getType())) {
order.setGoodsPath(path);
if(orderInfo.getOrderId()>orderLastMedia.getLastGoodsOrderId()){
orderLastMedia.setGoodsPath(path);
lastMediaMapper.updateById(orderLastMedia);
}
}else if(OrderInfo.OrderPathType.PUT.getType().equals(orderInfo.getType())){
orderLastMedia.setLastGoodsOrderNum(orderInfo.getOrderNum());
orderLastMedia.setGoodsPath(path);
} else if (OrderInfo.OrderPathType.PUT.getType().equals(orderInfo.getType())) {
order.setPutPath(path);
if(orderInfo.getOrderId()>orderLastMedia.getLastPutOrderId()){
orderLastMedia.setPutPath(path);
lastMediaMapper.updateById(orderLastMedia);
}
}else if(OrderInfo.OrderPathType.OUTPUT.getType().equals(orderInfo.getType())){
order.setOutPutPath(path);
if(orderInfo.getOrderId()>orderLastMedia.getLastOutOrderId()){
orderLastMedia.setOutPutPath(path);
lastMediaMapper.updateById(orderLastMedia);
}
orderLastMedia.setLastPutOrderNum(orderInfo.getOrderNum());
orderLastMedia.setPutPath(path);
} else if (OrderInfo.OrderPathType.OUTPUT.getType().equals(orderInfo.getType())) {
order.setOutputPath(path);
orderLastMedia.setLastOutOrderNum(orderInfo.getOrderNum());
orderLastMedia.setOutPutPath(path);
}
orderMapper.updateById(order);
lastMediaMapper.updateById(orderLastMedia);
orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num",orderInfo.getOrderNum()));
return;
}
log.warn("no order");
}
private OrderLastMedia initLastOrder(){
private OrderLastMedia initLastOrder(String shelveId,Integer row,Integer column) {
OrderLastMedia orderLastMedia = new OrderLastMedia();
orderLastMedia.setShelveId("qqq");
orderLastMedia.setLastOutOrderId(0L);
orderLastMedia.setLastPutOrderId(0L);
orderLastMedia.setLastGoodsOrderId(0L);
//todo 解析订单号
orderLastMedia.setShelveId(shelveId);
orderLastMedia.setRow(row);
orderLastMedia.setColumn(column);
// orderLastMedia.setLastOutOrderId(0L);
// orderLastMedia.setLastPutOrderId(0L);
// orderLastMedia.setLastGoodsOrderId(0L);
lastMediaMapper.insert(orderLastMedia);
return orderLastMedia;
}
private String savePic(Pointer pBuf, int RevLen,String path){
private String savePic(Pointer pBuf, int RevLen, String path) {
BufferedImage bufferedImage = null;
if(pBuf != null && RevLen > 0) {
if (pBuf != null && RevLen > 0) {
byte[] buf = pBuf.getByteArray(0, RevLen);
ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf);
try {
bufferedImage = ImageIO.read(byteArrInput);
if(bufferedImage == null) {
if (bufferedImage == null) {
return null;
}
File file = PathUtil.getFile(path);
@ -112,8 +113,8 @@ public class CaptureRunnable implements Runnable {
return path;
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bufferedImage != null){
} finally {
if (bufferedImage != null) {
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;
import com.sun.jna.Pointer;
import com.zhehekeji.common.util.SpringContextUtil;
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_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.IOException;
/**
*
@ -26,6 +18,10 @@ public class LoginModule {
// 设备信息
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);
@ -70,7 +66,7 @@ public class LoginModule {
//设置登录超时时间和尝试次数,可选
int waitTime = 5000; //登录请求响应超时时间设置为5S
int tryTimes = 1; //登录时尝试建立链接1次
int tryTimes = 3; //登录时尝试建立链接1次
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) {
//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();
pstInParam.nPort=m_nPort;
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.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.util.UUID;
@ -18,6 +13,8 @@ import java.util.UUID;
*/
public class PtzControlModule {
private static CallBack.Mp4ReceiveCB mp4ReceiveCB = new CallBack.Mp4ReceiveCB();
/**
*
*/
@ -214,7 +211,7 @@ public class PtzControlModule {
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();
stuSnapParams.Channel = nChannelID; // channel
stuSnapParams.mode = 0; // capture picture mode
@ -222,10 +219,10 @@ public class PtzControlModule {
stuSnapParams.InterSnap = 0; // timer capture picture time interval
stuSnapParams.CmdSerial = OrderCmdSerial.nextSerial();
Long orderId = 1L;
OrderInfo orderInfo = new OrderInfo(orderId,"qwe",1);
OrderInfo orderInfo = new OrderInfo(orderId,orderNum,type);
OrderCmdSerial.put(stuSnapParams.CmdSerial,orderInfo);
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.emDataType = 3;
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.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);
System.out.println("下载句柄: "+l.longValue());
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.zhehekeji.web.entity.OrderLastMedia;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
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
public class OrderSaveReq {
@ApiModelProperty("订单号")
@ApiModelProperty("订单号 序号+巷道+垛机ID+货位号+动作")
@NotEmpty(message = "orderNum订单号不能为空")
private String orderNum;
@ApiModelProperty("仓位号")
@NotEmpty(message = "positionNum仓位号不能为空")
private String positionNum;
// @ApiModelProperty("仓位号")
// @NotEmpty(message = "positionNum仓位号不能为空")
// private String positionNum;
@ApiModelProperty("约定token")
@NotEmpty(message = "token不能为空")
private String token;
// @ApiModelProperty("约定token")
// @NotEmpty(message = "token不能为空")
// private String token;
@NotEmpty(message = "plcId不能为空")
private String plcId;
}

@ -9,4 +9,8 @@ public class OrderSearch {
@NotEmpty(message = "订单号不能为空")
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;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.util.Assert;
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.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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
@ -25,6 +34,8 @@ public class CameraService {
private CameraMapper cameraMapper;
@Resource
private StreetMapper streetMapper;
@Resource
private CameraIOMapper ioMapper;
@Value("${cameraPassword}")
private String cameraPassword;
@ -68,5 +79,30 @@ public class CameraService {
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.zhehekeji.core.util.Assert;
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.StreetMapper;
import com.zhehekeji.web.mapper.StreetShelveMapper;
import com.zhehekeji.web.pojo.OrderSaveReq;
import com.zhehekeji.web.pojo.OrderSearch;
import org.springframework.beans.BeanUtils;
@ -11,6 +16,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@ -21,6 +27,10 @@ public class OrderService {
@Resource
private OrderMapper orderMapper;
@Resource
private StreetShelveMapper streetShelveMapper;
@Resource
private StreetMapper streetMapper;
@Value("${picPort}")
private String picPort;
@ -31,6 +41,20 @@ public class OrderService {
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){
Order order = new Order();
String orderNum = saveReq.getOrderNum();
@ -38,6 +62,7 @@ public class OrderService {
order.setColumn(1);
order.setShelveId("aaa");
order.setRow(1);
order.setOrderNum(orderNum);
order.setCreateTime(LocalDateTime.now());
orderMapper.insert(order);
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