From 6b955832d85feef6902add3bbb66bd8a2acdab3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E9=B8=A3?= Date: Tue, 15 Dec 2020 11:03:05 +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 --- .../com/zhehekeji/common/util/PathUtil.java | 36 ++++++++ .../files/docker-compose.yml | 1 + pom.xml | 10 +++ .../java/com/zhehekeji/web/entity/Order.java | 18 ++-- .../zhehekeji/web/entity/StreetShelve.java | 20 +++++ .../zhehekeji/web/lib/CaptureReceiveCB.java | 87 +++++++++++++++++++ .../com/zhehekeji/web/lib/LoginModule.java | 31 +------ .../com/zhehekeji/web/lib/OrderCmdSerial.java | 38 ++++++++ .../java/com/zhehekeji/web/lib/OrderInfo.java | 32 +++++++ .../zhehekeji/web/lib/PtzControlModule.java | 8 +- .../web/mapper/StreetShelveMapper.java | 13 +++ .../zhehekeji/web/service/OrderService.java | 30 +++---- .../zhehekeji/web/service/StreetService.java | 53 ++++++++++- web/src/main/resources/application-dev.yml | 36 ++++++++ web/src/main/resources/application-test.yml | 1 + .../resources/mapper/StreetShelveMapper.xml | 13 +++ 16 files changed, 368 insertions(+), 59 deletions(-) create mode 100644 modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java create mode 100644 web/src/main/java/com/zhehekeji/web/entity/StreetShelve.java create mode 100644 web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java create mode 100644 web/src/main/java/com/zhehekeji/web/lib/OrderCmdSerial.java create mode 100644 web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java create mode 100644 web/src/main/java/com/zhehekeji/web/mapper/StreetShelveMapper.java create mode 100644 web/src/main/resources/application-dev.yml create mode 100644 web/src/main/resources/mapper/StreetShelveMapper.xml diff --git a/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java b/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java new file mode 100644 index 0000000..07c0f40 --- /dev/null +++ b/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java @@ -0,0 +1,36 @@ +package com.zhehekeji.common.util; + +import lombok.extern.slf4j.Slf4j; + +import java.io.File; +import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.UUID; + +@Slf4j +public class PathUtil { + + public static String createFileName(String fileType) { + String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd/HH")); + return time + "/" + UUID.randomUUID() + "."+fileType; + } + + public static File getFile(String url){ + File file = new File(url); + //如果文件不存在,则新建一个 + if(!file.exists()){ + if(!file.getParentFile().exists()){ + file.getParentFile().mkdirs(); + } + try { + file.createNewFile(); + } catch (IOException e) { + log.error("创建文件出错:{}",e); + } + } + return file; + } + +} diff --git a/playbook/roles/springbootstart-test/files/docker-compose.yml b/playbook/roles/springbootstart-test/files/docker-compose.yml index f437d28..07f0de8 100644 --- a/playbook/roles/springbootstart-test/files/docker-compose.yml +++ b/playbook/roles/springbootstart-test/files/docker-compose.yml @@ -8,6 +8,7 @@ services: hostname: lipo-duoji volumes: - /home/work/lia/duoji/logs:/data/log/duoji + - /home/work/lia/duoji/data:/home/work/data networks: default: diff --git a/pom.xml b/pom.xml index f103003..ecaa3ee 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,16 @@ + + + dev + + dev + + + true + + test 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 b32d873..cf6ae11 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Order.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Order.java @@ -16,9 +16,6 @@ public class Order { @TableId(type = IdType.AUTO) private Long id; - @ApiModelProperty("流水号") - private Long serialNum; - @ApiModelProperty("订单号") private String orderNum; @@ -26,17 +23,16 @@ public class Order { private String positionNum; @ApiModelProperty("视频图片地址") - private String filePath; - - private String mediaType; + private String videoPath; - private String deviceid; + @ApiModelProperty("入库照片") + private String putPath; - @ApiModelProperty("图片地址") - @TableField(exist = false) - private String mediaPath; + @ApiModelProperty("出库照片") + private String outPutPath; - private LocalDateTime execTime; + @ApiModelProperty("货位照片") + private String goodsPath; private LocalDateTime createTime; } diff --git a/web/src/main/java/com/zhehekeji/web/entity/StreetShelve.java b/web/src/main/java/com/zhehekeji/web/entity/StreetShelve.java new file mode 100644 index 0000000..1fe91de --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/StreetShelve.java @@ -0,0 +1,20 @@ +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; + +@Data +@TableName +public class StreetShelve { + + @TableId(type = IdType.AUTO) + private Integer id; + + private Integer streetId; + + private String shelveId; + + +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java b/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java new file mode 100644 index 0000000..b844e3b --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/CaptureReceiveCB.java @@ -0,0 +1,87 @@ +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.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; + +/** + * @Description 抓图回调函数 + * @Author wangyiming1031@aliyun.com + * @Date 2020/12/14 16:11 + **/ +@Component +@Slf4j +public class CaptureReceiveCB implements NetSDKLib.fSnapRev{ + + @Resource + private OrderMapper orderMapper; + + @Value("${mediaPath}") + private String mediaPath; + + private static String fileType = "jpg"; + + @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"); + + } + + 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/LoginModule.java b/web/src/main/java/com/zhehekeji/web/lib/LoginModule.java index 9719502..10d72be 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/LoginModule.java +++ b/web/src/main/java/com/zhehekeji/web/lib/LoginModule.java @@ -1,6 +1,7 @@ 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; @@ -77,38 +78,12 @@ public class LoginModule { netParam.nConnectTime = 10000; // 登录时尝试建立链接的超时时间 netParam.nGetConnInfoTime = 3000; // 设置子连接的超时时间 netsdk.CLIENT_SetNetworkParam(netParam); - fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB(); - netsdk.CLIENT_SetSnapRevCallBack(m_CaptureReceiveCB, null); + CaptureReceiveCB captureReceiveCB = SpringContextUtil.getBean(CaptureReceiveCB.class); + netsdk.CLIENT_SetSnapRevCallBack(captureReceiveCB, null); return true; } - public static class fCaptureReceiveCB implements NetSDKLib.fSnapRev{ - BufferedImage bufferedImage = null; - - @Override - public void invoke(NetSDKLib.LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { - if(pBuf != null && RevLen > 0) { - String strFileName = "d://wwww.jpeg"; - - System.out.println("22222222222strFileName = " + strFileName); - - byte[] buf = pBuf.getByteArray(0, RevLen); - ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf); - try { - bufferedImage = ImageIO.read(byteArrInput); - if(bufferedImage == null) { - return; - } - ImageIO.write(bufferedImage, "jpg", new File(strFileName)); - } catch (IOException e) { - e.printStackTrace(); - } - - - } - } - } /** * \if ENGLISH_LANG * CleanUp diff --git a/web/src/main/java/com/zhehekeji/web/lib/OrderCmdSerial.java b/web/src/main/java/com/zhehekeji/web/lib/OrderCmdSerial.java new file mode 100644 index 0000000..c294e2a --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/OrderCmdSerial.java @@ -0,0 +1,38 @@ +package com.zhehekeji.web.lib; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + +public class OrderCmdSerial { + + public static ConcurrentHashMap orderCmdSerialMap = new ConcurrentHashMap<>(Short.MAX_VALUE * 4); + + private static AtomicInteger serialIntId = new AtomicInteger(0); + + public static Integer nextSerial() { + return serialIntId.addAndGet(1); + } + + public static void put(Integer serialId, OrderInfo orderInfo) { + orderCmdSerialMap.put(serialId, orderInfo); + } + + public static void remove(Integer serialId) { + orderCmdSerialMap.remove(serialId); + } + + public static OrderInfo getOrderInfo(Integer serialId) { + return orderCmdSerialMap.get(serialId); + } + + public static void main(String[] args) { + AtomicInteger integer = new AtomicInteger(Integer.MAX_VALUE); + System.out.println(integer); + //System.out.println(integer.addAndGet(1)); + System.out.println((short) integer.addAndGet(1)); + AtomicInteger next = new AtomicInteger(integer.addAndGet(1)); + System.out.println(next.get()); + } + + +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java b/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java new file mode 100644 index 0000000..642f24e --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/OrderInfo.java @@ -0,0 +1,32 @@ +package com.zhehekeji.web.lib; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@AllArgsConstructor +@Getter +@Setter +public class OrderInfo { + + private Long orderId; + + /** + * 1:入库 2:货位 3:出库 + */ + private Integer type; + + @AllArgsConstructor + @Getter + public enum OrderPathType{ + PUT(1), + OUTPUT(3), + GOODS(2), + + ; + private Integer type; + + } + + +} 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 9256fbf..b921ffc 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/PtzControlModule.java +++ b/web/src/main/java/com/zhehekeji/web/lib/PtzControlModule.java @@ -218,9 +218,13 @@ public class PtzControlModule { stuSnapParams.mode = 0; // capture picture mode stuSnapParams.Quality = 3; // picture quality stuSnapParams.InterSnap = 0; // timer capture picture time interval - stuSnapParams.CmdSerial = 0; + stuSnapParams.CmdSerial = OrderCmdSerial.nextSerial(); + Long orderId = 1L; + OrderInfo orderInfo = new OrderInfo(orderId,1); + OrderCmdSerial.put(stuSnapParams.CmdSerial,orderInfo); IntByReference reserved = new IntByReference(0); - return LoginModule.netsdk.CLIENT_SnapPictureEx(LoginModule.m_hLoginHandle, stuSnapParams, reserved); + return LoginModule.netsdk.CLIENT_SnapPictureEx(CameraConnMap.getConnId(cameraId), stuSnapParams, reserved); + } diff --git a/web/src/main/java/com/zhehekeji/web/mapper/StreetShelveMapper.java b/web/src/main/java/com/zhehekeji/web/mapper/StreetShelveMapper.java new file mode 100644 index 0000000..ea0b9ca --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/mapper/StreetShelveMapper.java @@ -0,0 +1,13 @@ +package com.zhehekeji.web.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zhehekeji.web.entity.Stock; +import com.zhehekeji.web.entity.StreetShelve; + +import java.util.List; + +public interface StreetShelveMapper extends BaseMapper { + + void batchInsert(List streetShelves); + +} 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 eb770bf..dce1744 100644 --- a/web/src/main/java/com/zhehekeji/web/service/OrderService.java +++ b/web/src/main/java/com/zhehekeji/web/service/OrderService.java @@ -33,21 +33,21 @@ public class OrderService { 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); - } - } - }); +// 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; } 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 3f17199..f23ef9d 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StreetService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StreetService.java @@ -3,16 +3,23 @@ package com.zhehekeji.web.service; 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.StreetMapper; +import com.zhehekeji.web.mapper.StreetShelveMapper; import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetType; import com.zhehekeji.web.pojo.street.StreetVO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service @Slf4j @@ -20,39 +27,79 @@ public class StreetService { @Resource private StreetMapper streetMapper; + @Resource + private StreetShelveMapper streetShelveMapper; + @Transactional(rollbackFor = Exception.class) public Integer add(Street street){ - check(street); + List shelves = check(street); street.setCreateTime(LocalDateTime.now()); street.setUpdateTime(LocalDateTime.now()); streetMapper.insert(street); + streetShelve(shelves,street.getId()); return street.getId(); } + @Transactional(rollbackFor = Exception.class) public void del(Integer id){ streetMapper.deleteById(id); + delStreetShelve(id); } - private void check(Street street){ + private List check(Street street){ + List shelves = new ArrayList<>(); if(StreetType.SINGLE.getType().equals(street.getLeftType())){ street.setLeftInsideShelveId(null); street.setLeftOutsideShelveId(null); + shelves.add(street.getLeftShelveId()); } if(StreetType.SINGLE.getType().equals(street.getRightType())){ street.setRightInsideShelveId(null); street.setRightOutsideShelveId(null); + shelves.add(street.getRightShelveId()); } if(StreetType.DOUBLE.getType().equals(street.getLeftType())){ street.setLeftShelveId(null); + shelves.add(street.getLeftInsideShelveId()); + shelves.add(street.getLeftOutsideShelveId()); } if(StreetType.DOUBLE.getType().equals(street.getRightType())){ street.setRightShelveId(null); + shelves.add(street.getRightInsideShelveId()); + shelves.add(street.getRightOutsideShelveId()); } + return shelves; } + @Transactional(rollbackFor = Exception.class) public void edit(Street street){ - check(street); + List shelves = check(street); streetMapper.updateById(street); + delStreetShelve(street.getId()); + streetShelve(shelves,street.getId()); + } + + private void delStreetShelve(Integer streetId){ + Map params = new HashMap<>(1); + params.put("street_id",streetId); + streetShelveMapper.deleteByMap(params); + } + + private void streetShelve(List shelves,Integer streetId){ + if(CollectionUtils.isEmpty(shelves) || streetId == null){ + return; + } + List streetShelves = new ArrayList<>(shelves.size()); + shelves.forEach( + s -> { + StreetShelve streetShelve = new StreetShelve(); + streetShelve.setShelveId(s); + streetShelve.setStreetId(streetId); + streetShelves.add(streetShelve); + } + ); + streetShelveMapper.batchInsert(streetShelves); + } public PageInfo page(StreetSearch search){ diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml new file mode 100644 index 0000000..a55982c --- /dev/null +++ b/web/src/main/resources/application-dev.yml @@ -0,0 +1,36 @@ +logging: + level: + com.zhehekeji: debug + org.springframework.web: info + root: info +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + initialSize: 15 + maxActive: 20 + maxPoolPreparedStatementPerConnectionSize: 20 + maxWait: 60000 + minEvictableIdleTimeMillis: 300000 + minIdle: 15 + password: lipoLiPo + poolPreparedStatements: true + testOnBorrow: true + testOnReturn: false + testWhileIdle: false + timeBetweenEvictionRunsMillis: 60000 + type: com.alibaba.druid.pool.DruidDataSource + url: jdbc:mysql://47.98.255.48:8008/lipo_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + username: lipo + validationQuery: SELECT 1 FROM DUAL +zhehe: + common: + redis: + prefix: spring + filter: + enable: true + postToken: w89euijon2&UHBTY$%huni34ri +server: + port: 8099 +userUrl: http://115.236.65.98:8007 +picPort: 8544 +mediaPath: d:\\media\ diff --git a/web/src/main/resources/application-test.yml b/web/src/main/resources/application-test.yml index 023e9bd..3402d0e 100644 --- a/web/src/main/resources/application-test.yml +++ b/web/src/main/resources/application-test.yml @@ -33,3 +33,4 @@ server: port: 8099 userUrl: http://115.236.65.98:8007 picPort: 8544 +mediaPath: /home/work/data diff --git a/web/src/main/resources/mapper/StreetShelveMapper.xml b/web/src/main/resources/mapper/StreetShelveMapper.xml new file mode 100644 index 0000000..acc1e84 --- /dev/null +++ b/web/src/main/resources/mapper/StreetShelveMapper.xml @@ -0,0 +1,13 @@ + + + + + + insert into street_shelve( + shelve_id,street_id + ) values + + (#{item.shelveId},#{item.streetId}) + + +