Jelajahi Sumber

联调接口,对接口进行完善

wangxiaofei 3 bulan lalu
induk
melakukan
e2e9eac12b
30 mengubah file dengan 1444 tambahan dan 510 penghapusan
  1. 4 1
      taphole-admin/src/main/resources/application.yml
  2. 1 0
      taphole-common/src/main/java/com/sckj/common/mapper/setting/DictDataMapper.java
  3. 81 81
      taphole-device/src/main/java/com/sckj/device/controller/TCameraController.java
  4. 23 0
      taphole-device/src/main/java/com/sckj/device/dto/CameraInfo.java
  5. 24 0
      taphole-device/src/main/java/com/sckj/device/dto/CameraParamInfo.java
  6. 82 82
      taphole-device/src/main/java/com/sckj/device/entity/TCamera.java
  7. 12 13
      taphole-device/src/main/java/com/sckj/device/mapper/TCameraMapper.java
  8. 289 286
      taphole-device/src/main/java/com/sckj/device/service/impl/TCameraServiceImpl.java
  9. 1 1
      taphole-device/src/main/java/com/sckj/device/validate/TCameraUpdateDTO.java
  10. 4 1
      taphole-device/src/main/java/com/sckj/device/vo/CameraDTO.java
  11. 81 0
      taphole-iron/src/main/java/com/sckj/iron/controller/TCameraController.java
  12. 58 34
      taphole-iron/src/main/java/com/sckj/iron/controller/TIronVisualScreenController.java
  13. 23 0
      taphole-iron/src/main/java/com/sckj/iron/dto/CameraInfo.java
  14. 24 0
      taphole-iron/src/main/java/com/sckj/iron/dto/CameraParamInfo.java
  15. 30 0
      taphole-iron/src/main/java/com/sckj/iron/dto/DictDTO.java
  16. 13 0
      taphole-iron/src/main/java/com/sckj/iron/dto/DictDataDTO.java
  17. 3 0
      taphole-iron/src/main/java/com/sckj/iron/dto/IronParamDTO.java
  18. 7 0
      taphole-iron/src/main/java/com/sckj/iron/dto/RealtimeData.java
  19. 60 0
      taphole-iron/src/main/java/com/sckj/iron/dto/TL2DataDTO.java
  20. 39 0
      taphole-iron/src/main/java/com/sckj/iron/dto/TableDataInfo.java
  21. 22 0
      taphole-iron/src/main/java/com/sckj/iron/dto/TrendRequest.java
  22. 81 0
      taphole-iron/src/main/java/com/sckj/iron/entity/TCamera.java
  23. 20 0
      taphole-iron/src/main/java/com/sckj/iron/entity/TL2Material.java
  24. 14 0
      taphole-iron/src/main/java/com/sckj/iron/mapper/TCameraMapper.java
  25. 27 0
      taphole-iron/src/main/java/com/sckj/iron/mapper/TL2DataMapper.java
  26. 292 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TCameraServiceImpl.java
  27. 35 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronDictServiceImpl.java
  28. 30 11
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TL2DataServiceImpl.java
  29. 11 0
      taphole-iron/src/main/java/com/sckj/iron/validate/TIronDataSearchScreenValidate.java
  30. 53 0
      taphole-iron/src/main/resources/mapper/TL2DataMapper.xml

+ 4 - 1
taphole-admin/src/main/resources/application.yml

@@ -39,6 +39,9 @@ spring:
         max-active: 100 # 连接池最大连接数(使用负数表示没有限制,默认8)
         max-idle: 20    # 连接池中的最大空闲连接(默认8)
         min-idle: 0     # 连接池中的最小空闲连接(默认0)
+  jackson:
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
 
 # Mybatis-plus配置
 mybatis-plus:
@@ -60,4 +63,4 @@ sa-token:
   is-share: false         # 多人同登账号共用token
   token-style: random-64  # token生成的风格
   is-print: false         # 打印版本字符画
-  is-log: false           # 是否输出操作日志
+  is-log: false           # 是否输出操作日志

+ 1 - 0
taphole-common/src/main/java/com/sckj/common/mapper/setting/DictDataMapper.java

@@ -9,4 +9,5 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface DictDataMapper extends IBaseMapper<DictData> {
+
 }

+ 81 - 81
taphole-device/src/main/java/com/sckj/device/controller/TCameraController.java

@@ -1,81 +1,81 @@
-package com.sckj.device.controller;
-
-import com.sckj.common.aop.Log;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.core.PageResult;
-import com.sckj.common.validate.commons.IdValidate;
-import com.sckj.common.validate.commons.PageValidate;
-import com.sckj.common.validator.annotation.IDMust;
-import com.sckj.device.service.impl.TCameraServiceImpl;
-import com.sckj.device.validate.TCameraCreateValidate;
-import com.sckj.device.validate.TCameraSearchValidate;
-import com.sckj.device.validate.TCameraUpdateValidate;
-import com.sckj.device.vo.TCameraDetailVo;
-import com.sckj.device.vo.TCameraListedVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("api/cameraDevice")
-@Api(tags = "摄像头管理")
-public class TCameraController {
-
-    @Resource
-    TCameraServiceImpl iTCameraService;
-
-    @GetMapping("/list")
-    @ApiOperation(value="摄像头列表")
-    public AjaxResult<PageResult<TCameraListedVo>> list(@Validated PageValidate pageValidate,
-                                                     @Validated TCameraSearchValidate searchValidate) {
-        PageResult<TCameraListedVo> list = iTCameraService.list(pageValidate, searchValidate);
-        return AjaxResult.success(list);
-    }
-
-    @GetMapping("/detail")
-    @ApiOperation(value="摄像头详情")
-    public AjaxResult<TCameraDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
-        TCameraDetailVo detail = iTCameraService.detail(id);
-        return AjaxResult.success(detail);
-    }
-
-    @Log(title = "摄像头新增")
-    @PostMapping("/add")
-    @ApiOperation(value="摄像头新增")
-    public AjaxResult<Object> add(@Validated @RequestBody TCameraCreateValidate createValidate) {
-        if (iTCameraService.add(createValidate) == 0){
-            return AjaxResult.failed("摄像头新增失败");
-        }
-        return AjaxResult.success();
-    }
-
-    @Log(title = "摄像头编辑")
-    @PostMapping("/edit")
-    @ApiOperation(value="摄像头编辑")
-    public AjaxResult<Object> edit(@Validated @RequestBody TCameraUpdateValidate updateValidate) {
-        if (iTCameraService.edit(updateValidate) == 0){
-            return AjaxResult.failed("摄像头编辑失败");
-        }
-        return AjaxResult.success();
-    }
-
-    @Log(title = "摄像头删除")
-    @PostMapping("/del")
-    @ApiOperation(value="摄像头删除")
-    public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
-        iTCameraService.del(idValidate.getId());
-        return AjaxResult.success();
-    }
-
-    @Log(title = "摄像头批量删除")
-    @PostMapping("/del_ex")
-    @ApiOperation(value="摄像头批量删除")
-    public AjaxResult<Object> del_ex(@RequestBody List<Long> ids) {
-        return iTCameraService.del_ex(ids);
-    }
-
-}
+//package com.sckj.device.controller;
+//
+//import com.sckj.common.aop.Log;
+//import com.sckj.common.core.AjaxResult;
+//import com.sckj.common.core.PageResult;
+//import com.sckj.common.validate.commons.IdValidate;
+//import com.sckj.common.validate.commons.PageValidate;
+//import com.sckj.common.validator.annotation.IDMust;
+//import com.sckj.device.service.impl.TCameraServiceImpl;
+//import com.sckj.device.validate.TCameraCreateValidate;
+//import com.sckj.device.validate.TCameraSearchValidate;
+//import com.sckj.device.validate.TCameraUpdateValidate;
+//import com.sckj.device.vo.TCameraDetailVo;
+//import com.sckj.device.vo.TCameraListedVo;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.annotation.Resource;
+//import java.util.List;
+//
+//@RestController
+//@RequestMapping("api/cameraDevice")
+//@Api(tags = "摄像头管理")
+//public class TCameraController {
+//
+//    @Resource
+//    TCameraServiceImpl iTCameraService;
+//
+//    @GetMapping("/list")
+//    @ApiOperation(value="摄像头列表")
+//    public AjaxResult<PageResult<TCameraListedVo>> list(@Validated PageValidate pageValidate,
+//                                                     @Validated TCameraSearchValidate searchValidate) {
+//        PageResult<TCameraListedVo> list = iTCameraService.list(pageValidate, searchValidate);
+//        return AjaxResult.success(list);
+//    }
+//
+//    @GetMapping("/detail")
+//    @ApiOperation(value="摄像头详情")
+//    public AjaxResult<TCameraDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
+//        TCameraDetailVo detail = iTCameraService.detail(id);
+//        return AjaxResult.success(detail);
+//    }
+//
+//    @Log(title = "摄像头新增")
+//    @PostMapping("/add")
+//    @ApiOperation(value="摄像头新增")
+//    public AjaxResult<Object> add(@Validated @RequestBody TCameraCreateValidate createValidate) {
+//        if (iTCameraService.add(createValidate) == 0){
+//            return AjaxResult.failed("摄像头新增失败");
+//        }
+//        return AjaxResult.success();
+//    }
+//
+//    @Log(title = "摄像头编辑")
+//    @PostMapping("/edit")
+//    @ApiOperation(value="摄像头编辑")
+//    public AjaxResult<Object> edit(@Validated @RequestBody TCameraUpdateValidate updateValidate) {
+//        if (iTCameraService.edit(updateValidate) == 0){
+//            return AjaxResult.failed("摄像头编辑失败");
+//        }
+//        return AjaxResult.success();
+//    }
+//
+//    @Log(title = "摄像头删除")
+//    @PostMapping("/del")
+//    @ApiOperation(value="摄像头删除")
+//    public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
+//        iTCameraService.del(idValidate.getId());
+//        return AjaxResult.success();
+//    }
+//
+//    @Log(title = "摄像头批量删除")
+//    @PostMapping("/del_ex")
+//    @ApiOperation(value="摄像头批量删除")
+//    public AjaxResult<Object> del_ex(@RequestBody List<Long> ids) {
+//        return iTCameraService.del_ex(ids);
+//    }
+//
+//}

