diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtWorkTicketController.java b/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtWorkTicketController.java index 04f5f4b28..71f932352 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtWorkTicketController.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtWorkTicketController.java @@ -5,6 +5,7 @@ import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; import com.zhgd.xmgl.modules.rt.entity.vo.CountRtWorkTicketVo; import com.zhgd.xmgl.modules.rt.service.IRtWorkTicketService; +import com.zhgd.xmgl.modules.video.entity.VideoItem; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -129,4 +130,14 @@ public class RtWorkTicketController { public Result countRtWorkTicket(@ApiIgnore @RequestParam HashMap paramMap) { return Result.success(rtWorkTicketService.countRtWorkTicket(paramMap)); } + + @ApiOperation(value = "列表查询查询监控点预览取流URL列表(海康)", notes = "列表查询查询监控点预览取流URL列表(海康)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "rtWorkTicketId", value = "榕图-工作票id", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = false, dataType = "String"), + }) + @GetMapping(value = "/queryPlayUrlFromHikvision") + public Result> queryPlayUrlFromHikvision(@ApiIgnore @RequestBody HashMap paramMap) { + return Result.success(rtWorkTicketService.queryPlayUrlFromHikvision(paramMap)); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java index 9a3f5f5ed..4da4e3e30 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; import com.zhgd.xmgl.modules.rt.entity.vo.CountRtWorkTicketVo; +import com.zhgd.xmgl.modules.video.entity.VideoItem; import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; @@ -27,4 +28,6 @@ public interface RtWorkTicketMapper extends BaseMapper { List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); CountRtWorkTicketVo countRtWorkTicket(HashMap paramMap); + + List selectProjectVideoList(HashMap paramMap); } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml index e71095eb2..5171bf3ac 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml @@ -35,4 +35,18 @@ from rt_work_ticket where project_sn = #{projectSn}) t + + diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtWorkTicketService.java b/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtWorkTicketService.java index 7794efafb..ac7714073 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtWorkTicketService.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtWorkTicketService.java @@ -4,6 +4,7 @@ import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.zhgd.xmgl.modules.rt.entity.vo.CountRtWorkTicketVo; +import com.zhgd.xmgl.modules.video.entity.VideoItem; import java.util.HashMap; import java.util.List; @@ -27,4 +28,6 @@ public interface IRtWorkTicketService extends IService { void delete(HashMap map); CountRtWorkTicketVo countRtWorkTicket(HashMap paramMap); + + List queryPlayUrlFromHikvision(HashMap paramMap); } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java index 913eda51a..776edf31d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java @@ -10,7 +10,9 @@ 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.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import com.zhgd.xmgl.modules.project.mapper.ProjectVideoConfigMapper; import com.zhgd.xmgl.modules.rt.entity.RtRiskSecurityLibraryType; import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; @@ -21,15 +23,20 @@ import com.zhgd.xmgl.modules.rt.mapper.*; import com.zhgd.xmgl.modules.rt.service.IRtWorkTicketService; import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper; +import com.zhgd.xmgl.modules.video.service.IVideoItemService; +import com.zhgd.xmgl.modules.video.service.impl.VideoItemServiceImpl; +import com.zhgd.xmgl.util.HikVideoUtil; import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.RefUtil; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.concurrent.Future; import java.util.function.Function; import java.util.stream.Collectors; @@ -55,7 +62,9 @@ public class RtWorkTicketServiceImpl extends ServiceImpl paramMap) { return baseMapper.countRtWorkTicket(paramMap); } + + @Override + public List queryPlayUrlFromHikvision(HashMap paramMap) { + ProjectVideoConfig videoConfig = videoItemService.getEnableProjectVideoConfigByProjectSn(paramMap); + if (videoConfig == null) { + return null; + } + List videoList = baseMapper.selectProjectVideoList(paramMap); + for (VideoItem videoItem : videoList) { + if (StringUtils.isNotEmpty(videoItem.getSerialNumber())) { + String url = HikVideoUtil.callPostApiGetPreviewURL(videoItem.getSerialNumber(), "hls", null, videoConfig.getAccount(), + videoConfig.getPassword(), videoConfig.getAppId(), videoConfig.getAppSecret()); + videoItem.setPlayUrl(url); + } + } + return videoList; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/entity/VideoItem.java b/src/main/java/com/zhgd/xmgl/modules/video/entity/VideoItem.java index 0997324ad..56029033f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/entity/VideoItem.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/entity/VideoItem.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; -import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -187,4 +186,7 @@ public class VideoItem implements Serializable { @ApiModelProperty(value = "报警总数") private java.lang.Integer alarmCount; + @TableField(exist = false) + @ApiModelProperty(value = "海康视频播放url(m3u8)") + private java.lang.String playUrl; } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java index 3855b5ae0..f7ed2d4e4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java @@ -546,7 +546,7 @@ public class VideoItemServiceImpl extends ServiceImpl map) { + public ProjectVideoConfig getEnableProjectVideoConfigByProjectSn(Map map) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ProjectVideoConfig::getProjectSn, MapUtils.getString(map, "projectSn")) .eq(ProjectVideoConfig::getIsEnable, 1); diff --git a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java index c3e7fe36d..ac9c15d42 100644 --- a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java +++ b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java @@ -277,6 +277,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/xmgl/rtTool/updateRtToolStatus").permitAll() .antMatchers("/xmgl/rtWorkTicket/countRtWorkTicket").permitAll() .antMatchers("/xmgl/rtWorkTicket/page").permitAll() + .antMatchers("/xmgl/rtWorkTicket/queryPlayUrlFromHikvision").permitAll() .antMatchers(HttpMethod.OPTIONS, "/**").anonymous() .anyRequest().authenticated() // 剩下所有的验证都需要验证 .and() diff --git a/src/main/java/com/zhgd/xmgl/task/GantryCraneTask.java b/src/main/java/com/zhgd/xmgl/task/GantryCraneTask.java new file mode 100644 index 000000000..722115903 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/GantryCraneTask.java @@ -0,0 +1,148 @@ +package com.zhgd.xmgl.task; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zhgd.jeecg.common.util.pass.HttpUtils; +import com.zhgd.xmgl.modules.bigdevice.entity.GantryCrane; +import com.zhgd.xmgl.modules.bigdevice.entity.GantryCraneCurrentData; +import com.zhgd.xmgl.modules.bigdevice.mapper.GantryCraneCurrentDataMapper; +import com.zhgd.xmgl.modules.bigdevice.mapper.GantryCraneMapper; +import com.zhgd.xmgl.task.dto.GantryCraneCurrentDataDto; +import lombok.extern.slf4j.Slf4j; +import net.javacrumbs.shedlock.core.SchedulerLock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.HashMap; +import java.util.Objects; + +/** + * 龙门吊定时任务 + */ +@Slf4j +@Component +public class GantryCraneTask { + @Autowired + GantryCraneCurrentDataMapper gantryCraneCurrentDataMapper; + @Autowired + GantryCraneMapper gantryCraneMapper; + + /** + * 定时获取实时数据 + */ + @SchedulerLock(name = "getGantryCraneTaskData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5) + @Scheduled(cron = "0 5 * * * ?") + public void getGantryCraneTaskData() { + log.info("getGantryCraneTaskData任务执行"); + HashMap pMap = new HashMap<>(); + pMap.put("uuid", ""); + pMap.put("time", ""); + pMap.put("interval", ""); + String rs = HttpUtils.postJson("", pMap); + String uuid = null; + GantryCrane gc = gantryCraneMapper.selectOne(new LambdaQueryWrapper() + .eq(GantryCrane::getDevSn, uuid)); + if (gc == null) { + // + } + GantryCraneCurrentDataDto dto = new GantryCraneCurrentDataDto(); + GantryCraneCurrentData entity = new GantryCraneCurrentData(); + entity.setDevSn(uuid); + entity.setProjectSn(gc.getProjectSn()); + entity.setReciveTime(new Date()); + entity.setRunTime(null); + entity.setWindSpeed(String.valueOf(dto.getWind1())); + entity.setWindSpeedState(getWindSpeedState(dto.getAL1bit5())); + entity.setAngleXAxis(null); + entity.setAngleYAxis(null); + entity.setLargeCraneRange(String.valueOf(dto.getDistance7())); + entity.setLargeCraneSpeed(String.valueOf(dto.getSpeed1())); + entity.setSmallCraneRange(null); + entity.setSmallCraneSpeed(String.valueOf(dto.getSpeed1())); + entity.setSecondSmallCraneRange(null); + entity.setSecondSmallCraneSpeed(String.valueOf(dto.getSpeed2())); + entity.setSmallCraneMainHookLoad(String.valueOf(dto.getNeiweight1())); + entity.setSmallCraneMainHookHeight(String.valueOf(dto.getDistance5())); + entity.setSmallCraneAuxiliaryHookLoad(String.valueOf(dto.getDistance6())); + entity.setSmallCraneAuxiliaryHookHeight(null); + entity.setSecondSmallCraneMainHookLoad(String.valueOf(dto.getNeiweight2())); + entity.setSecondSmallCraneMainHookHeight(String.valueOf(dto.getDistance6())); + entity.setSecondSmallCraneAuxiliaryHookLoad(null); + entity.setSecondSmallCraneAuxiliaryHookHeight(null); + entity.setMainHookCurrent(null); + entity.setMainHookVoltage(null); + entity.setSecondMainHookCurrent(null); + entity.setSecondMainHookVoltage(null); + entity.setSmallCraneRangeState(null); + entity.setSecondSmallCraneRangeState(null); + entity.setLargeCraneDistanceState(null); + entity.setMainHookWeightState(null); + entity.setSecondMainHookWeightState(null); + entity.setAuxiliaryHookWeightState(null); + entity.setSecondAuxiliaryHookWeightState(null); + entity.setMainHookHeightState(null); + entity.setSecondMainHookHeightState(null); + entity.setAuxiliaryHookHeightState(null); + entity.setSecondAuxiliaryHookHeightState(null); + entity.setAngleXState(null); + entity.setAngleYState(null); + entity.setGatedState(null); + entity.setAntiWindAndNonslipState(null); + entity.setCableReelStatus(null); + entity.setLargeCarSafeStatus(null); + entity.setLargeCarRunStatus(null); + entity.setSmallCarRunStatus(null); + entity.setSecondSmallCarRunStatus(null); + entity.setMasterHookRunStatus(getMasterHookRunStatus(dto)); + entity.setSecondMasterHookRunStatus(getSecondMasterHookRunStatus(dto)); + entity.setSubHookRunStatus(null); + entity.setSecondSubHookRunStatus(null); + entity.setDriverName(null); + entity.setDriverIdCard(null); + entity.setTotalDay(String.valueOf(dto.getCumulativeWorkingTime())); + entity.setTotalTimes(String.valueOf(dto.getCumulativeWorkingTime())); + entity.setPowerOnDay(String.valueOf(dto.getWorkTime())); + entity.setPowerOnTimes(String.valueOf(dto.getWorkTime())); + //gantryCraneCurrentDataMapper.insert(entity); + } + + private Integer getSecondMasterHookRunStatus(GantryCraneCurrentDataDto dto) { + //小车2主钩运行状态 0:停止 1:上升 2:下降 3:故障 + if (Objects.equals(dto.getOP1bit6(), 0) || Objects.equals(dto.getOP1bit7(), 0)) { + return 0; + } else if (Objects.equals(dto.getOP1bit6(), 1)) { + return 1; + } else if (Objects.equals(dto.getOP1bit7(), 1)) { + return 2; + } + return null; + } + + private Integer getMasterHookRunStatus(GantryCraneCurrentDataDto dto) { + //主钩运行状态 0:停止 1:上升 2:下降 3:故障 + if (Objects.equals(dto.getOP1bit0(), 0) || Objects.equals(dto.getOP1bit1(), 0)) { + return 0; + } else if (Objects.equals(dto.getOP1bit0(), 1)) { + return 1; + } else if (Objects.equals(dto.getOP1bit1(), 1)) { + return 2; + } + return null; + } + + private Integer getWindSpeedState(String al1bit5) { + if (StrUtil.isBlank(al1bit5)) { + return null; + } + switch (al1bit5) { + case "0": + return 0; + case "1": + return 2; + } + return null; + } + +} diff --git a/src/main/java/com/zhgd/xmgl/task/dto/GantryCraneCurrentDataDto.java b/src/main/java/com/zhgd/xmgl/task/dto/GantryCraneCurrentDataDto.java new file mode 100644 index 000000000..ef444ee8c --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/dto/GantryCraneCurrentDataDto.java @@ -0,0 +1,116 @@ +package com.zhgd.xmgl.task.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class GantryCraneCurrentDataDto { + @JsonProperty("DevID") + private String devID; + @JsonProperty("DevType") + private String devType; + @JsonProperty("WorkTime") + private Double workTime; + @JsonProperty("CumulativeWorkingTime") + private Double cumulativeWorkingTime; + @JsonProperty("OperatingCycleNumber") + private Long operatingCycleNumber; + @JsonProperty("Neiweight1") + private Long neiweight1; + @JsonProperty("Neiweight2") + private Long neiweight2; + @JsonProperty("Neiweight5") + private Long neiweight5; + @JsonProperty("Distance5") + private Double distance5; + @JsonProperty("Distance6") + private Double distance6; + @JsonProperty("Distance7") + private Long distance7; + @JsonProperty("Distance10") + private Double distance10; + @JsonProperty("Distance11") + private Double distance11; + @JsonProperty("Distance12") + private Double distance12; + @JsonProperty("Distance13") + private Long distance13; + @JsonProperty("Distance14") + private Long distance14; + @JsonProperty("Wind1") + private Long wind1; + @JsonProperty("Wind2") + private Long wind2; + @JsonProperty("Speed1") + private Long speed1; + @JsonProperty("Speed2") + private Long speed2; + @JsonProperty("BRbit0") + private String bRbit0; + @JsonProperty("BRbit1") + private String bRbit1; + @JsonProperty("BRbit2") + private String bRbit2; + @JsonProperty("BRbit3") + private String bRbit3; + @JsonProperty("LI1bit0") + private String lI1bit0; + @JsonProperty("LI1bit1") + private String lI1bit1; + @JsonProperty("LI1bit2") + private String lI1bit2; + @JsonProperty("LI1bit3") + private String lI1bit3; + @JsonProperty("LI1bit8") + private String lI1bit8; + @JsonProperty("LI1bit10") + private String lI1bit10; + @JsonProperty("LI1bit12") + private String lI1bit12; + @JsonProperty("LI1bit13") + private String lI1bit13; + @JsonProperty("LI2bit0") + private String lI2bit0; + @JsonProperty("LI2bit3") + private String lI2bit3; + @JsonProperty("LI2bit4") + private String lI2bit4; + @JsonProperty("LI2bit5") + private String lI2bit5; + @JsonProperty("AL1bit0") + private String aL1bit0; + @JsonProperty("AL1bit1") + private String aL1bit1; + @JsonProperty("AL1bit4") + private String aL1bit4; + @JsonProperty("AL1bit5") + private String aL1bit5; + @JsonProperty("AL1bit12") + private String aL1bit12; + @JsonProperty("AL1bit13") + private String aL1bit13; + @JsonProperty("AL2bit0") + private String aL2bit0; + @JsonProperty("OP1bit0") + private String oP1bit0; + @JsonProperty("OP1bit1") + private String oP1bit1; + @JsonProperty("OP1bit6") + private String oP1bit6; + @JsonProperty("OP1bit7") + private String oP1bit7; + @JsonProperty("OP2bit0") + private String oP2bit0; + @JsonProperty("OP2bit1") + private String oP2bit1; + @JsonProperty("OP2bit6") + private String oP2bit6; + @JsonProperty("OP2bit7") + private String oP2bit7; + @JsonProperty("OP3bit0") + private String oP3bit0; + @JsonProperty("OP3bit1") + private String oP3bit1; + + +}