From 3f7ba8dbfa7470f62df617d3848f921bc47dc280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E9=B8=A3?= Date: Thu, 17 Dec 2020 10:40:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20street=E4=B8=8Eshelves?= =?UTF-8?q?=E7=9A=84=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/OrderController.java | 3 - .../web/controller/StreetController.java | 7 + .../java/com/zhehekeji/web/entity/Order.java | 10 +- .../zhehekeji/web/entity/OrderLastMedia.java | 36 +++++ .../zhehekeji/web/lib/CaptureReceiveCB.java | 69 +++------- .../zhehekeji/web/lib/CaptureRunnable.java | 125 ++++++++++++++++++ .../java/com/zhehekeji/web/lib/OrderInfo.java | 2 + .../zhehekeji/web/lib/PtzControlModule.java | 2 +- .../web/mapper/OrderLastMediaMapper.java | 7 + .../com/zhehekeji/web/pojo/OrderSaveReq.java | 20 --- .../com/zhehekeji/web/pojo/OrderSearch.java | 2 - .../zhehekeji/web/service/OrderService.java | 39 +----- .../zhehekeji/web/service/StreetService.java | 16 +++ 13 files changed, 223 insertions(+), 115 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/entity/OrderLastMedia.java create mode 100644 web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java create mode 100644 web/src/main/java/com/zhehekeji/web/mapper/OrderLastMediaMapper.java diff --git a/web/src/main/java/com/zhehekeji/web/controller/OrderController.java b/web/src/main/java/com/zhehekeji/web/controller/OrderController.java index 50690f1..b8c1f2b 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/OrderController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/OrderController.java @@ -3,14 +3,11 @@ package com.zhehekeji.web.controller; import com.zhehekeji.common.util.ValidatorUtil; import com.zhehekeji.core.pojo.Result; import com.zhehekeji.core.util.Assert; -import com.zhehekeji.filter.pojo.SessionHandler; -import com.zhehekeji.filter.pojo.UserType; import com.zhehekeji.web.entity.Order; import com.zhehekeji.web.pojo.OrderSaveReq; import com.zhehekeji.web.pojo.OrderSearch; import com.zhehekeji.web.service.OrderService; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; diff --git a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java index cca1465..551051a 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java @@ -48,6 +48,13 @@ public class StreetController { return Result.success(); } + @DeleteMapping("/{id}") + @ApiOperation(value = "巷道删除") + public Result del(@PathVariable Integer id){ + streetService.del(id); + return Result.success(); + } + /*@GetMapping("/userCenter") diff --git a/web/src/main/java/com/zhehekeji/web/entity/Order.java b/web/src/main/java/com/zhehekeji/web/entity/Order.java index cf6ae11..d39401b 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Order.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Order.java @@ -19,8 +19,14 @@ public class Order { @ApiModelProperty("订单号") private String orderNum; - @ApiModelProperty("仓位号") - private String positionNum; + private String shelveId; + + private Integer row; + + private Integer column; + +// @ApiModelProperty("仓位号") +// private String positionNum; @ApiModelProperty("视频图片地址") private String videoPath; diff --git a/web/src/main/java/com/zhehekeji/web/entity/OrderLastMedia.java b/web/src/main/java/com/zhehekeji/web/entity/OrderLastMedia.java new file mode 100644 index 0000000..d9304fc --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/OrderLastMedia.java @@ -0,0 +1,36 @@ +package com.zhehekeji.web.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@TableName +@Data +public class OrderLastMedia { + + @TableId + private String shelveId; + + @TableField("`row`") + private Integer row; + + @TableField("`column`") + private Integer column; + + private Long lastPutOrderId; + + @ApiModelProperty("入库照片") + private String putPath; + + private Long lastOutOrderId; + + @ApiModelProperty("出库照片") + private String outPutPath; + + private Long lastGoodsOrderId; + + @ApiModelProperty("货位照片") + private String goodsPath; +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java b/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java index b844e3b..3288f6f 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java @@ -1,19 +1,16 @@ package com.zhehekeji.web.lib; import com.sun.jna.Pointer; -import com.zhehekeji.common.util.PathUtil; -import com.zhehekeji.web.entity.Order; +import com.zhehekeji.web.mapper.OrderLastMediaMapper; import com.zhehekeji.web.mapper.OrderMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * @Description 抓图回调函数 @@ -32,56 +29,20 @@ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{ private static String fileType = "jpg"; + @Resource + private OrderLastMediaMapper lastMediaMapper; + + /** + * 执行线程池 + */ + private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 200, + TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10000000)); + @Override public void invoke(NetSDKLib.LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { - OrderInfo orderInfo = OrderCmdSerial.getOrderInfo(CmdSerial); - OrderCmdSerial.remove(CmdSerial); - if(orderInfo != null){ - String path = PathUtil.createFileName(fileType); - String picPath = savePic(pBuf,RevLen,mediaPath+path); - if(picPath == null){ - return; - } - log.debug("save pic orderId:{} path:{}",orderInfo.getOrderId(),picPath); - Order order = new Order(); - order.setId(orderInfo.getOrderId()); - if(OrderInfo.OrderPathType.GOODS.getType().equals(orderInfo.getType())){ - order.setGoodsPath(path); - }else if(OrderInfo.OrderPathType.PUT.getType().equals(orderInfo.getType())){ - order.setPutPath(path); - }else if(OrderInfo.OrderPathType.OUTPUT.getType().equals(orderInfo.getType())){ - order.setOutPutPath(path); - } - orderMapper.updateById(order); - return; - } - log.warn("no order"); - + CaptureRunnable captureRunnable = new CaptureRunnable(CmdSerial,fileType,RevLen,mediaPath,pBuf,orderMapper,lastMediaMapper); + threadPoolExecutor.execute(captureRunnable); } - private String savePic(Pointer pBuf, int RevLen,String path){ - BufferedImage bufferedImage = null; - if(pBuf != null && RevLen > 0) { - byte[] buf = pBuf.getByteArray(0, RevLen); - ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf); - try { - bufferedImage = ImageIO.read(byteArrInput); - if(bufferedImage == null) { - return null; - } - File file = PathUtil.getFile(path); - ImageIO.write(bufferedImage, fileType, file); - return path; - } catch (IOException e) { - e.printStackTrace(); - }finally { - if(bufferedImage != null){ - bufferedImage.flush(); - } - } - - } - return null; - } } diff --git a/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java b/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java new file mode 100644 index 0000000..60ad569 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/CaptureRunnable.java @@ -0,0 +1,125 @@ +package com.zhehekeji.web.lib; + +import com.sun.jna.Pointer; +import com.zhehekeji.common.util.PathUtil; +import com.zhehekeji.web.entity.Order; +import com.zhehekeji.web.entity.OrderLastMedia; +import com.zhehekeji.web.mapper.OrderLastMediaMapper; +import com.zhehekeji.web.mapper.OrderMapper; +import lombok.extern.slf4j.Slf4j; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; + +@Slf4j +public class CaptureRunnable implements Runnable { + + private int CmdSerial; + + private String fileType; + + private Integer RevLen; + + private String mediaPath; + + private Pointer pBuf; + + private OrderMapper orderMapper; + + private OrderLastMediaMapper lastMediaMapper; + + public CaptureRunnable(int cmdSerial, String fileType, Integer revLen, String mediaPath, + Pointer pBuf, OrderMapper orderMapper, OrderLastMediaMapper lastMediaMapper) { + this.CmdSerial = cmdSerial; + this.fileType = fileType; + this.RevLen = revLen; + this.mediaPath = mediaPath; + this.pBuf = pBuf; + this.orderMapper = orderMapper; + this.lastMediaMapper = lastMediaMapper; + } + + @Override + public void run() { + OrderInfo orderInfo = OrderCmdSerial.getOrderInfo(CmdSerial); + OrderCmdSerial.remove(CmdSerial); + if(orderInfo != null){ + String path = PathUtil.createFileName(fileType); + 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(); + } + Order order = new Order(); + 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())){ + 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); + } + } + orderMapper.updateById(order); + return; + } + log.warn("no order"); + } + + private OrderLastMedia initLastOrder(){ + OrderLastMedia orderLastMedia = new OrderLastMedia(); + orderLastMedia.setShelveId("qqq"); + orderLastMedia.setLastOutOrderId(0L); + orderLastMedia.setLastPutOrderId(0L); + orderLastMedia.setLastGoodsOrderId(0L); + lastMediaMapper.insert(orderLastMedia); + return orderLastMedia; + + } + + private String savePic(Pointer pBuf, int RevLen,String path){ + BufferedImage bufferedImage = null; + if(pBuf != null && RevLen > 0) { + byte[] buf = pBuf.getByteArray(0, RevLen); + ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf); + try { + bufferedImage = ImageIO.read(byteArrInput); + if(bufferedImage == null) { + return null; + } + File file = PathUtil.getFile(path); + ImageIO.write(bufferedImage, fileType, file); + return path; + } catch (IOException e) { + e.printStackTrace(); + }finally { + if(bufferedImage != null){ + bufferedImage.flush(); + } + } + + + } + return null; + } +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java b/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java index 642f24e..03bc654 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java +++ b/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java @@ -11,6 +11,8 @@ public class OrderInfo { private Long orderId; + private String orderNum; + /** * 1:入库 2:货位 3:出库 */ diff --git a/web/src/main/java/com/zhehekeji/web/lib/PtzControlModule.java b/web/src/main/java/com/zhehekeji/web/lib/PtzControlModule.java index b921ffc..9ed81dd 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/PtzControlModule.java +++ b/web/src/main/java/com/zhehekeji/web/lib/PtzControlModule.java @@ -220,7 +220,7 @@ public class PtzControlModule { stuSnapParams.InterSnap = 0; // timer capture picture time interval stuSnapParams.CmdSerial = OrderCmdSerial.nextSerial(); Long orderId = 1L; - OrderInfo orderInfo = new OrderInfo(orderId,1); + OrderInfo orderInfo = new OrderInfo(orderId,"qwe",1); OrderCmdSerial.put(stuSnapParams.CmdSerial,orderInfo); IntByReference reserved = new IntByReference(0); return LoginModule.netsdk.CLIENT_SnapPictureEx(CameraConnMap.getConnId(cameraId), stuSnapParams, reserved); diff --git a/web/src/main/java/com/zhehekeji/web/mapper/OrderLastMediaMapper.java b/web/src/main/java/com/zhehekeji/web/mapper/OrderLastMediaMapper.java new file mode 100644 index 0000000..f663ff4 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/mapper/OrderLastMediaMapper.java @@ -0,0 +1,7 @@ +package com.zhehekeji.web.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zhehekeji.web.entity.OrderLastMedia; + +public interface OrderLastMediaMapper extends BaseMapper { +} diff --git a/web/src/main/java/com/zhehekeji/web/pojo/OrderSaveReq.java b/web/src/main/java/com/zhehekeji/web/pojo/OrderSaveReq.java index c5215ce..b47e9cc 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/OrderSaveReq.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/OrderSaveReq.java @@ -1,20 +1,14 @@ package com.zhehekeji.web.pojo; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; @Data public class OrderSaveReq { - @NotNull(message = "serialNum(流水号不能为空)") - @ApiModelProperty("流水号") - private Long serialNum; - @ApiModelProperty("订单号") @NotEmpty(message = "orderNum(订单号)不能为空") private String orderNum; @@ -23,20 +17,6 @@ public class OrderSaveReq { @NotEmpty(message = "positionNum(仓位号)不能为空") private String positionNum; - @ApiModelProperty("视频/图片地址") - private String filePath; - - @ApiModelProperty("媒体类型 MP4 or jpg or ???") - private String mediaType; - - @NotEmpty(message = "deviceid(设备)不能为空") - @ApiModelProperty("设备标识") - private String deviceid; - - @ApiModelProperty("执行时间 形式:2019-09-09 12:12:12") - @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") - private LocalDateTime execTime; - @ApiModelProperty("约定token") @NotEmpty(message = "token不能为空") private String token; diff --git a/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java b/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java index 643d4c5..af0fa74 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java @@ -9,6 +9,4 @@ public class OrderSearch { @NotEmpty(message = "订单号不能为空") private String orderNum; - - private String deviceid; } diff --git a/web/src/main/java/com/zhehekeji/web/service/OrderService.java b/web/src/main/java/com/zhehekeji/web/service/OrderService.java index dce1744..1ab4e03 100644 --- a/web/src/main/java/com/zhehekeji/web/service/OrderService.java +++ b/web/src/main/java/com/zhehekeji/web/service/OrderService.java @@ -27,46 +27,19 @@ public class OrderService { public List orders(OrderSearch orderSearch){ QueryWrapper queryWrapper = new QueryWrapper().eq("order_num",orderSearch.getOrderNum()); - if(!StringUtils.isEmpty(orderSearch.getDeviceid())){ - queryWrapper.eq("deviceid",orderSearch.getDeviceid()); - } - List orders = orderMapper.selectList(queryWrapper); - //图片地址处理 -// orders.forEach(order -> { -// String deviceId = order.getDeviceid(); -// if(!StringUtils.isEmpty(deviceId)){ -// String [] strings = deviceId.split("_"); -// if(strings != null && strings.length > 4){ -// Integer len = strings.length; -// String ip = strings[len -4]+"."+strings[len-3]+"."+strings[len-2]+"."+strings[len-1]; -// // fliePath -> E:/stable3262/tadpole/tpvs17/x64/Release/../../../runner17/x64/LIQUN_Image/20200827/155907_HL0101001002031_name1.jpg -// //去掉盘符,取后面的地址 拼接 -// int i = order.getFilePath().indexOf(":"); -// String path = "http://"+ip+":"+picPort+order.getFilePath().substring(i+1,order.getFilePath().length()); -// order.setMediaPath(path); -// } -// } -// }); return orders; } - public static void main(String[] args) { - String filePath = "E2:/stable3262/tadpole/tpvs17/x64/Release/../../../runner17/x64/LIQUN_Image/20200827/155907_HL0101001002031_name1.jpg"; - int i = filePath.indexOf(":"); - System.out.println(filePath.substring(i+1,filePath.length())); - System.out.println(i); - } - public Long add(OrderSaveReq saveReq){ Order order = new Order(); - BeanUtils.copyProperties(saveReq,order); + String orderNum = saveReq.getOrderNum(); + //todo 转换row shelveId column + order.setColumn(1); + order.setShelveId("aaa"); + order.setRow(1); order.setCreateTime(LocalDateTime.now()); - try { - orderMapper.insert(order); - }catch (DuplicateKeyException e){ - Assert.isTrue(false,"流水号不合法"); - } + orderMapper.insert(order); return order.getId(); } diff --git a/web/src/main/java/com/zhehekeji/web/service/StreetService.java b/web/src/main/java/com/zhehekeji/web/service/StreetService.java index f23ef9d..748c924 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StreetService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StreetService.java @@ -1,9 +1,11 @@ package com.zhehekeji.web.service; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.entity.StreetShelve; +import com.zhehekeji.web.mapper.OrderLastMediaMapper; import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.mapper.StreetShelveMapper; import com.zhehekeji.web.pojo.street.StreetSearch; @@ -20,6 +22,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @Slf4j @@ -29,6 +32,8 @@ public class StreetService { private StreetMapper streetMapper; @Resource private StreetShelveMapper streetShelveMapper; + @Resource + private OrderLastMediaMapper lastMediaMapper; @Transactional(rollbackFor = Exception.class) public Integer add(Street street){ @@ -40,10 +45,21 @@ public class StreetService { return street.getId(); } + public List shelvesByStreetId(Integer streetId){ + List streetShelves = streetShelveMapper.selectList(new QueryWrapper().eq("street_id",streetId)); + return streetShelves.stream().map(StreetShelve::getShelveId).collect(Collectors.toList()); + } + @Transactional(rollbackFor = Exception.class) public void del(Integer id){ streetMapper.deleteById(id); + +// List sheleves = shelvesByStreetId(id); +// if(!CollectionUtils.isEmpty(sheleves)){ +// lastMediaMapper.deleteBatchIds(sheleves); +// } delStreetShelve(id); + } private List check(Street street){