+ 23 - 0
taphole-device/src/main/java/com/sckj/device/dto/CameraInfo.java

@@ -0,0 +1,23 @@
+//package com.sckj.device.dto;
+//
+//import com.sckj.device.vo.CameraDTO;
+//import io.swagger.annotations.ApiModelProperty;
+//import io.swagger.annotations.ApiOperation;
+//import lombok.Data;
+//
+//import java.util.List;
+//
+//@Data
+//@ApiOperation("摄像头信息")
+//public class CameraInfo {
+//    @ApiModelProperty("轮播列表")
+//    private List<CameraDTO> bannerList;
+//
+//    @ApiModelProperty("摄像头列表")
+//    private List<CameraDTO> cameraList;
+//
+//    @ApiModelProperty("RTC播放地址")
+//    private String rtmpUrl;
+//
+//
+//}

+ 24 - 0
taphole-device/src/main/java/com/sckj/device/dto/CameraParamInfo.java

@@ -0,0 +1,24 @@
+//package com.sckj.device.dto;
+//
+//import com.sckj.device.vo.CameraDTO;
+//import io.swagger.annotations.ApiModelProperty;
+//import io.swagger.annotations.ApiOperation;
+//import lombok.Data;
+//
+//import java.util.List;
+//
+//@Data
+//@ApiOperation("摄像头参数信息")
+//public class CameraParamInfo {
+//    @ApiModelProperty("轮播列表")
+//    private List<CameraDTO> bannerList;
+//
+//    @ApiModelProperty("正常列表")
+//    private List<CameraDTO> normalList;
+//
+//
+//    @ApiModelProperty("摄像头轮播时长参数(单位:s)")
+//    private IronParamDTO cameraPlayDuration;
+//
+//
+//}

+ 82 - 82
taphole-device/src/main/java/com/sckj/device/entity/TCamera.java

@@ -1,82 +1,82 @@
-package com.sckj.device.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Date;
-
-@Data
-@ApiModel("摄像头实体")
-@TableName("t_camera")
-public class TCamera implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "删除标志(1删除 0未删)")
-    private String delFlag;
-
-    @ApiModelProperty(value = "创建人")
-    private String createBy;
-
-    @ApiModelProperty(value = "创建时间")
-    private Date createTime;
-
-    @ApiModelProperty(value = "更新人")
-    private String updateBy;
-
-    @ApiModelProperty(value = "更新时间")
-    private Date updateTime;
-
-    @TableId(value="id", type= IdType.AUTO)
-    @ApiModelProperty(value = "")
-    private Long id;
-
-    @ApiModelProperty(value = "摄像头编号")
-    private String no;
-
-    @ApiModelProperty(value = "摄像头名称")
-    private String name;
-
-    @ApiModelProperty(value = "摄像头型号")
-    private String model;
-
-    @ApiModelProperty(value = "安装位置")
-    private String location;
-
-    @ApiModelProperty(value = "ip地址")
-    private String ip;
-
-    @ApiModelProperty(value = "端口号")
-    private String port;
-
-    @ApiModelProperty(value = "登录用户名")
-    private String account;
-
-    @ApiModelProperty(value = "登录密码")
-    private String password;
-
-    @ApiModelProperty(value = "设备启用标志(1启用 0停用)")
-    private String status;
-
-    @ApiModelProperty(value = "所属录像机id")
-    private Long vcrId;
-
-    @ApiModelProperty(value = "1-摄像头 2-NVR录像机  ")
-    private String type;
-
-    @ApiModelProperty(value = "品牌(1-海康 0-其他)")
-    private String brand;
-
-    @ApiModelProperty(value = "RTSP端口")
-    private String portRtsp;
-
-    @ApiModelProperty(value = "显示顺序")
-    private Integer sort;
-
-}
+//package com.sckj.device.entity;
+//
+//import com.baomidou.mybatisplus.annotation.IdType;
+//import com.baomidou.mybatisplus.annotation.TableId;
+//import com.baomidou.mybatisplus.annotation.TableName;
+//import io.swagger.annotations.ApiModel;
+//import io.swagger.annotations.ApiModelProperty;
+//import lombok.Data;
+//
+//import java.io.Serializable;
+//import java.util.Date;
+//import java.util.Date;
+//
+//@Data
+//@ApiModel("摄像头实体")
+//@TableName("t_camera")
+//public class TCamera implements Serializable {
+//
+//    private static final long serialVersionUID = 1L;
+//
+//    @ApiModelProperty(value = "删除标志(1删除 0未删)")
+//    private String delFlag;
+//
+//    @ApiModelProperty(value = "创建人")
+//    private String createBy;
+//
+//    @ApiModelProperty(value = "创建时间")
+//    private Date createTime;
+//
+//    @ApiModelProperty(value = "更新人")
+//    private String updateBy;
+//
+//    @ApiModelProperty(value = "更新时间")
+//    private Date updateTime;
+//
+//    @TableId(value="id", type= IdType.AUTO)
+//    @ApiModelProperty(value = "")
+//    private Long id;
+//
+//    @ApiModelProperty(value = "摄像头编号")
+//    private String no;
+//
+//    @ApiModelProperty(value = "摄像头名称")
+//    private String name;
+//
+//    @ApiModelProperty(value = "摄像头型号")
+//    private String model;
+//
+//    @ApiModelProperty(value = "安装位置")
+//    private String location;
+//
+//    @ApiModelProperty(value = "ip地址")
+//    private String ip;
+//
+//    @ApiModelProperty(value = "端口号")
+//    private String port;
+//
+//    @ApiModelProperty(value = "登录用户名")
+//    private String account;
+//
+//    @ApiModelProperty(value = "登录密码")
+//    private String password;
+//
+//    @ApiModelProperty(value = "设备启用标志(1启用 0停用)")
+//    private String status;
+//
+//    @ApiModelProperty(value = "所属录像机id")
+//    private Long vcrId;
+//
+//    @ApiModelProperty(value = "1-摄像头 2-NVR录像机  ")
+//    private String type;
+//
+//    @ApiModelProperty(value = "品牌(1-海康 0-其他)")
+//    private String brand;
+//
+//    @ApiModelProperty(value = "RTSP端口")
+//    private String portRtsp;
+//
+//    @ApiModelProperty(value = "显示顺序")
+//    private Integer sort;
+//
+//}

+ 12 - 13
taphole-device/src/main/java/com/sckj/device/mapper/TCameraMapper.java

@@ -1,13 +1,12 @@
-package com.sckj.device.mapper;
-
-import com.sckj.common.core.basics.IBaseMapper;
-import com.sckj.device.entity.TCamera;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 摄像头Mapper
- * @author zhanghao
- */
-@Mapper
-public interface TCameraMapper extends IBaseMapper<TCamera> {
-}
+//package com.sckj.device.mapper;
+//
+//import com.sckj.common.core.basics.IBaseMapper;
+//import org.apache.ibatis.annotations.Mapper;
+//
+///**
+// * 摄像头Mapper
+// * @author zhanghao
+// */
+//@Mapper
+//public interface TCameraMapper extends IBaseMapper<TCamera> {
+//}

+ 289 - 286
taphole-device/src/main/java/com/sckj/device/service/impl/TCameraServiceImpl.java

