增加 street与shelves的关联关系表

camera_merge
王一鸣 5 years ago
parent d1ad225dee
commit 6b955832d8

@ -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;
}
}

@ -8,6 +8,7 @@ services:
hostname: lipo-duoji hostname: lipo-duoji
volumes: volumes:
- /home/work/lia/duoji/logs:/data/log/duoji - /home/work/lia/duoji/logs:/data/log/duoji
- /home/work/lia/duoji/data:/home/work/data
networks: networks:
default: default:

@ -58,6 +58,16 @@
</dependencies> </dependencies>
<profiles> <profiles>
<profile>
<!-- 测试环境 -->
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile> <profile>
<!-- 测试环境 --> <!-- 测试环境 -->
<id>test</id> <id>test</id>

@ -16,9 +16,6 @@ public class Order {
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty("流水号")
private Long serialNum;
@ApiModelProperty("订单号") @ApiModelProperty("订单号")
private String orderNum; private String orderNum;
@ -26,17 +23,16 @@ public class Order {
private String positionNum; private String positionNum;
@ApiModelProperty("视频图片地址") @ApiModelProperty("视频图片地址")
private String filePath; private String videoPath;
private String mediaType;
private String deviceid; @ApiModelProperty("入库照片")
private String putPath;
@ApiModelProperty("图片地址") @ApiModelProperty("出库照片")
@TableField(exist = false) private String outPutPath;
private String mediaPath;
private LocalDateTime execTime; @ApiModelProperty("货位照片")
private String goodsPath;
private LocalDateTime createTime; private LocalDateTime createTime;
} }

@ -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;
}

@ -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;
}
}

@ -1,6 +1,7 @@
package com.zhehekeji.web.lib; package com.zhehekeji.web.lib;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
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;
@ -77,38 +78,12 @@ public class LoginModule {
netParam.nConnectTime = 10000; // 登录时尝试建立链接的超时时间 netParam.nConnectTime = 10000; // 登录时尝试建立链接的超时时间
netParam.nGetConnInfoTime = 3000; // 设置子连接的超时时间 netParam.nGetConnInfoTime = 3000; // 设置子连接的超时时间
netsdk.CLIENT_SetNetworkParam(netParam); netsdk.CLIENT_SetNetworkParam(netParam);
fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB(); CaptureReceiveCB captureReceiveCB = SpringContextUtil.getBean(CaptureReceiveCB.class);
netsdk.CLIENT_SetSnapRevCallBack(m_CaptureReceiveCB, null); netsdk.CLIENT_SetSnapRevCallBack(captureReceiveCB, null);
return true; 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 * \if ENGLISH_LANG
* CleanUp * CleanUp

@ -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<Integer, OrderInfo> 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());
}
}

@ -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;
}
}

@ -218,9 +218,13 @@ public class PtzControlModule {
stuSnapParams.mode = 0; // capture picture mode stuSnapParams.mode = 0; // capture picture mode
stuSnapParams.Quality = 3; // picture quality stuSnapParams.Quality = 3; // picture quality
stuSnapParams.InterSnap = 0; // timer capture picture time interval 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); 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);
} }

@ -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<StreetShelve> {
void batchInsert(List<StreetShelve> streetShelves);
}

@ -33,21 +33,21 @@ public class OrderService {
List<Order> orders = orderMapper.selectList(queryWrapper); List<Order> orders = orderMapper.selectList(queryWrapper);
//图片地址处理 //图片地址处理
orders.forEach(order -> { // orders.forEach(order -> {
String deviceId = order.getDeviceid(); // String deviceId = order.getDeviceid();
if(!StringUtils.isEmpty(deviceId)){ // if(!StringUtils.isEmpty(deviceId)){
String [] strings = deviceId.split("_"); // String [] strings = deviceId.split("_");
if(strings != null && strings.length > 4){ // if(strings != null && strings.length > 4){
Integer len = strings.length; // Integer len = strings.length;
String ip = strings[len -4]+"."+strings[len-3]+"."+strings[len-2]+"."+strings[len-1]; // 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 // // fliePath -> E:/stable3262/tadpole/tpvs17/x64/Release/../../../runner17/x64/LIQUN_Image/20200827/155907_HL0101001002031_name1.jpg
//去掉盘符,取后面的地址 拼接 // //去掉盘符,取后面的地址 拼接
int i = order.getFilePath().indexOf(":"); // int i = order.getFilePath().indexOf(":");
String path = "http://"+ip+":"+picPort+order.getFilePath().substring(i+1,order.getFilePath().length()); // String path = "http://"+ip+":"+picPort+order.getFilePath().substring(i+1,order.getFilePath().length());
order.setMediaPath(path); // order.setMediaPath(path);
} // }
} // }
}); // });
return orders; return orders;
} }

