camera_merge
王一鸣 5 years ago
parent 3a459cfb72
commit 3b508284f0

@ -5,7 +5,9 @@ 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.entity.CameraIOConfig;
import com.zhehekeji.web.lib.PtzControlModule;
import com.zhehekeji.web.pojo.camera.CameraConfigSearchReq;
import com.zhehekeji.web.pojo.camera.CameraIOPtz;
import com.zhehekeji.web.pojo.camera.CameraSearchReq;
import com.zhehekeji.web.pojo.street.StreetSearch;
@ -17,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
@Api(value = "camera",tags = "球机管理")
@RestController
@ -40,10 +43,36 @@ public class CameraController {
return new Result<>(cameraService.add(camera));
}
@PostMapping("/io/import/{cameraId}")
@PostMapping("/config/import")
@ApiOperation(value = "球机IO导入 ")
public Result upload(MultipartFile file,@PathVariable Integer cameraId) throws IOException {
cameraService.importExcel(file,cameraId);
public Result upload(MultipartFile file) throws IOException {
cameraService.importExcel(file);
return Result.success();
}
@PostMapping("/config")
@ApiOperation(value = "球机IO配置新增 ")
public Result<Integer> addConfig (@RequestBody CameraIOConfig config) {
return Result.success(cameraService.addConfig(config));
}
@PostMapping("/config/page")
@ApiOperation(value = "球机IO配置分页列表")
public Result<PageInfo<CameraIOConfig>> configPage (@RequestBody CameraConfigSearchReq req) {
return Result.success(cameraService.configPageInfo(req));
}
@PutMapping("/config")
@ApiOperation(value = "球机IO配置修改 ")
public Result editConfig (@RequestBody CameraIOConfig config) {
cameraService.editConfig(config);
return Result.success();
}
@DeleteMapping("/config/{id}")
@ApiOperation(value = "球机IO配置删除 ")
public Result delConfig (@PathVariable Integer id) {
cameraService.delConfig(id);
return Result.success();
}
@ -61,17 +90,10 @@ 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")
@PostMapping("/{cameraId}/io/list")
@ApiOperation(value = "球机IO列表")
public Result<PageInfo<CameraIO>> IOPage(@RequestBody CameraSearchReq req) {
validatorUtil.validate(req);
return Result.success(cameraService.IOPage(req));
public Result<List<CameraIO>> IOPage(@PathVariable Integer cameraId) {
return Result.success(cameraService.ioList(cameraId));
}
@PutMapping("/io")
@ -81,26 +103,19 @@ public class CameraController {
return Result.success();
}
@DeleteMapping("/io/{id}")
@ApiOperation(value = "球机IO删除")
public Result delIO(@PathVariable Integer id){
cameraService.delIO(id);
return Result.success();
}
@PostMapping("/io/ptz")
@ApiOperation(value = "球机IO配置")
public Result ptz(@RequestBody CameraIOPtz req) {
public Result<Integer> ptz(@RequestBody CameraIOPtz req) {
validatorUtil.validate(req);
cameraService.ptz(req.getCameraIOId(),req.getCameraId());
return Result.success();
return Result.success(cameraService.ptz(req.getCameraIOId(),req.getCameraId(),req.getName(),req.getType()));
}
@PostMapping("/io/toPtz")
@ApiOperation(value = "转至球机IO配置点")
public Result toPtz(@RequestBody CameraIOPtz req) {
validatorUtil.validate(req);
PtzControlModule.toPtz(req.getCameraIOId(),req.getCameraId());
Integer ptzId = cameraService.getPtzId(req.getCameraIOId());
PtzControlModule.toPtz(ptzId,req.getCameraId());
return Result.success();
}
}

@ -28,14 +28,6 @@ public class Camera {
private String rtsp;
// private String position;
//
// private String focusing;
//
// private String aperture;
//
// private BigDecimal multiple;
@ApiModelProperty(value = "预置点 增长值",hidden = true)
private Integer ptzId;

@ -18,8 +18,6 @@ public class CameraIO {
private String name;
private Integer ptzId;
private String position;
private String focusing;
@ -28,5 +26,7 @@ public class CameraIO {
private String multiple;
private Integer ptzId;
private LocalDateTime updateTime;
}

@ -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;
import java.time.LocalDateTime;
@Data
@TableName("camera_io_config")
public class CameraIOConfig {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private LocalDateTime updateTime;
}

@ -31,7 +31,12 @@ public class Order {
// private String positionNum;
@ApiModelProperty("视频图片地址")
private String videoPath;
@TableField("`video_path_1`")
private String videoPath1;
@ApiModelProperty("视频图片地址")
@TableField("`video_path_2`")
private String videoPath2;
@ApiModelProperty("入库照片")
private String putPath;

@ -3,8 +3,6 @@ package com.zhehekeji.web.lib;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
import javax.swing.*;
@Slf4j
public class CallBack {

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

@ -2,10 +2,16 @@ package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.CameraIO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface CameraIOMapper extends BaseMapper<CameraIO> {
void batchInsert(List<CameraIO> list);
@Select("select t.name as name ,io.id ,io.aperture,io.camera_id,io.focusing,io.multiple,io.position,io.ptz_id,io.update_time\n" +
"from camera_io_config t \n" +
"left join (select * from camera_io where camera_id = #{cameraId}) io on io.name = t.name ")
List<CameraIO> cameraIOs (@Param("cameraId") Integer cameraId);
}

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

@ -1,15 +1,25 @@
package com.zhehekeji.web.pojo.camera;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class CameraIOPtz {
@NotNull(message = "cameraId不能为空")
@ApiModelProperty("cameraId")
private Integer cameraId;
@NotNull(message = "球机IO id不能为空")
@ApiModelProperty("cameraIOId")
private Integer cameraIOId;
@NotEmpty(message = "O指令名称不能为空")
@ApiModelProperty("PLC IO指令名称")
private String name;
@ApiModelProperty(" 0 位置 1对焦 2倍数 3光圈")
private Integer type;
}

@ -7,12 +7,6 @@ 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;
}

@ -4,17 +4,17 @@ 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.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.entity.CameraIO;
import com.zhehekeji.web.entity.CameraIOConfig;
import com.zhehekeji.web.lib.PtzControlModule;
import com.zhehekeji.web.mapper.CameraIOConfigMapper;
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.CameraConfigSearchReq;
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;
@ -38,6 +38,8 @@ public class CameraService {
private StreetMapper streetMapper;
@Resource
private CameraIOMapper ioMapper;
@Resource
private CameraIOConfigMapper configMapper;
@Value("${cameraPassword}")
private String cameraPassword;
@ -46,75 +48,162 @@ public class CameraService {
@Value("${cameraUser}")
private String cameraUser;
public Integer add(Camera camera){
public Integer add(Camera camera) {
camera.setUser(cameraUser);
camera.setPassword(cameraPassword);
camera.setPort(cameraPort);
camera.setUpdateTime(LocalDateTime.now());
try {
cameraMapper.insert(camera);
}catch (DuplicateKeyException e){
Assert.isTrue(false,"rtsp地址已存在");
} catch (DuplicateKeyException e) {
Assert.isTrue(false, "rtsp地址已存在");
}
return camera.getId();
}
public void edit(Camera camera){
public void edit(Camera camera) {
camera.setUpdateTime(LocalDateTime.now());
camera.setPtzId(null);
try {
cameraMapper.updateById(camera);
}catch (DuplicateKeyException e){
Assert.isTrue(false,"rtsp地址已存在");
} catch (DuplicateKeyException e) {
Assert.isTrue(false, "rtsp地址已存在");
}
}
public void del(Integer id){
public void del(Integer id) {
Integer count = streetMapper.checkCamera(id);
Assert.isTrue(count == null || count == 0,"球机已被绑定");
Assert.isTrue(count == null || count == 0, "球机已被绑定");
cameraMapper.deleteById(id);
}
public PageInfo<Camera> cameras(StreetSearch streetSearch){
PageHelper.startPage(streetSearch.getPageNum(),streetSearch.getPageSize());
public PageInfo<Camera> cameras(StreetSearch streetSearch) {
PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize());
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0));
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();
/**
* IO
*
* @param file
* @throws IOException
*/
public void importExcel(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), IOImport.class, new IOImportListener(configMapper)).sheet().doRead();
}
public Integer addIO(CameraIO cameraIO){
cameraIO.setUpdateTime(LocalDateTime.now());
cameraIO.setPtzId(0);
ioMapper.insert(cameraIO);
return cameraIO.getId();
public Integer addConfig(CameraIOConfig config) {
config.setUpdateTime(LocalDateTime.now());
try {
configMapper.insert(config);
} catch (DuplicateKeyException e) {
Assert.isTrue(false, "配置已存在");
}
return config.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);
/**
*
*
* @param req
* @return
*/
public PageInfo<CameraIOConfig> configPageInfo(CameraConfigSearchReq req) {
PageHelper.startPage(req.getPage(), req.getSize());
List<CameraIOConfig> configs = configMapper.selectByMap(new HashMap<>(0));
return new PageInfo<>(configs);
}
/**
* config
*
* @param config
*/
public void editConfig(CameraIOConfig config) {
Assert.notNull(config.getName(), "名称不能为空");
config.setUpdateTime(LocalDateTime.now());
try {
configMapper.updateById(config);
} catch (DuplicateKeyException e) {
Assert.isTrue(false, "配置已存在");
}
}
public void editIO(CameraIO cameraIO){
public void delConfig(Integer id) {
configMapper.deleteById(id);
}
/**
* io
* @param cameraId
* @return
*/
public List<CameraIO> ioList(Integer cameraId) {
List<CameraIO> list = ioMapper.cameraIOs(cameraId);
return list;
}
public void editIO(CameraIO cameraIO) {
cameraIO.setUpdateTime(LocalDateTime.now());
ioMapper.updateById(cameraIO);
}
public void delIO(Integer id){
ioMapper.deleteById(id);
/**
*
* synchronized ptzId
* @param IOId
* @param cameraId
*/
public synchronized Integer ptz(Integer IOId, Integer cameraId, String name,Integer type) {
Camera camera = cameraMapper.selectById(cameraId);
Assert.notNull(camera, "球机不存在");
Integer cameraPtzId = camera.getPtzId() == null ? 0 : camera.getPtzId();
CameraIO cameraIO = null;
Integer ptzId = cameraPtzId++;
if (IOId == null || IOId == 0) {
//新增
cameraIO = new CameraIO();
cameraIO.setCameraId(cameraId);
cameraIO.setUpdateTime(LocalDateTime.now());
cameraIO.setName(name);
cameraIO.setPtzId(ptzId);
conver(cameraIO,type);
ioMapper.insert(cameraIO);
} else {
//修改
cameraIO = ioMapper.selectById(IOId);
Assert.notNull(cameraIO, "IO不存在");
cameraIO.setPtzId(ptzId);
cameraIO.setUpdateTime(LocalDateTime.now());
conver(cameraIO,type);
ioMapper.updateById(cameraIO);
}
camera.setPtzId(ptzId);
cameraMapper.updateById(camera);
PtzControlModule.ptz(IOId, cameraIO.getName(), cameraId);
log.info("设置 预置点 球机ID:{},预置点ID:{}", cameraId, ptzId);
return cameraIO.getId();
}
public void ptz(Integer IOId,Integer cameraId){
CameraIO cameraIO = ioMapper.selectById(IOId);
Assert.notNull(cameraIO,"IO不存在");
PtzControlModule.ptz(IOId,cameraIO.getName(),cameraId);
log.info("设置 预置点 球机ID:{},预置点ID:{}",cameraId, IOId);
public Integer getPtzId(Integer ioId){
CameraIO cameraIO = ioMapper.selectById(ioId);
Assert.notNull(cameraIO,"IO配置不存在");
return cameraIO.getPtzId();
}
private void conver(CameraIO cameraIO,Integer type){
if(type == 0){
cameraIO.setPosition("OK");
}else if(type == 1){
cameraIO.setFocusing("OK");
}else if(type == 2){
cameraIO.setMultiple("OK");
}else if(type == 3){
cameraIO.setAperture("OK");
}
}
}

@ -2,14 +2,14 @@ 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.entity.CameraIOConfig;
import com.zhehekeji.web.mapper.CameraIOConfigMapper;
import com.zhehekeji.web.pojo.camera.IOImport;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@ -18,29 +18,25 @@ public class IOImportListener extends AnalysisEventListener<IOImport> {
private static Integer LENGTH = 5000;
private CameraIOMapper cameraIOMapper;
private Integer cameraId;
private CameraIOConfigMapper configMapper;
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));
public IOImportListener(CameraIOConfigMapper configMapper){
this.configMapper = configMapper;
List<CameraIOConfig> cameraIOS = configMapper.selectByMap(new HashMap<>(0));
if(cameraIOS.size() >0){
this.names = cameraIOS.stream().map(CameraIO::getName).collect(Collectors.toList());
this.names = cameraIOS.stream().map(CameraIOConfig::getName).collect(Collectors.toList());
}
}
private List<CameraIO> stocks = new ArrayList<>(LENGTH);
private List<CameraIOConfig> stocks = new ArrayList<>(LENGTH);
@Override
public void invoke(IOImport ioImport, AnalysisContext analysisContext) {
if(!names.contains(ioImport.getName())){
CameraIO cameraIO = new CameraIO();
CameraIOConfig cameraIO = new CameraIOConfig();
cameraIO.setName(ioImport.getName());
cameraIO.setCameraId(cameraId);
cameraIO.setUpdateTime(LocalDateTime.now());
stocks.add(cameraIO);
if(stocks.size() > LENGTH){
@ -54,12 +50,12 @@ public class IOImportListener extends AnalysisEventListener<IOImport> {
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
save(stocks);
log.info("导入球机IO");
log.info("导入球机IO配置");
}
private void save(List<CameraIO> stocks) {
private void save(List<CameraIOConfig> stocks) {
if(stocks.size() > 0){
cameraIOMapper.batchInsert(stocks);
configMapper.batchInsert(stocks);
}
}
}

@ -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.CameraIOConfigMapper">
<insert id="batchInsert" parameterType="java.util.List">
insert into camera_io_config(
name,update_time
) values
<foreach collection="list" item="item" separator=",">
(#{item.name},#{item.updateTime})
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save