@@ -1,286 +1,289 @@
-package com.sckj.device.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sckj.camera.manager.CameraProperties;
-import com.sckj.common.TapholeAdminThreadLocal;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.validate.commons.PageValidate;
-import com.sckj.device.validate.TCameraCreateValidate;
-import com.sckj.device.validate.TCameraUpdateDTO;
-import com.sckj.device.validate.TCameraUpdateValidate;
-import com.sckj.device.validate.TCameraSearchValidate;
-import com.sckj.device.vo.CameraDTO;
-import com.sckj.device.vo.TCameraListedVo;
-import com.sckj.device.vo.TCameraDetailVo;
-import com.sckj.common.core.PageResult;
-import com.sckj.device.entity.TCamera;
-import com.sckj.device.mapper.TCameraMapper;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.Assert;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * 摄像头实现类
- *
- * @author zhanghao
- */
-@Service
-public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
-
-    @Resource
-    TCameraMapper tCameraMapper;
-
-    /**
-     * 摄像头列表
-     *
-     * @param pageValidate   分页参数
-     * @param searchValidate 搜索参数
-     * @return PageResult<TCameraListedVo>
-     * @author zhanghao
-     */
-    public PageResult<TCameraListedVo> list(PageValidate pageValidate, TCameraSearchValidate searchValidate) {
-        Integer page = pageValidate.getPageNo();
-        Integer limit = pageValidate.getPageSize();
-
-        QueryWrapper<TCamera> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("del_flag", "1");
-        queryWrapper.orderByDesc("id");
-
-        tCameraMapper.setSearch(queryWrapper, searchValidate, new String[]{
-                "=:no:str",
-                "like:name:str",
-                "=:model:str",
-        });
-
-        IPage<TCamera> iPage = tCameraMapper.selectPage(new Page<>(page, limit), queryWrapper.eq("type", "1"));
-
-        List<TCameraListedVo> list = new LinkedList<>();
-        for (TCamera item : iPage.getRecords()) {
-            TCameraListedVo vo = new TCameraListedVo();
-            BeanUtils.copyProperties(item, vo);
-            vo.setAddress("rtsp://"+item.getAccount()+":"+item.getPassword()+"@"+item.getIp()+":"+item.getPort()+"/102");
-            list.add(vo);
-        }
-
-        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
-    }
-
-    /**
-     * 摄像头详情
-     *
-     * @param id 主键参数
-     * @return TCamera
-     * @author zhanghao
-     */
-    public TCameraDetailVo detail(Integer id) {
-        TCamera model = tCameraMapper.selectOne(
-                new QueryWrapper<TCamera>()
-                        .eq("id", id).eq("del_flag", "1")
-                        .last("limit 1"));
-
-        Assert.notNull(model, "数据不存在");
-
-        TCameraDetailVo vo = new TCameraDetailVo();
-        BeanUtils.copyProperties(model, vo);
-        return vo;
-    }
-
-    /**
-     * 摄像头新增
-     *
-     * @param createValidate 参数
-     * @author zhanghao
-     */
-    public int add(TCameraCreateValidate createValidate) {
-        TCamera model = new TCamera();
-        if (!checkPortAndIp(createValidate.getPort(), createValidate.getIp())) {
-            return 0;
-        }
-        model.setCreateTime(new Date(System.currentTimeMillis()));
-        model.setCreateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
-        model.setUpdateTime(new Date(System.currentTimeMillis()));
-        model.setNo(createValidate.getNo());
-        model.setName(createValidate.getName());
-        model.setModel(createValidate.getModel());
-        model.setLocation(createValidate.getLocation());
-        model.setIp(createValidate.getIp());
-        model.setPort(createValidate.getPort());
-        model.setStatus(createValidate.getStatus());
-        model.setVcrId(createValidate.getVcrId());
-        model.setType(createValidate.getType());
-        return tCameraMapper.insert(model);
-    }
-
-    /**
-     * 摄像头编辑
-     *
-     * @param updateValidate 参数
-     * @author zhanghao
-     */
-    public int edit(TCameraUpdateValidate updateValidate) {
-        TCamera model = tCameraMapper.selectOne(
-                new QueryWrapper<TCamera>()
-                        .eq("id", updateValidate.getId())
-                        .last("limit 1"));
-
-        Assert.notNull(model, "数据不存在!");
-
-        if (!checkPortAndIp(updateValidate.getPort(), updateValidate.getIp())) {
-            return 0;
-        }
-
-        model.setUpdateTime(new Date(System.currentTimeMillis()));
-        model.setUpdateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
-        model.setNo(updateValidate.getNo());
-        model.setName(updateValidate.getName());
-        model.setModel(updateValidate.getModel());
-        model.setLocation(updateValidate.getLocation());
-        model.setIp(updateValidate.getIp());
-        model.setPort(updateValidate.getPort());
-        model.setStatus(updateValidate.getStatus());
-        model.setVcrId(updateValidate.getVcrId());
-        return tCameraMapper.updateById(model);
-    }
-
-    public boolean checkPortAndIp(String port, String ip) {
-        if (Integer.parseInt(port) > 65535 && Integer.parseInt(port) < 0) {
-            return false;
-        }
-        String IP_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
-        Pattern pattern = Pattern.compile(IP_PATTERN);
-        Matcher matcher = pattern.matcher(ip);
-        if (!matcher.matches()) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 摄像头删除
-     *
-     * @param id 主键ID
-     * @author zhanghao
-     */
-    public void del(Integer id) {
-        TCamera model = tCameraMapper.selectOne(
-                new QueryWrapper<TCamera>()
-                        .eq("id", id)
-                        .last("limit 1"));
-
-        Assert.notNull(model, "数据不存在!");
-
-        model.setDelFlag("0");
-
-        tCameraMapper.updateById(model);
-    }
-
-    /**
-     * 摄像头批量删除
-     *
-     * @param ids 主键数组
-     * @author zhanghao
-     */
-    public AjaxResult<Object> del_ex(List<Long> ids) {
-        List<TCamera> models = tCameraMapper.selectList(
-                new QueryWrapper<TCamera>()
-                        .in("id", ids));
-
-        if (CollectionUtils.isEmpty(models)){
-            return AjaxResult.failed("数据不存在");
-        }
-        TCamera model = new TCamera();
-        model.setDelFlag("0");
-        tCameraMapper.update(model, new QueryWrapper<TCamera>().in("id", ids));
-        return AjaxResult.success();
-    }
-
-    @Resource
-    private CameraProperties cameraProperties;
-
-
-    public Map<String, Object> getCameraInfo() {
-        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
-        Map<String, Object> map = new HashMap<>();
-        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
-            CameraDTO dto = new CameraDTO();
-            BeanUtils.copyProperties(item, dto);
-            String channelNumberStr = 1 + "02"; //新通道(2012年之后设备,02代表子码流)
-            String rtspUrl = "rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
-            dto.setRtspUrl(rtspUrl);
-            return Stream.of(dto);
-        }).collect(Collectors.toList());
-        map.put("cameraList", collect);
-
-        List<CameraDTO> bannerList = new ArrayList<>();
-        for (CameraDTO cameraDTO : collect) {
-            if ("2".equals(cameraDTO.getStatus())) {
-                bannerList.add(cameraDTO);
-            }
-        }
-        map.put("bannerList", bannerList);
-        map.put("rtmpUrl", "http://" + cameraProperties.getRtmp().getWebrtchost());
-        return map;
-    }
-
-    public Map<String, Object> getCameraParamInfo() {
-        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
-        Map<String, Object> map = new HashMap<>();
-        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
-            CameraDTO dto = new CameraDTO();
-            BeanUtils.copyProperties(item, dto);
-            return Stream.of(dto);
-        }).collect(Collectors.toList());
-
-        List<CameraDTO> normalList = new ArrayList<>();
-        List<CameraDTO> bannerList = new ArrayList<>();
-
-        for (CameraDTO cameraDTO : collect) {
-            if ("1".equals(cameraDTO.getStatus())) {
-                normalList.add(cameraDTO);
-            }
-            if ("2".equals(cameraDTO.getStatus())) {
-                bannerList.add(cameraDTO);
-            }
-        }
-        map.put("normalList", normalList);
-        map.put("bannerList", bannerList);
-        return map;
-    }
-
-
-    @Transactional
-    public void updateBatchs(List<TCameraUpdateDTO> cameraList) {
-        for (TCameraUpdateDTO camera : cameraList) {
-            TCamera queryData = getById(camera.getId());
-            if (ObjectUtils.isEmpty(queryData)) {
-                throw new OperateException(String.format("传入的ID不存在:%s", camera.getId()));
-            }
-
-            LambdaUpdateWrapper<TCamera> wrapper = new LambdaUpdateWrapper<>();
-            wrapper.eq(TCamera::getId, camera.getId());
-            if (ObjectUtils.isNotEmpty(camera.getStatus())) {
-                wrapper.set(TCamera::getStatus, camera.getStatus());
-            }
-            if (camera.getSort() != null) {
-                wrapper.set(TCamera::getSort, camera.getSort());
-            }
-            update(wrapper);
-        }
-    }
-
-}
+//package com.sckj.device.service.impl;
+//
+//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.sckj.camera.manager.CameraProperties;
+//import com.sckj.common.TapholeAdminThreadLocal;
+//import com.sckj.common.core.AjaxResult;
+//import com.sckj.common.exception.OperateException;
+//import com.sckj.common.validate.commons.PageValidate;
+//import com.sckj.device.dto.CameraInfo;
+//import com.sckj.device.dto.CameraParamInfo;
+//import com.sckj.device.validate.TCameraCreateValidate;
+//import com.sckj.device.validate.TCameraUpdateDTO;
+//import com.sckj.device.validate.TCameraUpdateValidate;
+//import com.sckj.device.validate.TCameraSearchValidate;
+//import com.sckj.device.vo.CameraDTO;
+//import com.sckj.device.vo.TCameraListedVo;
+//import com.sckj.device.vo.TCameraDetailVo;
+//import com.sckj.common.core.PageResult;
+//import com.sckj.device.entity.TCamera;
+//import com.sckj.device.mapper.TCameraMapper;
+//import org.apache.commons.lang3.ObjectUtils;
+//import org.springframework.beans.BeanUtils;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//import org.springframework.util.Assert;
+//import org.springframework.util.CollectionUtils;
+//
+//import javax.annotation.Resource;
+//import java.util.*;
+//import java.util.regex.Matcher;
+//import java.util.regex.Pattern;
+//import java.util.stream.Collectors;
+//import java.util.stream.Stream;
+//
+///**
+// * 摄像头实现类
+// *
+// * @author zhanghao
+// */
+//@Service
+//public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
+//
+//    @Resource
+//    TCameraMapper tCameraMapper;
+//
+//    /**
+//     * 摄像头列表
+//     *
+//     * @param pageValidate   分页参数
+//     * @param searchValidate 搜索参数
+//     * @return PageResult<TCameraListedVo>
+//     * @author zhanghao
+//     */
+//    public PageResult<TCameraListedVo> list(PageValidate pageValidate, TCameraSearchValidate searchValidate) {
+//        Integer page = pageValidate.getPageNo();
+//        Integer limit = pageValidate.getPageSize();
+//
+//        QueryWrapper<TCamera> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.eq("del_flag", "1");
+//        queryWrapper.orderByDesc("id");
+//
+//        tCameraMapper.setSearch(queryWrapper, searchValidate, new String[]{
+//                "=:no:str",
+//                "like:name:str",
+//                "=:model:str",
+//        });
+//
+//        IPage<TCamera> iPage = tCameraMapper.selectPage(new Page<>(page, limit), queryWrapper.eq("type", "1"));
+//
+//        List<TCameraListedVo> list = new LinkedList<>();
+//        for (TCamera item : iPage.getRecords()) {
+//            TCameraListedVo vo = new TCameraListedVo();
+//            BeanUtils.copyProperties(item, vo);
+//            vo.setAddress("rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPort() + "/102");
+//            list.add(vo);
+//        }
+//
+//        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
+//    }
+//
+//    /**
+//     * 摄像头详情
+//     *
+//     * @param id 主键参数
+//     * @return TCamera
+//     * @author zhanghao
+//     */
+//    public TCameraDetailVo detail(Integer id) {
+//        TCamera model = tCameraMapper.selectOne(
+//                new QueryWrapper<TCamera>()
+//                        .eq("id", id).eq("del_flag", "1")
+//                        .last("limit 1"));
+//
+//        Assert.notNull(model, "数据不存在");
+//
+//        TCameraDetailVo vo = new TCameraDetailVo();
+//        BeanUtils.copyProperties(model, vo);
+//        return vo;
+//    }
+//
+//    /**
+//     * 摄像头新增
+//     *
+//     * @param createValidate 参数
+//     * @author zhanghao
+//     */
+//    public int add(TCameraCreateValidate createValidate) {
+//        TCamera model = new TCamera();
+//        if (!checkPortAndIp(createValidate.getPort(), createValidate.getIp())) {
+//            return 0;
+//        }
+//        model.setCreateTime(new Date(System.currentTimeMillis()));
+//        model.setCreateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
+//        model.setUpdateTime(new Date(System.currentTimeMillis()));
+//        model.setNo(createValidate.getNo());
+//        model.setName(createValidate.getName());
+//        model.setModel(createValidate.getModel());
+//        model.setLocation(createValidate.getLocation());
+//        model.setIp(createValidate.getIp());
+//        model.setPort(createValidate.getPort());
+//        model.setStatus(createValidate.getStatus());
+//        model.setVcrId(createValidate.getVcrId());
+//        model.setType(createValidate.getType());
+//        return tCameraMapper.insert(model);
+//    }
+//
+//    /**
+//     * 摄像头编辑
+//     *
+//     * @param updateValidate 参数
+//     * @author zhanghao
+//     */
+//    public int edit(TCameraUpdateValidate updateValidate) {
+//        TCamera model = tCameraMapper.selectOne(
+//                new QueryWrapper<TCamera>()
+//                        .eq("id", updateValidate.getId())
+//                        .last("limit 1"));
+//
+//        Assert.notNull(model, "数据不存在!");
+//
+//        if (!checkPortAndIp(updateValidate.getPort(), updateValidate.getIp())) {
+//            return 0;
+//        }
+//
+//        model.setUpdateTime(new Date(System.currentTimeMillis()));
+//        model.setUpdateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
+//        model.setNo(updateValidate.getNo());
+//        model.setName(updateValidate.getName());
+//        model.setModel(updateValidate.getModel());
+//        model.setLocation(updateValidate.getLocation());
+//        model.setIp(updateValidate.getIp());
+//        model.setPort(updateValidate.getPort());
+//        model.setStatus(updateValidate.getStatus());
+//        model.setVcrId(updateValidate.getVcrId());
+//        return tCameraMapper.updateById(model);
+//    }
+//
+//    public boolean checkPortAndIp(String port, String ip) {
+//        if (Integer.parseInt(port) > 65535 && Integer.parseInt(port) < 0) {
+//            return false;
+//        }
+//        String IP_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
+//        Pattern pattern = Pattern.compile(IP_PATTERN);
+//        Matcher matcher = pattern.matcher(ip);
+//        if (!matcher.matches()) {
+//            return false;
+//        }
+//        return true;
+//    }
+//
+//    /**
+//     * 摄像头删除
+//     *
+//     * @param id 主键ID
+//     * @author zhanghao
+//     */
+//    public void del(Integer id) {
+//        TCamera model = tCameraMapper.selectOne(
+//                new QueryWrapper<TCamera>()
+//                        .eq("id", id)
+//                        .last("limit 1"));
+//
+//        Assert.notNull(model, "数据不存在!");
+//
+//        model.setDelFlag("0");
+//
+//        tCameraMapper.updateById(model);
+//    }
+//
+//    /**
+//     * 摄像头批量删除
+//     *
+//     * @param ids 主键数组
+//     * @author zhanghao
+//     */
+//    public AjaxResult<Object> del_ex(List<Long> ids) {
+//        List<TCamera> models = tCameraMapper.selectList(
+//                new QueryWrapper<TCamera>()
+//                        .in("id", ids));
+//
+//        if (CollectionUtils.isEmpty(models)) {
+//            return AjaxResult.failed("数据不存在");
+//        }
+//        TCamera model = new TCamera();
+//        model.setDelFlag("0");
+//        tCameraMapper.update(model, new QueryWrapper<TCamera>().in("id", ids));
+//        return AjaxResult.success();
+//    }
+//
+//    @Resource
+//    private CameraProperties cameraProperties;
+//
+//
+//    public CameraInfo getCameraInfo() {
+//        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
+//        CameraInfo cameraParamInfo = new CameraInfo();
+//        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
+//            CameraDTO dto = new CameraDTO();
+//            BeanUtils.copyProperties(item, dto);
+//            String channelNumberStr = 1 + "02"; //新通道(2012年之后设备,02代表子码流)
+//            String rtspUrl = "rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
+//            dto.setRtspUrl(rtspUrl);
+//            return Stream.of(dto);
+//        }).collect(Collectors.toList());
+//        cameraParamInfo.setCameraList(collect);
+//
+//        List<CameraDTO> bannerList = new ArrayList<>();
+//        for (CameraDTO cameraDTO : collect) {
+//            if ("2".equals(cameraDTO.getStatus())) {
+//                bannerList.add(cameraDTO);
+//            }
+//        }
+//        cameraParamInfo.setBannerList(collect);
+//        cameraParamInfo.setRtmpUrl("http://" + cameraProperties.getRtmp().getWebrtchost());
+////        map.put("rtmpUrl", "http://" + cameraProperties.getRtmp().getWebrtchost());
+//        return cameraParamInfo;
+//    }
+//
+//    public CameraParamInfo getCameraParamInfo() {
+//        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
+//        CameraParamInfo map = new CameraParamInfo();
+//        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
+//            CameraDTO dto = new CameraDTO();
+//            BeanUtils.copyProperties(item, dto);
+//            return Stream.of(dto);
+//        }).collect(Collectors.toList());
+//
+//        List<CameraDTO> normalList = new ArrayList<>();
+//        List<CameraDTO> bannerList = new ArrayList<>();
+//
+//        for (CameraDTO cameraDTO : collect) {
+//            if ("1".equals(cameraDTO.getStatus())) {
+//                normalList.add(cameraDTO);
+//            }
+//            if ("2".equals(cameraDTO.getStatus())) {
+//                bannerList.add(cameraDTO);
+//            }
+//        }
+//        map.setNormalList(normalList);
+//        map.setBannerList(bannerList);
+//        return map;
+//    }
+//
+//
+//    @Transactional
+//    public void updateBatchs(List<TCameraUpdateDTO> cameraList) {
+//        for (TCameraUpdateDTO camera : cameraList) {
+//            TCamera queryData = getById(camera.getId());
+//            if (ObjectUtils.isEmpty(queryData)) {
+//                throw new OperateException(String.format("传入的ID不存在:%s", camera.getId()));
+//            }
+//
+//            LambdaUpdateWrapper<TCamera> wrapper = new LambdaUpdateWrapper<>();
+//            wrapper.eq(TCamera::getId, camera.getId());
+//            if (ObjectUtils.isNotEmpty(camera.getStatus())) {
+//                wrapper.set(TCamera::getStatus, camera.getStatus());
+//            }
+//            if (camera.getSort() != null) {
+//                wrapper.set(TCamera::getSort, camera.getSort());
+//            }
+//            update(wrapper);
+//        }
+//    }
+//
+//}