@ -3,16 +3,23 @@ package com.zhehekeji.web.service;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.entity.StreetShelve;
import com.zhehekeji.web.mapper.StreetMapper; 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.StreetSearch;
import com.zhehekeji.web.pojo.street.StreetType; import com.zhehekeji.web.pojo.street.StreetType;
import com.zhehekeji.web.pojo.street.StreetVO; import com.zhehekeji.web.pojo.street.StreetVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
@Slf4j @Slf4j
@ -20,39 +27,79 @@ public class StreetService {
@Resource @Resource
private StreetMapper streetMapper; private StreetMapper streetMapper;
@Resource
private StreetShelveMapper streetShelveMapper;
@Transactional(rollbackFor = Exception.class)
public Integer add(Street street){ public Integer add(Street street){
check(street); List<String> shelves = check(street);
street.setCreateTime(LocalDateTime.now()); street.setCreateTime(LocalDateTime.now());
street.setUpdateTime(LocalDateTime.now()); street.setUpdateTime(LocalDateTime.now());
streetMapper.insert(street); streetMapper.insert(street);
streetShelve(shelves,street.getId());
return street.getId(); return street.getId();
} }
@Transactional(rollbackFor = Exception.class)
public void del(Integer id){ public void del(Integer id){
streetMapper.deleteById(id); streetMapper.deleteById(id);
delStreetShelve(id);
} }
private void check(Street street){ private List<String> check(Street street){
List<String> shelves = new ArrayList<>();
if(StreetType.SINGLE.getType().equals(street.getLeftType())){ if(StreetType.SINGLE.getType().equals(street.getLeftType())){
street.setLeftInsideShelveId(null); street.setLeftInsideShelveId(null);
street.setLeftOutsideShelveId(null); street.setLeftOutsideShelveId(null);
shelves.add(street.getLeftShelveId());
} }
if(StreetType.SINGLE.getType().equals(street.getRightType())){ if(StreetType.SINGLE.getType().equals(street.getRightType())){
street.setRightInsideShelveId(null); street.setRightInsideShelveId(null);
street.setRightOutsideShelveId(null); street.setRightOutsideShelveId(null);
shelves.add(street.getRightShelveId());
} }
if(StreetType.DOUBLE.getType().equals(street.getLeftType())){ if(StreetType.DOUBLE.getType().equals(street.getLeftType())){
street.setLeftShelveId(null); street.setLeftShelveId(null);
shelves.add(street.getLeftInsideShelveId());
shelves.add(street.getLeftOutsideShelveId());
} }
if(StreetType.DOUBLE.getType().equals(street.getRightType())){ if(StreetType.DOUBLE.getType().equals(street.getRightType())){
street.setRightShelveId(null); street.setRightShelveId(null);
shelves.add(street.getRightInsideShelveId());
shelves.add(street.getRightOutsideShelveId());
} }
return shelves;
} }
@Transactional(rollbackFor = Exception.class)
public void edit(Street street){ public void edit(Street street){
check(street); List<String> shelves = check(street);
streetMapper.updateById(street); streetMapper.updateById(street);
delStreetShelve(street.getId());
streetShelve(shelves,street.getId());
}
private void delStreetShelve(Integer streetId){
Map<String,Object> params = new HashMap<>(1);
params.put("street_id",streetId);
streetShelveMapper.deleteByMap(params);
}
private void streetShelve(List<String> shelves,Integer streetId){
if(CollectionUtils.isEmpty(shelves) || streetId == null){
return;
}
List<StreetShelve> 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<StreetVO> page(StreetSearch search){ public PageInfo<StreetVO> page(StreetSearch search){

@ -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\

@ -33,3 +33,4 @@ server:
port: 8099 port: 8099
userUrl: http://115.236.65.98:8007 userUrl: http://115.236.65.98:8007
picPort: 8544 picPort: 8544
mediaPath: /home/work/data

@ -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.StreetShelveMapper">
<insert id="batchInsert" parameterType="java.util.List">
insert into street_shelve(
shelve_id,street_id
) values
<foreach collection="streetShelves" item="item" separator=",">
(#{item.shelveId},#{item.streetId})
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save