+ 1 - 1
taphole-device/src/main/java/com/sckj/device/validate/TCameraUpdateDTO.java

@@ -22,7 +22,7 @@ public class TCameraUpdateDTO implements Serializable {
     private Long id;
 
     @NotNull(message = "status参数缺失")
-    @ApiModelProperty(value = "设备启用标志(1启用 0停用)")
+    @ApiModelProperty(value = "设备启用标志(1启用 0停用 2轮播)")
     private String status;
 
     @NotNull(message = "显示顺序")

+ 4 - 1
taphole-device/src/main/java/com/sckj/device/vo/CameraDTO.java

@@ -10,7 +10,7 @@ public class CameraDTO {
     @ApiModelProperty(value = "id")
     private Long id;
 
-    @ApiModelProperty(value = "设备启用标志(1启用 0停用)")
+    @ApiModelProperty(value = "设备启用标志(1启用 0停用 2轮播)")
     private String status;
 
     @ApiModelProperty(value = "显示顺序")
@@ -18,4 +18,7 @@ public class CameraDTO {
 
     @ApiModelProperty(value = "视频播放RTSP URL")
     private String rtspUrl;
+
+    @ApiModelProperty(value = "摄像头名称")
+    private String name;
 }

+ 81 - 0
taphole-iron/src/main/java/com/sckj/iron/controller/TCameraController.java

@@ -0,0 +1,81 @@
+package com.sckj.iron.controller;
+
+import com.sckj.common.aop.Log;
+import com.sckj.common.core.AjaxResult;
+import com.sckj.common.core.PageResult;
+import com.sckj.common.validate.commons.IdValidate;
+import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.common.validator.annotation.IDMust;
+import com.sckj.device.validate.TCameraCreateValidate;
+import com.sckj.device.validate.TCameraSearchValidate;
+import com.sckj.device.validate.TCameraUpdateValidate;
+import com.sckj.device.vo.TCameraDetailVo;
+import com.sckj.device.vo.TCameraListedVo;
+import com.sckj.iron.service.impl.TCameraServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("api/cameraDevice")
+@Api(tags = "摄像头管理")
+public class TCameraController {
+
+    @Resource
+    TCameraServiceImpl iTCameraService;
+
+    @GetMapping("/list")
+    @ApiOperation(value="摄像头列表")
+    public AjaxResult<PageResult<TCameraListedVo>> list(@Validated PageValidate pageValidate,
+                                                     @Validated TCameraSearchValidate searchValidate) {
+        PageResult<TCameraListedVo> list = iTCameraService.list(pageValidate, searchValidate);
+        return AjaxResult.success(list);
+    }
+
+    @GetMapping("/detail")
+    @ApiOperation(value="摄像头详情")
+    public AjaxResult<TCameraDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
+        TCameraDetailVo detail = iTCameraService.detail(id);
+        return AjaxResult.success(detail);
+    }
+
+    @Log(title = "摄像头新增")
+    @PostMapping("/add")
+    @ApiOperation(value="摄像头新增")
+    public AjaxResult<Object> add(@Validated @RequestBody TCameraCreateValidate createValidate) {
+        if (iTCameraService.add(createValidate) == 0){
+            return AjaxResult.failed("摄像头新增失败");
+        }
+        return AjaxResult.success();
+    }
+
+    @Log(title = "摄像头编辑")
+    @PostMapping("/edit")
+    @ApiOperation(value="摄像头编辑")
+    public AjaxResult<Object> edit(@Validated @RequestBody TCameraUpdateValidate updateValidate) {
+        if (iTCameraService.edit(updateValidate) == 0){
+            return AjaxResult.failed("摄像头编辑失败");
+        }
+        return AjaxResult.success();
+    }
+
+    @Log(title = "摄像头删除")
+    @PostMapping("/del")
+    @ApiOperation(value="摄像头删除")
+    public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
+        iTCameraService.del(idValidate.getId());
+        return AjaxResult.success();
+    }
+
+    @Log(title = "摄像头批量删除")
+    @PostMapping("/del_ex")
+    @ApiOperation(value="摄像头批量删除")
+    public AjaxResult<Object> del_ex(@RequestBody List<Long> ids) {
+        return iTCameraService.del_ex(ids);
+    }
+
+}

+ 58 - 34
taphole-iron/src/main/java/com/sckj/iron/controller/TIronVisualScreenController.java

@@ -1,27 +1,26 @@
 package com.sckj.iron.controller;
 
 import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.sckj.common.aop.Log;
 import com.sckj.common.aop.NotLogin;
 import com.sckj.common.aop.NotPower;
 import com.sckj.common.core.AjaxResult;
 import com.sckj.common.util.RedisUtils;
-import com.sckj.common.validate.commons.PageValidate;
-import com.sckj.device.service.impl.TCameraServiceImpl;
 import com.sckj.device.validate.TCameraUpdateDTO;
-import com.sckj.iron.dto.IronParamDTO;
+import com.sckj.iron.dto.*;
 import com.sckj.iron.entity.TIronData;
 import com.sckj.iron.entity.TIronParam;
-import com.sckj.iron.service.impl.IronLoginServiceImpl;
-import com.sckj.iron.service.impl.TIronDataServiceImpl;
-import com.sckj.iron.service.impl.TIronParamServiceImpl;
+import com.sckj.iron.entity.TL2Data;
+import com.sckj.iron.service.impl.*;
 import com.sckj.iron.socketio.DeviceEventListener;
 import com.sckj.iron.validate.IronLoginValidate;
 import com.sckj.iron.validate.TIronDataSearchScreenValidate;
 import com.sckj.iron.vo.IronLoginVo;
+import com.sckj.opc.dto.L2Data;
+import com.sckj.opc.service.OPCDataServiceImpl;
 import com.sckj.warn.dto.WarnDTO;
 import com.sckj.warn.service.impl.TExceptionLogServiceImpl;
-import com.sckj.warn.validate.TExceptionLogSearchValidate;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.ObjectUtils;
@@ -37,7 +36,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -55,7 +53,7 @@ public class TIronVisualScreenController {
     IronLoginServiceImpl ironLoginService;
 
     @Resource
-    TIronDataServiceImpl tl2DataService;
+    TIronDataServiceImpl tIronDataService;
 
     @Resource
     private TCameraServiceImpl cameraService;
@@ -66,12 +64,21 @@ public class TIronVisualScreenController {
     @Resource
     TExceptionLogServiceImpl exceptionLogService;
 
+    @Resource
+    TIronDictServiceImpl ironDictService;
+
+    @Resource
+    TL2DataServiceImpl tl2DataService;
+
+    @Resource
+    OPCDataServiceImpl opcDataService;
+
     private static final int DATA_COUNT = 6;
 
     @NotLogin
     @PostMapping("/login")
     @ApiOperation(value = "登录系统")
-    public AjaxResult<IronLoginVo> login(@Validated() @RequestBody IronLoginValidate loginsValidate) {
+    public AjaxResult<IronLoginVo> login(@Validated @RequestBody IronLoginValidate loginsValidate) {
         IronLoginVo vo = ironLoginService.login(loginsValidate);
         return AjaxResult.success(vo);
     }
@@ -92,9 +99,9 @@ public class TIronVisualScreenController {
     @NotLogin
     @PostMapping("/getIronElement")
     @ApiOperation(value = "获取铁水成分数据")
-    public AjaxResult getIronElement() {
-        List vo = RedisUtils.getFixedElement(DeviceEventListener.IRON_ELEMENT, DATA_COUNT);
-        return AjaxResult.success(vo);
+    public AjaxResult<List<TL2DataDTO>> getIronElement(@RequestBody TrendRequest queryDateType) {
+        List<TL2DataDTO> tl2DataList = tl2DataService.getTrendDataByDiffDays(queryDateType);
+        return AjaxResult.success(tl2DataList);
     }
 
     /***
@@ -103,9 +110,9 @@ public class TIronVisualScreenController {
      */
     @PostMapping("/getIronSpeed")
     @ApiOperation(value = "获取铁水流速数据")
-    public AjaxResult getIronSpeed() {
-        List vo = RedisUtils.getFixedElement(DeviceEventListener.IRON_SPEED, DATA_COUNT);
-        return AjaxResult.success(vo);
+    public AjaxResult<List<TL2DataDTO>> getIronSpeed(@RequestBody TrendRequest queryDateType) {
+        List<TL2DataDTO> tl2DataList = tl2DataService.getTrendDataByDiffDays(queryDateType);
+        return AjaxResult.success(tl2DataList);
     }
 
     /***
@@ -114,9 +121,9 @@ public class TIronVisualScreenController {
      */
     @PostMapping("/getIronWeight")
     @ApiOperation(value = "获取铁流量数据")
-    public AjaxResult getIronWeight() {
-        List vo = RedisUtils.getFixedElement(DeviceEventListener.IRON_WEIGHT, DATA_COUNT);
-        return AjaxResult.success(vo);
+    public AjaxResult<List<TL2DataDTO>> getIronWeight(@RequestBody TrendRequest queryDateType) {
+        List<TL2DataDTO> tl2DataList = tl2DataService.getTrendDataByDiffDays(queryDateType);
+        return AjaxResult.success(tl2DataList);
     }
 
     /***
@@ -125,30 +132,35 @@ public class TIronVisualScreenController {
      */
     @PostMapping("/getIronTemp")
     @ApiOperation(value = "获取铁水温度数据")
-    public AjaxResult getIronTemp() {
-        List vo = RedisUtils.getFixedElement(DeviceEventListener.IRON_TEMP, DATA_COUNT);
-        return AjaxResult.success(vo);
+    public AjaxResult<List<TL2DataDTO>> getIronTemp(@RequestBody TrendRequest queryDateType) {
+        List<TL2DataDTO> tl2DataList = tl2DataService.getTrendDataByDiffDays(queryDateType);
+        return AjaxResult.success(tl2DataList);
     }
 
 
     @PostMapping("/getIronData")
     @ApiOperation(value = "查询出铁数据")
-    public AjaxResult queryIronData(@Validated PageValidate pageValidate, TIronDataSearchScreenValidate ironDataSearchScreenValidate) {
+    public AjaxResult<TableDataInfo<TIronData>> queryIronData(@RequestBody TIronDataSearchScreenValidate ironDataSearchScreenValidate) {
         //出铁操作
         TIronData tl2Data = new TIronData();
         BeanUtils.copyProperties(ironDataSearchScreenValidate, tl2Data);
-        PageHelper.startPage(pageValidate.getPageNo(), pageValidate.getPageSize());
-        return AjaxResult.success(tl2DataService.queryIronData(tl2Data));
+        PageHelper.startPage(ironDataSearchScreenValidate.getPageNo(), ironDataSearchScreenValidate.getPageSize());
+        List<TIronData> ironDataList = tIronDataService.queryIronData(tl2Data);
+        PageInfo pageInfo = new PageInfo(ironDataList);
+        TableDataInfo<TIronData> tableDataInfo = new TableDataInfo<>();
+        BeanUtils.copyProperties(pageInfo, tableDataInfo);
+        return AjaxResult.success(tableDataInfo);
     }
 
 
     @PostMapping("/exportIronData")
     @ApiOperation(value = "导出出铁数据")
-    public void exportIronData(TIronDataSearchScreenValidate ironDataSearchScreenValidate, HttpServletResponse response) throws IOException {
+    @Log(title = "更新出铁参数设置")
+    public void exportIronData(@RequestBody TIronDataSearchScreenValidate ironDataSearchScreenValidate, HttpServletResponse response) throws IOException {
         //出铁操作
         TIronData tl2Data = new TIronData();
         BeanUtils.copyProperties(ironDataSearchScreenValidate, tl2Data);
-        tl2DataService.exportIronData(tl2Data, response);
+        tIronDataService.exportIronData(tl2Data, response);
     }
 
     /**
@@ -158,7 +170,7 @@ public class TIronVisualScreenController {
      */
     @ApiOperation("获取摄像头播放信息")
     @PostMapping("/getCameraInfo")
-    public AjaxResult getCameraInfo() {
+    public AjaxResult<CameraInfo> getCameraInfo() {
         return AjaxResult.success(cameraService.getCameraInfo());
     }
 
@@ -169,10 +181,12 @@ public class TIronVisualScreenController {
      */
     @ApiOperation("获取摄像头参数信息")
     @PostMapping("/getCameraParamInfo")
-    public AjaxResult getCameraParamInfo() {
+    public AjaxResult<CameraParamInfo> getCameraParamInfo() {
         TIronParam tIronParam = iTIronParamService.lambdaQuery().eq(TIronParam::getParamType, "camera_param").eq(TIronParam::getParamName, "camera_play_duration").one();
-        Map<String, Object> map = cameraService.getCameraParamInfo();
-        map.put("cameraPlayDuration", tIronParam.getParamValue());
+        CameraParamInfo map = cameraService.getCameraParamInfo();
+        IronParamDTO ironParamDTO = new IronParamDTO();
+        BeanUtils.copyProperties(tIronParam, ironParamDTO);
+        map.setCameraPlayDuration(ironParamDTO);
         return AjaxResult.success(map);
     }
 
@@ -181,8 +195,10 @@ public class TIronVisualScreenController {
      *
      * @return
      */
+
     @ApiOperation("更新摄像头轮播状态、顺序")
     @PostMapping("/updateCamera")
+    @Log(title = "更新摄像头轮播状态、顺序")
     public AjaxResult updateCamera(@RequestBody List<TCameraUpdateDTO> cameraList) {
         if (ObjectUtils.isEmpty(cameraList)) {
             return AjaxResult.failed("传入数据为空!");
@@ -193,7 +209,7 @@ public class TIronVisualScreenController {
 
     @PostMapping("/getIronParams")
     @ApiOperation(value = "获取出铁参数设置:paramType=>[(出铁诊断模型参数:iron_judge),(摄像头轮播时长参数:camera_param),(趋势图轮播项:iron_trend]")
-    public AjaxResult getIronParam(String paramType) {
+    public AjaxResult<List<IronParamDTO>> getIronParam(String paramType) {
         List<TIronParam> list = iTIronParamService.lambdaQuery().eq(TIronParam::getStatus, "1")
                 .eq(TIronParam::getParamType, paramType).orderByAsc(TIronParam::getSort).list();
         List<IronParamDTO> collect = list.stream().flatMap((item) -> {
@@ -207,7 +223,7 @@ public class TIronVisualScreenController {
 
     @Log(title = "更新出铁参数设置")
     @PostMapping("/updateIronParams")
-    @ApiOperation(value = "更新出铁参数设置:paramType=>[(出铁诊断模型参数:iron_judge),(摄像头轮播时长参数:camera_param),(趋势图轮播项:iron_trend]")
+    @ApiOperation(value = "更新出铁参数设置")
     public AjaxResult<Object> updateIronParam(@RequestBody List<IronParamDTO> ironParamList) {
         if (ObjectUtils.isEmpty(ironParamList)) {
             return AjaxResult.failed("传入数据为空!");
@@ -219,10 +235,18 @@ public class TIronVisualScreenController {
 
     @PostMapping("/getWarnList")
     @ApiOperation(value = "获取报警统计")
-    public AjaxResult getWarnList() {
+    public AjaxResult<List<WarnDTO>> getWarnList() {
         List<WarnDTO> mapList = exceptionLogService.selectWarnStats();
         return AjaxResult.success(mapList);
     }
 
 
+    @PostMapping("/getDictData")
+    @ApiOperation(value = "获取字典数据(趋势下拉数据传:3)")
+    public AjaxResult<List<DictDTO>> getDictData(@RequestBody  DictDataDTO dictDataDTO) {
+        List<DictDTO> mapList = ironDictService.getDictDataByType(dictDataDTO.getTypeId());
+        return AjaxResult.success(mapList);
+    }
+
+
 }

+ 23 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/CameraInfo.java

@@ -0,0 +1,23 @@
+package com.sckj.iron.dto;
+
+import com.sckj.device.vo.CameraDTO;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiOperation("摄像头信息")
+public class CameraInfo {
+    @ApiModelProperty("轮播列表")
+    private List<CameraDTO> bannerList;
+
+    @ApiModelProperty("摄像头列表")
+    private List<CameraDTO> cameraList;
+
+    @ApiModelProperty("RTC播放地址")
+    private String rtmpUrl;
+
+
+}

+ 24 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/CameraParamInfo.java

@@ -0,0 +1,24 @@
+package com.sckj.iron.dto;
+
+import com.sckj.device.vo.CameraDTO;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiOperation("摄像头参数信息")
+public class CameraParamInfo {
+    @ApiModelProperty("轮播列表")
+    private List<CameraDTO> bannerList;
+
+    @ApiModelProperty("正常列表")
+    private List<CameraDTO> normalList;
+
+
+    @ApiModelProperty("摄像头轮播时长参数")
+    private IronParamDTO cameraPlayDuration;
+
+
+}

+ 30 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/DictDTO.java

@@ -0,0 +1,30 @@
+package com.sckj.iron.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("字典信息")
+public class DictDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("ID")
+    private Integer id;
+
+    @ApiModelProperty("字典名称")
+    private String name;
+
+    @ApiModelProperty("字典值")
+    private String value;
+
+//    @ApiModelProperty("备注")
+//    private String remark;
+
+}

+ 13 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/DictDataDTO.java

@@ -0,0 +1,13 @@
+package com.sckj.iron.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+@Data
+@ApiOperation("字典类型信息")
+public class DictDataDTO {
+
+    @ApiModelProperty(value = "字典类型ID", required = true)
+    private Integer typeId;
+}

+ 3 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/IronParamDTO.java

@@ -29,5 +29,8 @@ public class IronParamDTO implements Serializable {
     @ApiModelProperty(value = "参数说明")
     private String paramDesc;
 
+    @ApiModelProperty(value = "参数类型")
+    private String paramType;
+
 
 }

+ 7 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/RealtimeData.java

@@ -1,5 +1,7 @@
 package com.sckj.iron.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
 import lombok.Data;
 import org.springframework.stereotype.Component;
 
@@ -10,16 +12,21 @@ import org.springframework.stereotype.Component;
  */
 @Data
 @Component
+@ApiOperation("实时数据信息")
 public class RealtimeData {
 
 //    private String key;
 
+    @ApiModelProperty("数据值")
     private Object value;
 
+    @ApiModelProperty("单位")
     private String unit;
 
+    @ApiModelProperty("说明")
     private String desc;
 
+    @ApiModelProperty("时间")
     private String time;
 
 }

+ 60 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/TL2DataDTO.java

@@ -0,0 +1,60 @@
+package com.sckj.iron.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class TL2DataDTO {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "创建时间")
+    @ExcelIgnore
+    private String createTime;
+
+
+    @ApiModelProperty(value = "铁水平均温度")
+    @ExcelIgnore
+    private String avgTemp;
+
+
+    @ApiModelProperty(value = "铁流量")
+    @ExcelIgnore
+    private String ironWeight;
+
+
+    @ApiModelProperty(value = "铁水流速")
+    @ExcelIgnore
+    private String ironSpeed;
+
+    @ExcelIgnore
+    @ApiModelProperty(value = "硅")
+    private String elementSi;
+
+    @ExcelIgnore
+    @ApiModelProperty(value = "硫")
+    private String elementS;
+
+
+//    @ApiModelProperty(value = "碳")
+//    @ExcelIgnore
+//    private String elementC;
+//
+//
+//    @ExcelIgnore
+//    @ApiModelProperty(value = "锰")
+//    private String elementMn;
+//
+//    @ExcelIgnore
+//    @ApiModelProperty(value = "磷")
+//    private String elementP;
+//
+//
+//    @ExcelIgnore
+//    @ApiModelProperty(value = "钛")
+//    private String elementTi;
+}

+ 39 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/TableDataInfo.java

@@ -0,0 +1,39 @@
+package com.sckj.iron.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 表格分页数据对象
+ * 
+ * @author ruoyi
+ */
+@Data
+@ApiOperation("分页信息")
+public class TableDataInfo<T> implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 总记录数 */
+    @ApiModelProperty("总记录数")
+    private long total;
+
+    /** 列表数据 */
+    @ApiModelProperty("数据列表")
+    private List<T> list;
+
+    @ApiModelProperty("起始页")
+    private int pageNum;
+
+    @ApiModelProperty("页数")
+    private int pageSize;
+
+    @ApiModelProperty("总页数")
+    private int pages;
+
+
+}

+ 22 - 0
taphole-iron/src/main/java/com/sckj/iron/dto/TrendRequest.java

@@ -0,0 +1,22 @@
+package com.sckj.iron.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+/***
+ * 实时数据
+ * 铁水温度、铁水流速、铁水成分、铁水流量
+ *
+ */
+@Data
+@Component
+@ApiOperation("趋势请求信息")
+public class TrendRequest {
+
+    @ApiModelProperty(value = "查询日期类型",required = true)
+    private Integer queryDateType;
+
+
+}

+ 81 - 0
taphole-iron/src/main/java/com/sckj/iron/entity/TCamera.java

@@ -0,0 +1,81 @@
+package com.sckj.iron.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ApiModel("摄像头实体")
+@TableName("t_camera")
+public class TCamera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "删除标志(1删除 0未删)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @TableId(value="id", type= IdType.AUTO)
+    @ApiModelProperty(value = "")
+    private Long id;
+
+    @ApiModelProperty(value = "摄像头编号")
+    private String no;
+
+    @ApiModelProperty(value = "摄像头名称")
+    private String name;
+
+    @ApiModelProperty(value = "摄像头型号")
+    private String model;
+
+    @ApiModelProperty(value = "安装位置")
+    private String location;
+
+    @ApiModelProperty(value = "ip地址")
+    private String ip;
+
+    @ApiModelProperty(value = "端口号")
+    private String port;
+
+    @ApiModelProperty(value = "登录用户名")
+    private String account;
+
+    @ApiModelProperty(value = "登录密码")
+    private String password;
+
+    @ApiModelProperty(value = "设备启用标志(1启用 0停用)")
+    private String status;
+
+    @ApiModelProperty(value = "所属录像机id")
+    private Long vcrId;
+
+    @ApiModelProperty(value = "1-摄像头 2-NVR录像机  ")
+    private String type;
+
+    @ApiModelProperty(value = "品牌(1-海康 0-其他)")
+    private String brand;
+
+    @ApiModelProperty(value = "RTSP端口")
+    private String portRtsp;
+
+    @ApiModelProperty(value = "显示顺序")
+    private Integer sort;
+
+}

+ 20 - 0
taphole-iron/src/main/java/com/sckj/iron/entity/TL2Material.java

@@ -62,6 +62,26 @@ public class TL2Material implements Serializable {
     @ColumnWidth(25)
     private String dryWeight;
 
+    @ApiModelProperty(value = "矿石装入量")
+    @ExcelProperty("矿石装入量")
+    @ColumnWidth(25)
+    private String oreWeight;
+
+    @ApiModelProperty(value = "焦炭装入量")
+    @ExcelProperty("焦炭装入量")
+    @ColumnWidth(25)
+    private String cokeWeight;
+
+    @ApiModelProperty(value = "副原料装入量")
+    @ExcelProperty("副原料装入量")
+    @ColumnWidth(25)
+    private String asstmaterialWeight;
+
+    @ApiModelProperty(value = "综合品味")
+    @ExcelProperty("综合品味")
+    @ColumnWidth(25)
+    private String compositeTaste;
+
 
     public void toDataStream(DataOutputStream dos) throws Exception {
         dos.writeLong(tapholeId);

+ 14 - 0
taphole-iron/src/main/java/com/sckj/iron/mapper/TCameraMapper.java

@@ -0,0 +1,14 @@
+package com.sckj.iron.mapper;
+
+import com.sckj.common.core.basics.IBaseMapper;
+import com.sckj.iron.entity.TCamera;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 摄像头Mapper
+ * @author zhanghao
+ */
+@Mapper
+public interface TCameraMapper extends IBaseMapper<TCamera> {
+
+}

+ 27 - 0
taphole-iron/src/main/java/com/sckj/iron/mapper/TL2DataMapper.java

@@ -1,14 +1,41 @@
 package com.sckj.iron.mapper;
 
 import com.sckj.common.core.basics.IBaseMapper;
+import com.sckj.iron.dto.TL2DataDTO;
 import com.sckj.iron.entity.TIronAfter;
 import com.sckj.iron.entity.TL2Data;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * 出铁后Mapper
+ *
  * @author zhanghao
  */
 @Mapper
 public interface TL2DataMapper extends IBaseMapper<TL2Data> {
+
+//    //昨天
+//    @Select("select * from t_l2_data where DATE(create_time) = CURDATE() - INTERVAL 1 DAY")
+//    List<TL2Data> getTrendDataByYesterday();
+//
+//    //今天
+//    @Select("select * from t_l2_data where DATE(create_time) = CURDATE()")
+//    List<TL2Data> getTrendDataByToday();
+//
+//    //7日内
+//    @Select("select * from t_l2_data where create_time BETWEEN CURDATE() - INTERVAL 6 DAY AND CURDATE() + INTERVAL 1 DAY")
+//    List<TL2Data> getTrendDataByWeek();
+//
+//    //30日内
+//    @Select("select * from t_l2_data where create_time BETWEEN CURDATE() - INTERVAL 29 DAY AND CURDATE() + INTERVAL 1 DAY")
+//    List<TL2Data> getTrendDataByMonth();
+
+    //diff日内
+    List<TL2DataDTO> getTrendDataByDiffDay(Integer diffDay);
+
+    List<TL2DataDTO> getTrendDataByDiffDays(Integer diffDays);
+
 }

+ 292 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TCameraServiceImpl.java

@@ -0,0 +1,292 @@
+package com.sckj.iron.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckj.camera.manager.CameraProperties;
+import com.sckj.common.TapholeAdminThreadLocal;
+import com.sckj.common.core.AjaxResult;
+import com.sckj.common.core.PageResult;
+import com.sckj.common.exception.OperateException;
+import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.device.validate.TCameraCreateValidate;
+import com.sckj.device.validate.TCameraSearchValidate;
+import com.sckj.device.validate.TCameraUpdateDTO;
+import com.sckj.device.validate.TCameraUpdateValidate;
+import com.sckj.device.vo.CameraDTO;
+import com.sckj.device.vo.TCameraDetailVo;
+import com.sckj.device.vo.TCameraListedVo;
+import com.sckj.iron.dto.CameraInfo;
+import com.sckj.iron.dto.CameraParamInfo;
+import com.sckj.iron.entity.TCamera;
+import com.sckj.iron.mapper.TCameraMapper;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * 摄像头实现类
+ *
+ * @author zhanghao
+ */
+@Service
+public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
+
+    @Resource
+    TCameraMapper tCameraMapper;
+
+    /**
+     * 摄像头列表
+     *
+     * @param pageValidate   分页参数
+     * @param searchValidate 搜索参数
+     * @return PageResult<TCameraListedVo>
+     * @author zhanghao
+     */
+    public PageResult<TCameraListedVo> list(PageValidate pageValidate, TCameraSearchValidate searchValidate) {
+        Integer page = pageValidate.getPageNo();
+        Integer limit = pageValidate.getPageSize();
+
+        QueryWrapper<TCamera> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", "1");
+        queryWrapper.orderByDesc("id");
+
+        tCameraMapper.setSearch(queryWrapper, searchValidate, new String[]{
+                "=:no:str",
+                "like:name:str",
+                "=:model:str",
+        });
+
+        IPage<TCamera> iPage = tCameraMapper.selectPage(new Page<>(page, limit), queryWrapper.eq("type", "1"));
+
+        List<TCameraListedVo> list = new LinkedList<>();
+        for (TCamera item : iPage.getRecords()) {
+            TCameraListedVo vo = new TCameraListedVo();
+            BeanUtils.copyProperties(item, vo);
+            vo.setAddress("rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPort() + "/102");
+            list.add(vo);
+        }
+
+        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
+    }
+
+    /**
+     * 摄像头详情
+     *
+     * @param id 主键参数
+     * @return TCamera
+     * @author zhanghao
+     */
+    public TCameraDetailVo detail(Integer id) {
+        TCamera model = tCameraMapper.selectOne(
+                new QueryWrapper<TCamera>()
+                        .eq("id", id).eq("del_flag", "1")
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在");
+
+        TCameraDetailVo vo = new TCameraDetailVo();
+        BeanUtils.copyProperties(model, vo);
+        return vo;
+    }
+
+    /**
+     * 摄像头新增
+     *
+     * @param createValidate 参数
+     * @author zhanghao
+     */
+    public int add(TCameraCreateValidate createValidate) {
+        TCamera model = new TCamera();
+        if (!checkPortAndIp(createValidate.getPort(), createValidate.getIp())) {
+            return 0;
+        }
+        model.setCreateTime(new Date(System.currentTimeMillis()));
+        model.setCreateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
+        model.setUpdateTime(new Date(System.currentTimeMillis()));
+        model.setNo(createValidate.getNo());
+        model.setName(createValidate.getName());
+        model.setModel(createValidate.getModel());
+        model.setLocation(createValidate.getLocation());
+        model.setIp(createValidate.getIp());
+        model.setPort(createValidate.getPort());
+        model.setStatus(createValidate.getStatus());
+        model.setVcrId(createValidate.getVcrId());
+        model.setType(createValidate.getType());
+        return tCameraMapper.insert(model);
+    }
+
+    /**
+     * 摄像头编辑
+     *
+     * @param updateValidate 参数
+     * @author zhanghao
+     */
+    public int edit(TCameraUpdateValidate updateValidate) {
+        TCamera model = tCameraMapper.selectOne(
+                new QueryWrapper<TCamera>()
+                        .eq("id", updateValidate.getId())
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在!");
+
+        if (!checkPortAndIp(updateValidate.getPort(), updateValidate.getIp())) {
+            return 0;
+        }
+
+        model.setUpdateTime(new Date(System.currentTimeMillis()));
+        model.setUpdateBy(String.valueOf(TapholeAdminThreadLocal.getAdminUsername()));
+        model.setNo(updateValidate.getNo());
+        model.setName(updateValidate.getName());
+        model.setModel(updateValidate.getModel());
+        model.setLocation(updateValidate.getLocation());
+        model.setIp(updateValidate.getIp());
+        model.setPort(updateValidate.getPort());
+        model.setStatus(updateValidate.getStatus());
+        model.setVcrId(updateValidate.getVcrId());
+        return tCameraMapper.updateById(model);
+    }
+
+    public boolean checkPortAndIp(String port, String ip) {
+        if (Integer.parseInt(port) > 65535 && Integer.parseInt(port) < 0) {
+            return false;
+        }
+        String IP_PATTERN = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
+        Pattern pattern = Pattern.compile(IP_PATTERN);
+        Matcher matcher = pattern.matcher(ip);
+        if (!matcher.matches()) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 摄像头删除
+     *
+     * @param id 主键ID
+     * @author zhanghao
+     */
+    public void del(Integer id) {
+        TCamera model = tCameraMapper.selectOne(
+                new QueryWrapper<TCamera>()
+                        .eq("id", id)
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在!");
+
+        model.setDelFlag("0");
+
+        tCameraMapper.updateById(model);
+    }
+
+    /**
+     * 摄像头批量删除
+     *
+     * @param ids 主键数组
+     * @author zhanghao
+     */
+    public AjaxResult<Object> del_ex(List<Long> ids) {
+        List<TCamera> models = tCameraMapper.selectList(
+                new QueryWrapper<TCamera>()
+                        .in("id", ids));
+
+        if (CollectionUtils.isEmpty(models)) {
+            return AjaxResult.failed("数据不存在");
+        }
+        TCamera model = new TCamera();
+        model.setDelFlag("0");
+        tCameraMapper.update(model, new QueryWrapper<TCamera>().in("id", ids));
+        return AjaxResult.success();
+    }
+
+    @Resource
+    private CameraProperties cameraProperties;
+
+
+    public CameraInfo getCameraInfo() {
+        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
+        CameraInfo cameraParamInfo = new CameraInfo();
+        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
+            CameraDTO dto = new CameraDTO();
+            BeanUtils.copyProperties(item, dto);
+            String channelNumberStr = 1 + "02"; //新通道(2012年之后设备,02代表子码流)
+            String rtspUrl = "rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPortRtsp() + "/" + channelNumberStr + "?transportmode=unicast"; //新码流
+            dto.setRtspUrl(rtspUrl);
+            return Stream.of(dto);
+        }).collect(Collectors.toList());
+        cameraParamInfo.setCameraList(collect);
+
+        List<CameraDTO> bannerList = new ArrayList<>();
+        for (CameraDTO cameraDTO : collect) {
+            if ("2".equals(cameraDTO.getStatus())) {
+                bannerList.add(cameraDTO);
+            }
+        }
+        cameraParamInfo.setBannerList(collect);
+        cameraParamInfo.setRtmpUrl("http://" + cameraProperties.getRtmp().getWebrtchost());
+//        map.put("rtmpUrl", "http://" + cameraProperties.getRtmp().getWebrtchost());
+        return cameraParamInfo;
+    }
+
+    public CameraParamInfo getCameraParamInfo() {
+        List<TCamera> cameraList = lambdaQuery().eq(TCamera::getType, "1").in(TCamera::getStatus, "1", "2").orderByAsc(TCamera::getSort).list();
+        CameraParamInfo map = new CameraParamInfo();
+        List<CameraDTO> collect = cameraList.stream().flatMap((item) -> {
+            CameraDTO dto = new CameraDTO();
+            BeanUtils.copyProperties(item, dto);
+            return Stream.of(dto);
+        }).collect(Collectors.toList());
+
+        List<CameraDTO> normalList = new ArrayList<>();
+        List<CameraDTO> bannerList = new ArrayList<>();
+
+        for (CameraDTO cameraDTO : collect) {
+            if ("1".equals(cameraDTO.getStatus())) {
+                normalList.add(cameraDTO);
+            }
+            if ("2".equals(cameraDTO.getStatus())) {
+                bannerList.add(cameraDTO);
+            }
+        }
+        map.setNormalList(normalList);
+        map.setBannerList(bannerList);
+        return map;
+    }
+
+
+    @Transactional
+    public void updateBatchs(List<TCameraUpdateDTO> cameraList) {
+        for (TCameraUpdateDTO camera : cameraList) {
+            TCamera queryData = getById(camera.getId());
+            if (ObjectUtils.isEmpty(queryData)) {
+                throw new OperateException(String.format("传入的ID不存在:%s", camera.getId()));
+            }
+
+            LambdaUpdateWrapper<TCamera> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(TCamera::getId, camera.getId());
+            if (ObjectUtils.isNotEmpty(camera.getStatus())) {
+                wrapper.set(TCamera::getStatus, camera.getStatus());
+            }
+            if (camera.getSort() != null) {
+                wrapper.set(TCamera::getSort, camera.getSort());
+            }
+            update(wrapper);
+        }
+    }
+
+}

+ 35 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronDictServiceImpl.java

@@ -0,0 +1,35 @@
+package com.sckj.iron.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.sckj.common.entity.setting.DictData;
+import com.sckj.common.mapper.setting.DictDataMapper;
+import com.sckj.iron.dto.DictDTO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+@Service
+public class TIronDictServiceImpl {
+    @Resource
+    DictDataMapper dictDataMapper;
+
+
+    public List<DictDTO> getDictDataByType(Integer typeId) {
+        QueryWrapper<DictData> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(DictData::getTypeId, typeId)
+                .eq(DictData::getStatus, "1")
+                .orderByAsc(DictData::getId);
+        List<DictData> dictTypes = dictDataMapper.selectList(queryWrapper);
+        return dictTypes.stream().flatMap((item) -> {
+            DictDTO dto = new DictDTO();
+            BeanUtils.copyProperties(item, dto);
+            return Stream.of(dto);
+        }).collect(Collectors.toList());
+    }
+
+
+}

+ 30 - 11
taphole-iron/src/main/java/com/sckj/iron/service/impl/TL2DataServiceImpl.java

@@ -9,6 +9,8 @@ import com.sckj.common.core.PageResult;
 import com.sckj.common.util.ExcelUtils;
 import com.sckj.common.util.TimeUtils;
 import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.iron.dto.TL2DataDTO;
+import com.sckj.iron.dto.TrendRequest;
 import com.sckj.iron.entity.TL2Data;
 import com.sckj.iron.mapper.TL2DataMapper;
 import com.sckj.iron.validate.TL2DataCreateValidate;
@@ -18,8 +20,10 @@ import com.sckj.iron.vo.TL2DataDetailVo;
 import com.sckj.iron.vo.TL2DataListedVo;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
+import springfox.documentation.spi.service.contexts.Defaults;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -38,18 +42,20 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
 
     @Resource
     TL2DataMapper tL2DataMapper;
+    @Autowired
+    private Defaults defaults;
 
     /**
      * 出铁数据列表
      *
-     * @author LikeAdmin
-     * @param pageValidate 分页参数
+     * @param pageValidate   分页参数
      * @param searchValidate 搜索参数
      * @return PageResult<TL2DataListedVo>
+     * @author LikeAdmin
      */
 
     public PageResult<TL2DataListedVo> list(PageValidate pageValidate, TL2DataSearchValidate searchValidate) {
-        Integer page  = pageValidate.getPageNo();
+        Integer page = pageValidate.getPageNo();
         Integer limit = pageValidate.getPageSize();
 
         QueryWrapper<TL2Data> queryWrapper = new QueryWrapper<>();
@@ -80,7 +86,7 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
         IPage<TL2Data> iPage = tL2DataMapper.selectPage(new Page<>(page, limit), queryWrapper);
 
         List<TL2DataListedVo> list = new LinkedList<>();
-        for(TL2Data item : iPage.getRecords()) {
+        for (TL2Data item : iPage.getRecords()) {
             TL2DataListedVo vo = new TL2DataListedVo();
             BeanUtils.copyProperties(item, vo);
             list.add(vo);
@@ -92,9 +98,9 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
     /**
      * 出铁数据详情
      *
-     * @author LikeAdmin
      * @param id 主键参数
      * @return TL2Data
+     * @author LikeAdmin
      */
 
     public TL2DataDetailVo detail(Integer id) {
@@ -113,8 +119,8 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
     /**
      * 出铁数据新增
      *
-     * @author LikeAdmin
      * @param createValidate 参数
+     * @author LikeAdmin
      */
 
     public void add(TL2DataCreateValidate createValidate) {
@@ -145,14 +151,14 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
     /**
      * 出铁数据编辑
      *
-     * @author LikeAdmin
      * @param updateValidate 参数
+     * @author LikeAdmin
      */
 
     public void edit(TL2DataUpdateValidate updateValidate) {
         TL2Data model = tL2DataMapper.selectOne(
                 new QueryWrapper<TL2Data>()
-                        .eq("id",  updateValidate.getId())
+                        .eq("id", updateValidate.getId())
                         .last("limit 1"));
 
         Assert.notNull(model, "数据不存在!");
@@ -183,8 +189,8 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
     /**
      * 出铁数据删除
      *
-     * @author LikeAdmin
      * @param id 主键ID
+     * @author LikeAdmin
      */
 
     public void del(Integer id) {
@@ -233,9 +239,22 @@ public class TL2DataServiceImpl extends ServiceImpl<TL2DataMapper, TL2Data> {
      * @param response
      * @throws IOException
      */
-    public void exportIronData(TL2Data tl2Data, HttpServletResponse response)  throws IOException {
+    public void exportIronData(TL2Data tl2Data, HttpServletResponse response) throws IOException {
         List<TL2Data> tl2DataList = queryIronData(tl2Data);
-        ExcelUtils.exportExcel(tl2DataList,TL2Data.class,"出铁数据","出铁数据",response);
+        ExcelUtils.exportExcel(tl2DataList, TL2Data.class, "出铁数据", "出铁数据", response);
+    }
+
+
+    public List<TL2DataDTO> getTrendDataByDiffDays(TrendRequest diffDays) {
+        switch (diffDays.getQueryDateType()) {
+            case -1:
+            case 0:
+                List<TL2DataDTO> trendDataByDiffDayList = tL2DataMapper.getTrendDataByDiffDay(diffDays.getQueryDateType());
+                return trendDataByDiffDayList;
+            default:
+                List<TL2DataDTO> trendDataByDiffDays = tL2DataMapper.getTrendDataByDiffDays(diffDays.getQueryDateType());
+                return trendDataByDiffDays;
+        }
     }
 
 

+ 11 - 0
taphole-iron/src/main/java/com/sckj/iron/validate/TIronDataSearchScreenValidate.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.DecimalMax;
+import javax.validation.constraints.DecimalMin;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -37,4 +39,13 @@ public class TIronDataSearchScreenValidate implements Serializable {
     @ApiModelProperty(value = "结束时间")
     private String ironEndtime;
 
+    // 当前分页
+    @DecimalMin(value = "1", message = "pageNo参数必须大于0的数字")
+    public Integer pageNo = 1;
+
+    // 每页条数
+    @DecimalMin(value = "1", message = "pageSize参数必须是大于0的数字")
+    @DecimalMax(value = "60", message = "pageSize参数必须是小于60的数字")
+    private Integer pageSize = 20;
+
 }

+ 53 - 0
taphole-iron/src/main/resources/mapper/TL2DataMapper.xml

@@ -0,0 +1,53 @@
+<?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.sckj.iron.mapper.TL2DataMapper">
+
+
+
+
+    <select id="getTrendDataByDiffDay" resultType="com.sckj.iron.dto.TL2DataDTO">
+        select
+        create_time createTime,
+        avg_temp avgTemp,
+        iron_weight ironWeight,
+        ROUND((iron_weight/iron_costtime),2) ironSpeed,
+        element_c elementC,
+        element_si elementSi,
+        element_mn elementMn,
+        element_ti elementTi,
+        element_p elementP,
+        element_s elementS
+        from t_l2_data
+        <where>
+            <if test="diffDay == -1">
+                create_time BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()
+            </if>
+            <if test="diffDay == 0">
+                create_time BETWEEN CURDATE() AND NOW()
+            </if>
+        </where>
+        order by create_time asc
+    </select>
+
+    <select id="getTrendDataByDiffDays" resultType="com.sckj.iron.dto.TL2DataDTO">
+        SELECT
+            DATE(create_time) createTime,
+            ROUND(AVG(avg_temp),0) avgTemp,
+            ROUND(AVG(iron_weight),2) ironWeight,
+            ROUND(AVG(iron_weight/iron_costtime),2) ironSpeed,
+            ROUND(AVG(element_c),4) elementC,
+            ROUND(AVG(element_si),4) elementSi,
+            ROUND(AVG(element_mn),4) elementMn,
+            ROUND(AVG(element_ti),4) elementTi,
+            ROUND(AVG(element_p),4) elementP,
+            ROUND(AVG(element_s),4) elementS
+        FROM
+            t_l2_data
+        WHERE
+            create_time BETWEEN CURDATE() - INTERVAL (#{diffDays}-1) DAY AND NOW();
+        GROUP BY DATE(create_time)
+        order by create_time asc
+    </select>
+
+
+</mapper>