Commit d1e7f194 authored by 刘林's avatar 刘林

Merge branch 'refs/heads/develop_tzs_bugfix' into develop_tzs_register

parents c75c8efd b3311585
...@@ -6,6 +6,7 @@ import java.text.ParseException; ...@@ -6,6 +6,7 @@ import java.text.ParseException;
import java.text.ParsePosition; import java.text.ParsePosition;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.*; import java.util.*;
/** /**
...@@ -660,10 +661,25 @@ public class DateUtils { ...@@ -660,10 +661,25 @@ public class DateUtils {
return now; return now;
} }
public static Date getDateByStr(String dateStr) {
//String dateStr = "2025-08-20T10:41:02.584+08:00";
OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateStr);
// 转换为Date对象
Date date = Date.from(offsetDateTime.toInstant());
return date;
}
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
System.out.println(DateUtils.convertDateToString(new Date(), DateUtils.CHN_DATE_PATTERN)); String dateStr = "2025-08-20T10:41:02.584+08:00";
// 解析为OffsetDateTime(包含时区信息)
OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateStr);
// 转换为Date对象
Date date = Date.from(offsetDateTime.toInstant());
System.out.println(date); // 输出对应的Date对象
// System.out.println(DateUtils.convertDateToString(new Date(), DateUtils.CHN_DATE_PATTERN));
/*System.out.println(dateTimeToDate(new Date())); /*System.out.println(dateTimeToDate(new Date()));
System.out.println(dateParse("2017-02-04 14:58:20", null)); System.out.println(dateParse("2017-02-04 14:58:20", null));
...@@ -690,10 +706,10 @@ public class DateUtils { ...@@ -690,10 +706,10 @@ public class DateUtils {
// System.out.println(secondsToTimeStr(3600)); // System.out.println(secondsToTimeStr(3600));
// System.out.println(getTimeString(dateParse("2023-09-07 16:15:15", DATE_TIME_PATTERN), dateParse("2023-09-06 " + // System.out.println(getTimeString(dateParse("2023-09-07 16:15:15", DATE_TIME_PATTERN), dateParse("2023-09-06 " +
// "16:15:15", DATE_TIME_PATTERN))); // "16:15:15", DATE_TIME_PATTERN)));
long diff = dateParse("2022-09-07 16:16:16", DATE_TIME_PATTERN).getTime() - dateParse("2023-09-06 10:15:15", // long diff = dateParse("2022-09-07 16:16:16", DATE_TIME_PATTERN).getTime() - dateParse("2023-09-06 10:15:15",
DATE_TIME_PATTERN).getTime(); // DATE_TIME_PATTERN).getTime();
System.out.println(diff/1000); // System.out.println(diff/1000);
System.out.println(secondsToTimeStr((int) diff/1000)); // System.out.println(secondsToTimeStr((int) diff/1000));
} }
/** /**
......
...@@ -8,14 +8,14 @@ import lombok.EqualsAndHashCode; ...@@ -8,14 +8,14 @@ import lombok.EqualsAndHashCode;
import java.util.Date; import java.util.Date;
/** /**
* 单位下摄像头表 * 单位下摄像头配置
* *
* @author system_generator * @author system_generator
* @date 2024-10-09 * @date 2024-10-09
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value="BaseEnterpriseVideoDto", description="单位下摄像头表") @ApiModel(value="BaseEnterpriseVideoDto", description="单位下摄像头配置表")
public class BaseEnterpriseVideoDto extends BaseDto { public class BaseEnterpriseVideoDto extends BaseDto {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
......
package com.yeejoin.amos.boot.module.common.api.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 单位下摄像头表
*
* @author system_generator
* @date 2024-10-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="BaseEnterpriseVideoNodeDto", description="单位下摄像头表")
public class BaseEnterpriseVideoNodeDto extends BaseDto {
private static final long serialVersionUID = 1L;
/**
* 使用单位名称
*/
@ApiModelProperty(value = "使用单位名称")
private String useUnitName;
/**
* 使用单位统一信用代码
*/
@ApiModelProperty(value = "使用单位统一信用代码")
private String useUnitCode;
/**
* 区域名称
*/
@ApiModelProperty(value = "区域名称")
private String regionName;
/**
* 区域代码
*/
@ApiModelProperty(value = "区域代码")
private String regionCode;
/**
* 视频名称
*/
@ApiModelProperty(value = "视频名称")
private String videoName;
/**
* 设备使用登记代码
*/
@ApiModelProperty(value = "设备使用登记代码")
private String devUseCode;
/**
* 是否删除
*/
@ApiModelProperty(value = "是否删除")
private Boolean isDelete;
/**
* 组织代码
*/
@ApiModelProperty(value = "组织代码")
private String orgCode;
/**
* 视频ID
*/
@ApiModelProperty(value = "视频ID")
private String cameraIndexCode;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private Date updatesTime;
@ApiModelProperty(value = "标识什么设种类使用的摄像头")
private String equListCode;
/**
* 视频配置表主键
*/
@ApiModelProperty(value = "视频配置表主键")
private Long videoSeq;
}
...@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode; ...@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/** /**
* 单位下摄像头表 * 单位下摄像头配置
* *
* @author system_generator * @author system_generator
* @date 2024-10-09 * @date 2024-10-09
......
package com.yeejoin.amos.boot.module.common.api.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseRelationEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 单位下摄像头表
*
* @author system_generator
* @date 2024-10-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_base_enterprise_video_node")
public class BaseEnterpriseVideoNode extends BaseRelationEntity {
private static final long serialVersionUID = 1L;
/**
* 使用单位名称
*/
@TableField("use_unit_name")
private String useUnitName;
/**
* 使用单位统一信用代码
*/
@TableField("use_unit_code")
private String useUnitCode;
/**
* 区域名称
*/
@TableField("region_name")
private String regionName;
/**
* 区域代码
*/
@TableField("region_code")
private String regionCode;
/**
* 视频名称
*/
@TableField("video_name")
private String videoName;
/**
* 设备使用登记代码
*/
@TableField("dev_use_code")
private String devUseCode;
/**
* 是否删除
*/
@TableField("is_delete")
private Boolean isDelete;
/**
* 组织代码
*/
@TableField("org_code")
private String orgCode;
/**
* 视频ID
*/
@TableField("camera_index_code")
private String cameraIndexCode;
/**
* 更新时间
*/
@TableField("updates_time")
private Date updatesTime;
/**
* 标识什么设种类使用的摄像头
*/
@TableField("equ_list_code")
private String equListCode;
/**
* 视频配置表主键
*/
@TableField(value = "video_seq")
private Long videoSeq;
}
package com.yeejoin.amos.boot.module.common.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideoNode;
/**
* 单位下摄像头表 Mapper 接口
*
* @author system_generator
* @date 2024-10-09
*/
public interface BaseEnterpriseVideoNodeMapper extends BaseMapper<BaseEnterpriseVideoNode> {
}
package com.yeejoin.amos.boot.module.common.api.service;
/**
* 单位下摄像头表接口类
*
* @author system_generator
* @date 2024-10-09
*/
public interface IBaseEnterpriseVideoNodeService {
}
...@@ -6,6 +6,8 @@ import java.text.ParseException; ...@@ -6,6 +6,8 @@ import java.text.ParseException;
import java.text.ParsePosition; import java.text.ParsePosition;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
/** /**
* @description: 时间工具类 * @description: 时间工具类
...@@ -285,6 +287,14 @@ public class DateUtils { ...@@ -285,6 +287,14 @@ public class DateUtils {
return null; return null;
} }
public static Date dateParseWithZonedDateTime(String dateTimeString) throws ParseException {
// 1. 解析原始字符串为ZonedDateTime(含时区信息)
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeString);
// 2. 定义目标格式:yyyy-MM-dd HH:mm:ss
DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = zonedDateTime.format(targetFormatter);
return dateParseWithPattern(formattedDateTime);
}
/** /**
* 将日期时间格式成只有日期的字符串(可以直接使用dateFormat,Pattern为Null进行格式化) * 将日期时间格式成只有日期的字符串(可以直接使用dateFormat,Pattern为Null进行格式化)
* *
......
<?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.yeejoin.amos.boot.module.common.api.mapper.BaseEnterpriseVideoNodeMapper">
</mapper>
package com.yeejoin.amos.boot.module.common.biz.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.boot.module.common.api.dto.BaseEnterpriseVideoNodeDto;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideoNode;
import com.yeejoin.amos.boot.module.common.api.mapper.BaseEnterpriseVideoNodeMapper;
import com.yeejoin.amos.boot.module.common.api.service.IBaseEnterpriseVideoNodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
/**
* 单位下摄像头表服务实现类
*
* @author system_generator
* @date 2024-10-09
*/
@Service
@Slf4j
public class BaseEnterpriseVideoNodeServiceImpl extends BaseService<BaseEnterpriseVideoNodeDto, BaseEnterpriseVideoNode, BaseEnterpriseVideoNodeMapper> implements IBaseEnterpriseVideoNodeService {
public Boolean saveOrUpdates(BaseEnterpriseVideoNode enterpriseVideoNode, String cameraIndexCode){
return this.saveOrUpdate(enterpriseVideoNode, new QueryWrapper<BaseEnterpriseVideoNode>().lambda().eq(BaseEnterpriseVideoNode::getCameraIndexCode, cameraIndexCode));
}
}
\ No newline at end of file
...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; ...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig; import com.hikvision.artemis.sdk.config.ArtemisConfig;
...@@ -13,12 +14,15 @@ import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto; ...@@ -13,12 +14,15 @@ import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto;
import com.yeejoin.amos.boot.biz.common.enums.CommonVideoEnum; import com.yeejoin.amos.boot.biz.common.enums.CommonVideoEnum;
import com.yeejoin.amos.boot.module.common.api.dto.BaseEnterpriseVideoDto; import com.yeejoin.amos.boot.module.common.api.dto.BaseEnterpriseVideoDto;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo; import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideoNode;
import com.yeejoin.amos.boot.module.common.api.enums.VideoIntegrationPlatformEnum; import com.yeejoin.amos.boot.module.common.api.enums.VideoIntegrationPlatformEnum;
import com.yeejoin.amos.boot.module.common.api.mapper.BaseEnterpriseVideoMapper; import com.yeejoin.amos.boot.module.common.api.mapper.BaseEnterpriseVideoMapper;
import com.yeejoin.amos.boot.module.common.api.service.IBaseEnterpriseVideoService; import com.yeejoin.amos.boot.module.common.api.service.IBaseEnterpriseVideoService;
import com.yeejoin.amos.boot.module.common.api.utils.DateUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.ConnectTimeoutException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -27,6 +31,7 @@ import org.typroject.tyboot.core.rdbms.service.BaseService; ...@@ -27,6 +31,7 @@ import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.text.ParseException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -46,13 +51,14 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -46,13 +51,14 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
private String defaultVideoUrl; private String defaultVideoUrl;
private String rootIndexCode = "root00000000"; private String rootIndexCode = "root00000000";
@Autowired
private BaseEnterpriseVideoNodeServiceImpl baseEnterpriseVideoNodeService;
public List<CommonVideoDto> getUnitVideoUrl(String useUnitCode, String regionCode) { public List<CommonVideoDto> getUnitVideoUrl(String useUnitCode, String regionCode) {
List<CommonVideoDto> result = new ArrayList<>(); List<CommonVideoDto> result = new ArrayList<>();
LambdaQueryWrapper<BaseEnterpriseVideo> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BaseEnterpriseVideo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BaseEnterpriseVideo::getUseUnitCode, useUnitCode); //wrapper.eq(BaseEnterpriseVideo::getUseUnitCode, useUnitCode);
wrapper.eq(BaseEnterpriseVideo::getIsEnabled, true); wrapper.eq(BaseEnterpriseVideo::getIsEnabled, true);
wrapper.like(StringUtils.isNotEmpty(regionCode), BaseEnterpriseVideo::getRegionCode, regionCode); //wrapper.like(StringUtils.isNotEmpty(regionCode), BaseEnterpriseVideo::getRegionCode, regionCode);
List<BaseEnterpriseVideo> videos = this.getBaseMapper().selectList(wrapper); List<BaseEnterpriseVideo> videos = this.getBaseMapper().selectList(wrapper);
if (ValidationUtil.isEmpty(videos)) { if (ValidationUtil.isEmpty(videos)) {
return result; return result;
...@@ -64,19 +70,26 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -64,19 +70,26 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
getYsVideoUrl(value, result); getYsVideoUrl(value, result);
} }
if (VideoIntegrationPlatformEnum.ISECURECENTER.getCode().equals(key)) { if (VideoIntegrationPlatformEnum.ISECURECENTER.getCode().equals(key)) {
getISecureCenterVideoUrl(value, result); value.stream().forEach(baseEnterpriseVideo -> {
LambdaQueryWrapper<BaseEnterpriseVideoNode> wrappers = new LambdaQueryWrapper<>();
wrappers.eq(BaseEnterpriseVideoNode::getVideoSeq, baseEnterpriseVideo.getSequenceNbr());
wrappers.eq(BaseEnterpriseVideoNode::getUseUnitCode, useUnitCode);
wrappers.like(StringUtils.isNotEmpty(regionCode), BaseEnterpriseVideoNode::getRegionCode, regionCode);
List<BaseEnterpriseVideoNode> videoNodes = baseEnterpriseVideoNodeService.list(wrappers);
getISecureCenterVideoUrl(videoNodes,baseEnterpriseVideo, result);
});
} }
}); });
return result; return result;
} }
private void getISecureCenterVideoUrl(List<BaseEnterpriseVideo> videos, List<CommonVideoDto> videoUrlResult) { private void getISecureCenterVideoUrl(List<BaseEnterpriseVideoNode> videoNodes,BaseEnterpriseVideo baseEnterpriseVideo,List<CommonVideoDto> videoUrlResult) {
List<CommonVideoDto> videoList = getISecureCenterCameras(videos); List<CommonVideoDto> videoList = getISecureCenterCameras(videoNodes);
if (ValidationUtil.isEmpty(videoList)) { if (ValidationUtil.isEmpty(videoList)) {
return; return;
} }
BaseEnterpriseVideo baseEnterpriseVideo = videos.get(0); // BaseEnterpriseVideo baseEnterpriseVideo = videos.get(0);
videoList.forEach(video -> { videoList.forEach(video -> {
List<CommonVideoDto> commonVideoDtos = new ArrayList<>(); List<CommonVideoDto> commonVideoDtos = new ArrayList<>();
try { try {
...@@ -246,18 +259,29 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -246,18 +259,29 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
commonVideoDtos.forEach(channelNo -> this.setDefaultChannelData(result, channelNo)); commonVideoDtos.forEach(channelNo -> this.setDefaultChannelData(result, channelNo));
} }
public List<CommonVideoDto> getISecureCenterCameras(List<BaseEnterpriseVideo> videoEquipList) { public List<CommonVideoDto> getISecureCenterCameras(List<BaseEnterpriseVideoNode> videoNodesList) {
List<BaseEnterpriseVideo> iSecureCenterVideoList = videoEquipList.stream().filter(v -> VideoIntegrationPlatformEnum.ISECURECENTER.getCode().equals(v.getPlatform())).collect(Collectors.toList()); // List<BaseEnterpriseVideo> iSecureCenterVideoList = videoEquipList.stream().filter(v -> VideoIntegrationPlatformEnum.ISECURECENTER.getCode().equals(v.getPlatform())).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(iSecureCenterVideoList)) { // if (!ValidationUtil.isEmpty(iSecureCenterVideoList)) {
// 根据iSecureCenter视频对接平台,直接获取摄像头列表 // // 根据iSecureCenter视频对接平台,直接获取摄像头列表
return getRegionCameras(iSecureCenterVideoList); // return getRegionCameras(iSecureCenterVideoList);
} // }
return null; List<CommonVideoDto> commonVideoDtos = new ArrayList<>();
videoNodesList.stream().forEach(baseEnterpriseVideoNode -> {
CommonVideoDto commonVideoDto = new CommonVideoDto();
commonVideoDto.setKey(baseEnterpriseVideoNode.getCameraIndexCode());
commonVideoDto.setLabel(baseEnterpriseVideoNode.getVideoName());
commonVideoDto.setTitle(baseEnterpriseVideoNode.getVideoName());
commonVideoDto.setParent(baseEnterpriseVideoNode.getUseUnitCode());
commonVideoDto.setUseRegistrationCode(baseEnterpriseVideoNode.getDevUseCode());
commonVideoDtos.add(commonVideoDto);
});
return commonVideoDtos;
} }
/** /**
* iSecureCenter视频对接平台,根据区域ID(企业统一信用代码唯一对应)获取摄像头列表。 * iSecureCenter视频对接平台,根据区域ID(企业统一信用代码唯一对应)获取摄像头列表。
* 现有对接一个企业只有一条数据,取第一条数据作为企业信息。 * 现有对接一个企业只有一条数据,取第一条数据作为企业信息。
*
* @param iSecureCenterVideoList 企业列表 * @param iSecureCenterVideoList 企业列表
* @return List<CommonVideoDto> * @return List<CommonVideoDto>
*/ */
...@@ -391,4 +415,176 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -391,4 +415,176 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
} }
return commonRegionList; return commonRegionList;
} }
public boolean saveOrUpdateVideos(String sequenceNbr) throws Exception {
BaseEnterpriseVideo baseEnterpriseVideo = this.getBaseMapper().selectById(sequenceNbr);
String appKey = baseEnterpriseVideo.getAppKey();
String appSecret = baseEnterpriseVideo.getAppSecret();
String deviceSerial = baseEnterpriseVideo.getDeviceSerial();
String url = "https://113.140.67.204:55443/artemis/api/resource/v1/regions/subRegions";
String videoUrl = "https://113.140.67.204:55443/artemis/api/resource/v1/regions/regionIndexCode/cameras";
//根据跟节点673f784dc4ae4cf681957386accd445c获取区域列表子节点 开始
String regionsStr = getsubRegions(appKey, appSecret, url, deviceSerial);
if (ValidationUtil.isEmpty(regionsStr)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", deviceSerial);
return false;
}
JSONObject regionsResult = JSONObject.parseObject(regionsStr);
if (regionsResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台区域列表失败,data:{}", regionsStr);
return false;
}
JSONArray regionsDataList = regionsResult.getJSONArray("data");
if (ValidationUtil.isEmpty(regionsDataList)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,regionsDataList:{}", regionsDataList);
return false;
} else {
regionsDataList.forEach(regionsData -> {
JSONObject regionDataJson = (JSONObject) regionsData;
String regionName = regionDataJson.getString("name");
String regionIndexCode = regionDataJson.getString("indexCode");
//根据区域regionIndexCode获取企业列表 开始
String unitsStr = getsubRegions(appKey, appSecret, url, regionIndexCode);
if (ValidationUtil.isEmpty(unitsStr)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", regionIndexCode);
}
JSONObject unitsResult = JSONObject.parseObject(unitsStr);
if (unitsResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台区域列表失败,data:{}", unitsStr);
}
JSONArray unitsDataList = unitsResult.getJSONArray("data");
if (ValidationUtil.isEmpty(unitsDataList)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,regionsDataList:{}", unitsDataList);
} else {
unitsDataList.forEach(unitsData -> {
JSONObject unitDataJson = (JSONObject) unitsData;
String unitNameAndCode = unitDataJson.getString("name");
String unitName = unitNameAndCode==null?"":unitNameAndCode.split("#")[0];
String unitCode = unitNameAndCode==null?"":(unitNameAndCode.contains("#")?unitNameAndCode.split("#")[1]:"");
String unitIndexCode = unitDataJson.getString("indexCode");
//根据单位unitIndexCode获取设备列表 开始
String devsStr = getsubRegions(appKey, appSecret, url, unitIndexCode);
if (ValidationUtil.isEmpty(devsStr)) {
log.error("获取iSecureCenter视频对接平台设备列表失败,deviceSerial:{}", unitIndexCode);
}
JSONObject devsResult = JSONObject.parseObject(devsStr);
if (devsResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台设备列表失败,data:{}", devsStr);
}
JSONArray devsDataList = devsResult.getJSONArray("data");
if (ValidationUtil.isEmpty(devsDataList)) {
log.error("获取iSecureCenter视频对接平台设备列表失败,regionsDataList:{}", devsDataList);
} else {
devsDataList.forEach(devsData -> {
JSONObject devDataJson = (JSONObject) devsData;
String devName = devDataJson.getString("name");
String devIndexCode = devDataJson.getString("indexCode");
String camerasStr = getCameras(appKey, appSecret, videoUrl, devIndexCode);
if (ValidationUtil.isEmpty(camerasStr)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", deviceSerial);
}
JSONObject camerasResult = JSONObject.parseObject(camerasStr);
if (camerasResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台区域列表失败,data:{}", camerasStr);
}
JSONObject camerasDataList = (JSONObject) camerasResult.get("data");
// JSONObject dataObj = (JSONObject) result.get("data");
JSONArray cameraDataList = camerasDataList.getJSONArray("list");
if (ValidationUtil.isEmpty(camerasDataList)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,regionsDataList:{}", camerasDataList);
} else {
cameraDataList.forEach(cameraData -> {
JSONObject cameraDataJson = (JSONObject) cameraData;
String cameraName = cameraDataJson.getString("cameraName");
String useInstallCode = cameraDataJson.getString("installLocation");
String reIndexCode = cameraDataJson.getString("regionIndexCode");
String cameraIndexCode = cameraDataJson.getString("cameraIndexCode");
String updateTime = cameraDataJson.getString("updateTime");
String createTime = cameraDataJson.getString("createTime");
BaseEnterpriseVideoNode enterpriseVideoNode = new BaseEnterpriseVideoNode();
enterpriseVideoNode.setUseUnitName(unitName);
enterpriseVideoNode.setUseUnitCode(unitCode);
enterpriseVideoNode.setRegionCode(reIndexCode);
enterpriseVideoNode.setVideoName(cameraName);
enterpriseVideoNode.setDevUseCode(useInstallCode);
enterpriseVideoNode.setIsDelete(true);
enterpriseVideoNode.setCameraIndexCode(cameraIndexCode);
try {
enterpriseVideoNode.setRecDate(DateUtils.dateParseWithPattern(createTime));
enterpriseVideoNode.setUpdatesTime(DateUtils.dateParseWithPattern(updateTime));
} catch (ParseException e) {
throw new RuntimeException(e);
}
baseEnterpriseVideoNodeService.saveOrUpdate(enterpriseVideoNode, new QueryWrapper<BaseEnterpriseVideoNode>().lambda().eq(BaseEnterpriseVideoNode::getCameraIndexCode, cameraIndexCode));
});
}
});
}
});
}
});
}
return true;
}
public String getsubRegions(String appKey, String appSecret, String apiUrl, String indexCode) {
Map<String, String> uriInfo = null;
try {
uriInfo = parseUri(apiUrl);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
String protocol = uriInfo.get("protocol");
String hostPort = uriInfo.get("hostPort");
String urlPath = uriInfo.get("urlPath");
Map<String, String> path = new HashMap<>();
path.put(protocol, urlPath);
ArtemisConfig config = new ArtemisConfig();
config.setAppKey(appKey);
config.setAppSecret(appSecret);
config.setHost(hostPort);
Map<String, String> paramMap = new HashMap<>();// post请求Form表单参数
paramMap.put("parentIndexCode", indexCode);
String body = JSON.toJSON(paramMap).toString();
try {
return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json", null);
} catch (Exception e) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", indexCode);
throw new RuntimeException(e);
}
}
public String getCameras(String appKey, String appSecret, String apiUrl, String indexCode) {
Map<String, String> uriInfo = null;
try {
uriInfo = parseUri(apiUrl);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
String protocol = uriInfo.get("protocol");
String hostPort = uriInfo.get("hostPort");
String urlPath = uriInfo.get("urlPath");
Map<String, String> path = new HashMap<>();
path.put(protocol, urlPath);
ArtemisConfig config = new ArtemisConfig();
config.setAppKey(appKey);
config.setAppSecret(appSecret);
config.setHost(hostPort);
Map<String, String> paramMap = new HashMap<>();// post请求Form表单参数
paramMap.put("regionIndexCode", indexCode);
paramMap.put("pageNo", "1");
paramMap.put("pageSize", "1000");
String body = JSON.toJSON(paramMap).toString();
try {
return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json", null);
} catch (Exception e) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", indexCode);
throw new RuntimeException(e);
}
}
} }
\ No newline at end of file
...@@ -2721,7 +2721,7 @@ ...@@ -2721,7 +2721,7 @@
FROM FROM
tzs_user_permission tup tzs_user_permission tup
LEFT JOIN tzs_user_info tui ON tup.user_seq = tui.sequence_nbr LEFT JOIN tzs_user_info tui ON tup.user_seq = tui.sequence_nbr
LEFT JOIN tz_base_enterprise_info ei ON ei.use_unit_code = tui.unit_code LEFT JOIN tz_base_enterprise_info ei ON ei.use_code = tui.unit_code
WHERE WHERE
tup.expiry_date <![CDATA[<]]> CURRENT_DATE AND tup.permission_post IN ('permissionData66151', 'permissionData66152', 'permissionData6552'); tup.expiry_date <![CDATA[<]]> CURRENT_DATE AND tup.permission_post IN ('permissionData66151', 'permissionData66152', 'permissionData6552');
......
...@@ -1150,7 +1150,8 @@ public class CommonEquipDataProcessService { ...@@ -1150,7 +1150,8 @@ public class CommonEquipDataProcessService {
public void beforeCheckForUseOrgCode(ProjectContraptionChangeDataDto dto) { public void beforeCheckForUseOrgCode(ProjectContraptionChangeDataDto dto) {
LambdaQueryWrapper<IdxBizJgProjectContraption> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<IdxBizJgProjectContraption> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(IdxBizJgProjectContraption::getUseRegistrationCode, dto.getUseRegistrationCode()) queryWrapper.eq(IdxBizJgProjectContraption::getUseRegistrationCode, dto.getUseRegistrationCode())
.ne(BaseEntity::getSequenceNbr, dto.getProjectContraptionId()); .ne(BaseEntity::getSequenceNbr, dto.getProjectContraptionId())
.ne(IdxBizJgProjectContraption::getUseUnitCreditCode, dto.getUseUnitCreditCode());
if (idxBizJgProjectContraptionServiceImpl.count(queryWrapper) > 0) { if (idxBizJgProjectContraptionServiceImpl.count(queryWrapper) > 0) {
throw new BadRequest("使用登记证编号已存在!"); throw new BadRequest("使用登记证编号已存在!");
} }
......
...@@ -158,6 +158,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -158,6 +158,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
private static final Logger logger = LogManager.getLogger(JgUseRegistrationServiceImpl.class); private static final Logger logger = LogManager.getLogger(JgUseRegistrationServiceImpl.class);
private static final String DEFINITION_KEY = "useRegistration"; private static final String DEFINITION_KEY = "useRegistration";
private static final String JIAN_CHA_ROLE_ID = "1864242478501093377";
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");; private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");;
private static final int BATCH_SIZE = 1000; private static final int BATCH_SIZE = 1000;
private final List<String> NOT_FLOWING_STATE = Arrays.asList("使用单位待提交", "一级受理已驳回", "使用单位已撤回", "已作废"); private final List<String> NOT_FLOWING_STATE = Arrays.asList("使用单位待提交", "一级受理已驳回", "使用单位已撤回", "已作废");
...@@ -2236,6 +2237,20 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -2236,6 +2237,20 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
//通过 //通过
//一级通过,且是特殊登记,需要监察,approvalStatus=2 //一级通过,且是特殊登记,需要监察,approvalStatus=2
if ("2".equals(jgUseRegistration.getRegType()) && (WorkFlowStatusEnum.USE_RECEIVE.getPass().equals(jgUseRegistration.getStatus()) || WorkFlowStatusEnum.USE_RECEIVE.getReject().equals(jgUseRegistration.getStatus()))) { if ("2".equals(jgUseRegistration.getRegType()) && (WorkFlowStatusEnum.USE_RECEIVE.getPass().equals(jgUseRegistration.getStatus()) || WorkFlowStatusEnum.USE_RECEIVE.getReject().equals(jgUseRegistration.getStatus()))) {
List<AgencyUserModel> taskExecutor = Privilege.agencyUserClient
.queryByRoleId(String.join(",", JIAN_CHA_ROLE_ID), null,
true, true, "", buildOrgCodePrefixes(orgCode)).getResult();
if (!ValidationUtil.isEmpty(taskExecutor)) {
String companyCodes = taskExecutor.stream()
.map(AgencyUserModel::getCompanys)
.filter(Objects::nonNull)
.filter(list -> !list.isEmpty())
.map(list -> list.get(0).getCompanyCode())
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.joining(","));
dto.setNextExecuteUserCompanyCode(companyCodes);
}
dto.setResultCode("approvalStatus"); dto.setResultCode("approvalStatus");
map.put("approvalStatus", "9"); map.put("approvalStatus", "9");
map.put("nextExecuteUserOrgCode", orgCode); map.put("nextExecuteUserOrgCode", orgCode);
...@@ -2270,6 +2285,15 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -2270,6 +2285,15 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
} }
} }
public static String buildOrgCodePrefixes(String orgCode) {
if (orgCode == null || orgCode.isEmpty()) return "";
String[] parts = orgCode.split("\\*");
List<String> prefixes = new ArrayList<>();
if (parts.length >= 3) prefixes.add(String.join("*", Arrays.copyOfRange(parts, 0, 3)));
if (parts.length >= 2) prefixes.add(String.join("*", Arrays.copyOfRange(parts, 0, 2)));
return String.join(",", prefixes);
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 6000000) @GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 6000000)
public void withdraw(String instanceId, String nextTaskId, String manageType) { public void withdraw(String instanceId, String nextTaskId, String manageType) {
......
...@@ -77,6 +77,21 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -77,6 +77,21 @@ public class SafetyProblemTracingGenServiceImpl{
executePersonnalCertificationCheck(); executePersonnalCertificationCheck();
} }
@Scheduled(cron = "0 0 5 ? * SAT")
@SchedulerLock(name = "correctOverdueProblem", lockAtMostFor = "PT5H", lockAtLeastFor = "PT60M")
public void correctOverdueProblem() {
try {
logger.info("开始执行 overdue problem 修复任务");
long startTime = System.currentTimeMillis();
repairMaintenanceAndInspectionOverdueProblem();
long endTime = System.currentTimeMillis();
logger.info("overdue problem 修复任务执行完成,耗时: {} ms", (endTime - startTime));
} catch (Exception e) {
logger.error("执行 overdue problem 修复任务时发生异常", e);
}
}
public void executePersonnalCertificationCheck() { public void executePersonnalCertificationCheck() {
logger.info("开始人员资质超期检查"); logger.info("开始人员资质超期检查");
List<Map<String, Object>> certificationRecords = commonMapper.queryOutOfCertificationRecord(); List<Map<String, Object>> certificationRecords = commonMapper.queryOutOfCertificationRecord();
...@@ -236,7 +251,7 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -236,7 +251,7 @@ public class SafetyProblemTracingGenServiceImpl{
} }
public void repairMaintenanceAndInspectionOverdueProblem() { public void repairMaintenanceAndInspectionOverdueProblem() {
logger.info("开始设备维保备案和建议检查超期数据修正"); logger.info("开始设备维保备案和检验检测超期数据修正");
Set<String> realOutOfMaintenanceRecord = commonMapper.queryOutOfMaintenanceRecord().stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toSet()); Set<String> realOutOfMaintenanceRecord = commonMapper.queryOutOfMaintenanceRecord().stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toSet());
Set<String> realOutOfInspectRecord = commonMapper.queryOutOfInspectionRecord().stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toSet()); Set<String> realOutOfInspectRecord = commonMapper.queryOutOfInspectionRecord().stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toSet());
// 需要修正业务表+es的数据 // 需要修正业务表+es的数据
...@@ -262,17 +277,27 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -262,17 +277,27 @@ public class SafetyProblemTracingGenServiceImpl{
correctData.addAll(inspectionSet); correctData.addAll(inspectionSet);
} else if (!maintenanceSet.isEmpty()) { } else if (!maintenanceSet.isEmpty()) {
// 再次查询维保备案这些数据有没有检验超期的问题 // 再次查询维保备案这些数据有没有检验超期的问题
maintenanceSet.removeAll(realOutOfInspectRecord); // 找出仅在maintenanceSet中而不在realOutOfInspectRecord中的元素(真正需要更新的维保数据)
// 没有则可以愉快地更新设备状态为正常 List<String> maintenanceOnly = maintenanceSet.stream()
correctData.addAll(maintenanceSet); .filter(id -> !realOutOfMaintenanceRecord.contains(id))
// 再次查询检验这些数据有没有维保超期问题 .collect(Collectors.toList());
inspectionSet.removeAll(realOutOfMaintenanceRecord); // 找出仅在inspectionSet中而不在realOutOfMaintenanceRecord中的元素(真正需要更新的检验数据)
// 没有则可以愉快地更新设备状态为正常 List<String> inspectionOnly = inspectionSet.stream()
correctData.addAll(inspectionSet); .filter(id -> !realOutOfInspectRecord.contains(id))
.collect(Collectors.toList());
correctData.addAll(maintenanceOnly);
correctData.addAll(inspectionOnly);
}
if (!ValidationUtil.isEmpty(correctData)) {
logger.info("开始更新设备表和ES数据状态--updateOtherTableAndES");
int batchSize = 1000;
for (int i = 0; i < correctData.size(); i += batchSize) {
List<String> batch = correctData.subList(i, Math.min(i + batchSize, correctData.size()));
safetyProblemTracingService.updateOtherTableAndES(Sets.newHashSet(batch));
}
logger.info("更新设备表和ES数据状态完成--updateOtherTableAndES,更新数据:{}条", correctData.size());
} }
safetyProblemTracingService.updateOtherTableAndES(Sets.newHashSet(correctData));
logger.info("设备维保备案和检验超期数据修正完成,更新数据:{}条", correctData.size());
} }
private List<String> handleOutOfMaintenanceErrorData(Set<String> realOutOfMaintenanceRecord) { private List<String> handleOutOfMaintenanceErrorData(Set<String> realOutOfMaintenanceRecord) {
...@@ -280,6 +305,7 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -280,6 +305,7 @@ public class SafetyProblemTracingGenServiceImpl{
if (ValidationUtil.isEmpty(realOutOfMaintenanceRecord)) { if (ValidationUtil.isEmpty(realOutOfMaintenanceRecord)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
logger.info("设备维保超期safety表数据修正开始,实际检验超期数据:{}条", realOutOfMaintenanceRecord.size());
List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>() List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>()
.select(SafetyProblemTracing::getSourceId) .select(SafetyProblemTracing::getSourceId)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode()) .eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
...@@ -290,20 +316,29 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -290,20 +316,29 @@ public class SafetyProblemTracingGenServiceImpl{
return Lists.newArrayList(); return Lists.newArrayList();
} }
// 追溯问题表中未处理的维保超期设备 // 追溯问题表中未处理的维保超期设备
List<String> outOfMaintenanceEquipIds = problemList.stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toList());
// 未超期但错误生成的维保超期设备 // 未超期但错误生成的维保超期设备
outOfMaintenanceEquipIds.removeIf(realOutOfMaintenanceRecord::contains); List<String> outOfMaintenanceEquipIds = problemList.stream()
.map(SafetyProblemTracing::getSourceId)
.filter(id -> !realOutOfMaintenanceRecord.contains(id))
.collect(Collectors.toList());
if (ValidationUtil.isEmpty(outOfMaintenanceEquipIds)) { if (ValidationUtil.isEmpty(outOfMaintenanceEquipIds)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
safetyProblemTracingService.lambdaUpdate() logger.info("设备维保超期safety表数据修正开始,待更新数据:{}条", outOfMaintenanceEquipIds.size());
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode()) // 分批处理更新
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName()) int batchSize = 1000;
.set(SafetyProblemTracing::getRecDate, new Date()) for (int i = 0; i < outOfMaintenanceEquipIds.size(); i += batchSize) {
.in(SafetyProblemTracing::getSourceId, outOfMaintenanceEquipIds) List<String> batch = outOfMaintenanceEquipIds.subList(i, Math.min(i + batchSize, outOfMaintenanceEquipIds.size()));
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode()) safetyProblemTracingService.lambdaUpdate()
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE) .set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.update(); .set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.set(SafetyProblemTracing::getRecDate, new Date())
.in(SafetyProblemTracing::getSourceId, batch)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
.update();
}
logger.info("设备维保超期safety表数据修正完成,已更新数据:{}条", outOfMaintenanceEquipIds.size());
return outOfMaintenanceEquipIds; return outOfMaintenanceEquipIds;
} }
...@@ -312,6 +347,7 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -312,6 +347,7 @@ public class SafetyProblemTracingGenServiceImpl{
if (ValidationUtil.isEmpty(realOutOfInspectRecord)) { if (ValidationUtil.isEmpty(realOutOfInspectRecord)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
logger.info("设备检验超期safety表数据修正开始,实际检验超期数据:{}条", realOutOfInspectRecord.size());
List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>() List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>()
.select(SafetyProblemTracing::getSourceId) .select(SafetyProblemTracing::getSourceId)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode()) .eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
...@@ -322,20 +358,29 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -322,20 +358,29 @@ public class SafetyProblemTracingGenServiceImpl{
return Lists.newArrayList(); return Lists.newArrayList();
} }
// 追溯问题表中未处理的检验超期设备 // 追溯问题表中未处理的检验超期设备
List<String> outOfInspectionEquipIds = problemList.stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toList());
// 未超期但错误生成的检验超期设备 // 未超期但错误生成的检验超期设备
outOfInspectionEquipIds.removeIf(realOutOfInspectRecord::contains); List<String> outOfInspectionEquipIds = problemList.stream()
.map(SafetyProblemTracing::getSourceId)
.filter(id -> !realOutOfInspectRecord.contains(id))
.collect(Collectors.toList());
if (ValidationUtil.isEmpty(outOfInspectionEquipIds)) { if (ValidationUtil.isEmpty(outOfInspectionEquipIds)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
safetyProblemTracingService.lambdaUpdate() logger.info("设备检验超期safety表数据修正开始,待更新数据:{}条", outOfInspectionEquipIds.size());
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode()) // 分批处理更新
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName()) int batchSize = 1000;
.set(SafetyProblemTracing::getRecDate, new Date()) for (int i = 0; i < outOfInspectionEquipIds.size(); i += batchSize) {
.in(SafetyProblemTracing::getSourceId, outOfInspectionEquipIds) List<String> batch = outOfInspectionEquipIds.subList(i, Math.min(i + batchSize, outOfInspectionEquipIds.size()));
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode()) safetyProblemTracingService.lambdaUpdate()
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE) .set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.update(); .set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.set(SafetyProblemTracing::getRecDate, new Date())
.in(SafetyProblemTracing::getSourceId, batch)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
.update();
}
logger.info("设备检验超期safety表数据修正完成,已更新数据:{}条", outOfInspectionEquipIds.size());
return outOfInspectionEquipIds; return outOfInspectionEquipIds;
} }
......
...@@ -466,7 +466,7 @@ ...@@ -466,7 +466,7 @@
v.use_unit_code useUnitCode, v.use_unit_code useUnitCode,
(SELECT use_unit FROM tz_base_enterprise_info WHERE use_code = v.use_unit_code) useUnit (SELECT use_unit FROM tz_base_enterprise_info WHERE use_code = v.use_unit_code) useUnit
FROM FROM
tz_base_enterprise_video v tz_base_enterprise_video_node v
WHERE WHERE
region_code LIKE CONCAT('%', #{cityCode}, '%') region_code LIKE CONCAT('%', #{cityCode}, '%')
GROUP BY GROUP BY
......
...@@ -60,4 +60,11 @@ public class VideoController { ...@@ -60,4 +60,11 @@ public class VideoController {
List<CommonVideoDto> re = videoService.getVideoList(useUnitCode, regionCode); List<CommonVideoDto> re = videoService.getVideoList(useUnitCode, regionCode);
return ResponseHelper.buildResponse(re); return ResponseHelper.buildResponse(re);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(value = "查询骏景视频平台的视频数据并写入数据库", httpMethod = "GET")
@GetMapping(value = "/junjing/hk")
public ResponseModel<Boolean> saveOrUpdateVideos(@RequestParam(value = "sequenceNbr") String sequenceNbr) {
boolean re = videoService.saveOrUpdateVideos(sequenceNbr);
return ResponseHelper.buildResponse(re);
}
} }
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl; package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto; import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity; import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto; import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo; import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideoNode;
import com.yeejoin.amos.boot.module.common.api.enums.VideoIntegrationPlatformEnum; import com.yeejoin.amos.boot.module.common.api.enums.VideoIntegrationPlatformEnum;
import com.yeejoin.amos.boot.module.common.api.utils.DateUtils;
import com.yeejoin.amos.boot.module.common.biz.service.impl.BaseEnterpriseVideoNodeServiceImpl;
import com.yeejoin.amos.boot.module.common.biz.service.impl.BaseEnterpriseVideoServiceImpl; import com.yeejoin.amos.boot.module.common.biz.service.impl.BaseEnterpriseVideoServiceImpl;
import com.yeejoin.amos.boot.module.statistcs.biz.utils.JsonUtils;
import com.yeejoin.amos.boot.module.statistics.api.dto.UnitVideoDto; import com.yeejoin.amos.boot.module.statistics.api.dto.UnitVideoDto;
import com.yeejoin.amos.boot.module.statistics.api.vo.TreeNodeVo; import com.yeejoin.amos.boot.module.statistics.api.vo.TreeNodeVo;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentClassifityEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.feign.systemctl.model.RegionModel; import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.ArrayList; import java.text.ParseException;
import java.util.List; import java.util.*;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -38,8 +47,12 @@ public class VideoServiceImpl { ...@@ -38,8 +47,12 @@ public class VideoServiceImpl {
private static String NODE_TYPE_VIDEO = "video"; private static String NODE_TYPE_VIDEO = "video";
private TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper; @Value("classpath:/json/region.json")
private Resource regionJson;
private TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper;
@Autowired
private BaseEnterpriseVideoNodeServiceImpl baseEnterpriseVideoNodeService;
private StCommonServiceImpl stCommonService; private StCommonServiceImpl stCommonService;
private BaseEnterpriseVideoServiceImpl enterpriseVideoService; private BaseEnterpriseVideoServiceImpl enterpriseVideoService;
...@@ -58,19 +71,29 @@ public class VideoServiceImpl { ...@@ -58,19 +71,29 @@ public class VideoServiceImpl {
* @return List<TreeNodeVo> * @return List<TreeNodeVo>
*/ */
public List<TreeNodeVo> getVideoTree(DPFilterParamDto dpFilterParamDto) { public List<TreeNodeVo> getVideoTree(DPFilterParamDto dpFilterParamDto) {
// 摄像头设备 // 摄像头设备参数配置
List<BaseEnterpriseVideo> videoEquipList = getVideos(dpFilterParamDto.getCityCode()); List<BaseEnterpriseVideo> videoEquipList = getVideos(dpFilterParamDto.getCityCode());
List<BaseEnterpriseVideoNode> videoNodesList = getVideoNodes(dpFilterParamDto.getCityCode());
// 摄像头对应的单位列表 // 摄像头对应的单位列表
List<TzBaseEnterpriseInfo> baseEnterpriseInfos = this.getUnitListForTree(videoEquipList.stream().map(BaseEnterpriseVideo::getUseUnitCode).collect(Collectors.toSet())); List<TzBaseEnterpriseInfo> baseEnterpriseInfos = this.getUnitListForTree(videoNodesList.stream().map(BaseEnterpriseVideoNode::getUseUnitCode).collect(Collectors.toSet()));
// 摄像头对应的行政区域列表 // 摄像头对应的行政区域列表
List<RegionModel> regionModels = this.getRegionListOfVideo(videoEquipList); List<RegionModel> regionModels = this.getRegionListOfVideo(videoNodesList);
// 摄像头通道 // 摄像头通道
List<CommonVideoDto> channelNoList = this.getVideoChannel(videoEquipList); List<CommonVideoDto> channelNoList = this.getVideoChannel(videoEquipList,videoNodesList);
// 树组装 // 树组装
return castList2Tree(baseEnterpriseInfos, regionModels, channelNoList, videoEquipList); return castList2Tree(baseEnterpriseInfos, regionModels, channelNoList, videoNodesList);
} }
private List<TreeNodeVo> castList2Tree(List<TzBaseEnterpriseInfo> baseEnterpriseInfos, List<RegionModel> regionModels, List<CommonVideoDto> channelNoList, List<BaseEnterpriseVideo> videoEquipList) { private List<BaseEnterpriseVideoNode> getVideoNodes(String regionCode) {
LambdaQueryWrapper<BaseEnterpriseVideoNode> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BaseEnterpriseVideoNode::getEquListCode, EquipmentClassifityEnum.KYSD.getCode());
queryWrapper.like(BaseEnterpriseVideoNode::getRegionCode, regionCode);
queryWrapper.eq(BaseEnterpriseVideoNode::getIsDelete, true);
return baseEnterpriseVideoNodeService.list(queryWrapper);
}
private List<TreeNodeVo> castList2Tree(List<TzBaseEnterpriseInfo> baseEnterpriseInfos, List<RegionModel> regionModels, List<CommonVideoDto> channelNoList, List<BaseEnterpriseVideoNode> videoNodesList) {
// 数据处理,把行政区域、单位、摄像头 数据格式化为有parent的标准树结构列表 // 数据处理,把行政区域、单位、摄像头 数据格式化为有parent的标准树结构列表
List<TreeNodeVo> regionNodes = regionModels.stream().map(r -> { List<TreeNodeVo> regionNodes = regionModels.stream().map(r -> {
TreeNodeVo treeNodeVo = new TreeNodeVo(); TreeNodeVo treeNodeVo = new TreeNodeVo();
...@@ -90,17 +113,17 @@ public class VideoServiceImpl { ...@@ -90,17 +113,17 @@ public class VideoServiceImpl {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// 给区域的最下级增加直接下级->单位,id不是其他的parent_id则为树的叶子节点 // 给区域的最下级增加直接下级->单位,id不是其他的parent_id则为树的叶子节点
treeNodeVos.forEach(t -> { treeNodeVos.forEach(t -> {
this.setChildrenUnitTypeNode(regionNodes, t, baseEnterpriseInfos, videoEquipList, channelNoList); this.setChildrenUnitTypeNode(regionNodes, t, baseEnterpriseInfos, videoNodesList, channelNoList);
}); });
return treeNodeVos; return treeNodeVos;
} }
private void setChildrenUnitTypeNode(List<TreeNodeVo> regionNodes, TreeNodeVo parentNode, List<TzBaseEnterpriseInfo> baseEnterpriseInfos, List<BaseEnterpriseVideo> videoEquipList, List<CommonVideoDto> channelNoList) { private void setChildrenUnitTypeNode(List<TreeNodeVo> regionNodes, TreeNodeVo parentNode, List<TzBaseEnterpriseInfo> baseEnterpriseInfos, List<BaseEnterpriseVideoNode> videoNodesList, List<CommonVideoDto> channelNoList) {
if (regionNodes.stream().noneMatch(e -> parentNode.getId().equals(e.getParentId()))) { if (regionNodes.stream().noneMatch(e -> parentNode.getId().equals(e.getParentId()))) {
parentNode.setChildren(this.buildUnitTypeNode(baseEnterpriseInfos, videoEquipList, channelNoList, parentNode)); parentNode.setChildren(this.buildUnitTypeNode(baseEnterpriseInfos, videoNodesList, channelNoList, parentNode));
} else { } else {
parentNode.getChildren().forEach(p -> { parentNode.getChildren().forEach(p -> {
setChildrenUnitTypeNode(regionNodes, p, baseEnterpriseInfos, videoEquipList, channelNoList); setChildrenUnitTypeNode(regionNodes, p, baseEnterpriseInfos, videoNodesList, channelNoList);
}); });
} }
} }
...@@ -115,8 +138,8 @@ public class VideoServiceImpl { ...@@ -115,8 +138,8 @@ public class VideoServiceImpl {
} }
private List<TreeNodeVo> buildUnitTypeNode(List<TzBaseEnterpriseInfo> baseEnterpriseInfos, List<BaseEnterpriseVideo> videoEquipList, List<CommonVideoDto> channelNoList, TreeNodeVo parentNode) { private List<TreeNodeVo> buildUnitTypeNode(List<TzBaseEnterpriseInfo> baseEnterpriseInfos, List<BaseEnterpriseVideoNode> videoNodesList, List<CommonVideoDto> channelNoList, TreeNodeVo parentNode) {
Set<String> useUnitCodes = videoEquipList.stream().filter(v -> v.getRegionCode().contains(parentNode.getCode())).map(BaseEnterpriseVideo::getUseUnitCode).collect(Collectors.toSet()); Set<String> useUnitCodes = videoNodesList.stream().filter(v -> v.getRegionCode().contains(parentNode.getCode())).map(BaseEnterpriseVideoNode::getUseUnitCode).collect(Collectors.toSet());
return baseEnterpriseInfos.stream().filter(v -> useUnitCodes.contains(v.getUseUnitCode())).map(u -> { return baseEnterpriseInfos.stream().filter(v -> useUnitCodes.contains(v.getUseUnitCode())).map(u -> {
TreeNodeVo treeNodeVo = new TreeNodeVo(); TreeNodeVo treeNodeVo = new TreeNodeVo();
treeNodeVo.setNodeType(NODE_TYPE_UNIT); treeNodeVo.setNodeType(NODE_TYPE_UNIT);
...@@ -144,7 +167,7 @@ public class VideoServiceImpl { ...@@ -144,7 +167,7 @@ public class VideoServiceImpl {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
private List<CommonVideoDto> getVideoChannel(List<BaseEnterpriseVideo> videoEquipList) { private List<CommonVideoDto> getVideoChannel(List<BaseEnterpriseVideo> videoEquipList,List<BaseEnterpriseVideoNode> videoNodesList) {
List<CommonVideoDto> commonVideoDtos = new ArrayList<>(); List<CommonVideoDto> commonVideoDtos = new ArrayList<>();
// 根据对接平台不同,摄像头通道信息不同,需要解析成CommonVideoDto // 根据对接平台不同,摄像头通道信息不同,需要解析成CommonVideoDto
List<BaseEnterpriseVideo> ysVideoList = videoEquipList.stream().filter(v -> VideoIntegrationPlatformEnum.YS.getCode().equals(v.getPlatform())).collect(Collectors.toList()); List<BaseEnterpriseVideo> ysVideoList = videoEquipList.stream().filter(v -> VideoIntegrationPlatformEnum.YS.getCode().equals(v.getPlatform())).collect(Collectors.toList());
...@@ -155,21 +178,21 @@ public class VideoServiceImpl { ...@@ -155,21 +178,21 @@ public class VideoServiceImpl {
commonVideoDtos.addAll(channelNoList.stream().peek(e -> e.setParent(v.getUseUnitCode())).collect(Collectors.toList())); commonVideoDtos.addAll(channelNoList.stream().peek(e -> e.setParent(v.getUseUnitCode())).collect(Collectors.toList()));
}); });
} }
List<CommonVideoDto> iSecureCenterCameras = enterpriseVideoService.getISecureCenterCameras(videoEquipList); List<CommonVideoDto> iSecureCenterCameras = enterpriseVideoService.getISecureCenterCameras(videoNodesList);
if (!ValidationUtil.isEmpty(iSecureCenterCameras)) { if (!ValidationUtil.isEmpty(iSecureCenterCameras)) {
commonVideoDtos.addAll(iSecureCenterCameras); commonVideoDtos.addAll(iSecureCenterCameras);
} }
return commonVideoDtos; return commonVideoDtos;
} }
private List<RegionModel> getRegionListOfVideo(List<BaseEnterpriseVideo> videoEquipList) { private List<RegionModel> getRegionListOfVideo(List<BaseEnterpriseVideoNode> videoNodesList) {
return stCommonService.getRegionModels().parallelStream().filter(r -> videoEquipList.stream().anyMatch(v -> v.getRegionCode().contains(r.getRegionCode().toString()))).collect(Collectors.toList()); return stCommonService.getRegionModels().parallelStream().filter(r -> videoNodesList.stream().anyMatch(v -> v.getRegionCode().contains(r.getRegionCode().toString()))).collect(Collectors.toList());
} }
private List<TzBaseEnterpriseInfo> getUnitListForTree(Set<String> useUnitCodes) { private List<TzBaseEnterpriseInfo> getUnitListForTree(Set<String> useUnitCodes) {
LambdaQueryWrapper<TzBaseEnterpriseInfo> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TzBaseEnterpriseInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(TzBaseEnterpriseInfo::getUseUnitCode, useUnitCodes); queryWrapper.in(TzBaseEnterpriseInfo::getUseUnitCode, useUnitCodes);
queryWrapper.select(TzBaseEnterpriseInfo::getUseUnitCode, TzBaseEnterpriseInfo::getUseUnit, TzBaseEnterpriseInfo::getAddress, BaseEntity::getSequenceNbr); queryWrapper.select(TzBaseEnterpriseInfo::getUseUnitCode, TzBaseEnterpriseInfo::getUseUnit, TzBaseEnterpriseInfo::getAddress, BaseEntity::getSequenceNbr,TzBaseEnterpriseInfo::getOrgCode);
return tzBaseEnterpriseInfoMapper.selectList(queryWrapper); return tzBaseEnterpriseInfoMapper.selectList(queryWrapper);
} }
...@@ -184,15 +207,18 @@ public class VideoServiceImpl { ...@@ -184,15 +207,18 @@ public class VideoServiceImpl {
public List<UnitVideoDto> getUnitList(String regionCode) { public List<UnitVideoDto> getUnitList(String regionCode) {
// 摄像头设备 // 摄像头设备
List<BaseEnterpriseVideo> videoEquipList = getVideos(regionCode); List<BaseEnterpriseVideo> videoEquipList = getVideos(regionCode);
List<BaseEnterpriseVideoNode> entersList = baseEnterpriseVideoNodeService.list(new LambdaQueryWrapper<BaseEnterpriseVideoNode>().like(BaseEnterpriseVideoNode::getRegionCode, regionCode).groupBy(BaseEnterpriseVideoNode::getUseUnitCode));
// 摄像头对应的单位列表 // 摄像头对应的单位列表
List<TzBaseEnterpriseInfo> baseEnterpriseInfos = this.getUnitListForTree(videoEquipList.stream().map(BaseEnterpriseVideo::getUseUnitCode).collect(Collectors.toSet())); List<TzBaseEnterpriseInfo> baseEnterpriseInfos = this.getUnitListForTree(entersList.stream().map(BaseEnterpriseVideoNode::getUseUnitCode).collect(Collectors.toSet()));
return baseEnterpriseInfos.parallelStream().map(e -> { return baseEnterpriseInfos.parallelStream().map(e -> {
UnitVideoDto unitVideoDto = new UnitVideoDto(); UnitVideoDto unitVideoDto = new UnitVideoDto();
unitVideoDto.setId(e.getSequenceNbr() + ""); unitVideoDto.setId(e.getSequenceNbr() + "");
unitVideoDto.setName(e.getUseUnit()); unitVideoDto.setName(e.getUseUnit());
unitVideoDto.setCode(e.getUseUnitCode()); unitVideoDto.setCode(e.getUseUnitCode());
// 摄像头节点
List<BaseEnterpriseVideoNode> videoNodesList = baseEnterpriseVideoNodeService.list(new LambdaQueryWrapper<BaseEnterpriseVideoNode>().eq(BaseEnterpriseVideoNode::getUseUnitCode, e.getUseUnitCode()));
// 摄像头通道 // 摄像头通道
List<CommonVideoDto> channelNoList = this.getVideoChannel(videoEquipList); List<CommonVideoDto> channelNoList = this.getVideoChannel(videoEquipList,videoNodesList);
unitVideoDto.setCountNum(channelNoList.stream().filter(c -> c.getParent().equals(e.getUseUnitCode())).count()); unitVideoDto.setCountNum(channelNoList.stream().filter(c -> c.getParent().equals(e.getUseUnitCode())).count());
return unitVideoDto; return unitVideoDto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -202,4 +228,140 @@ public class VideoServiceImpl { ...@@ -202,4 +228,140 @@ public class VideoServiceImpl {
return enterpriseVideoService.getUnitVideoUrl(useUnitCode, regionCode); return enterpriseVideoService.getUnitVideoUrl(useUnitCode, regionCode);
} }
public boolean saveOrUpdateVideos(String sequenceNbr) {
boolean result = true;
try {
result = saveOrUpdateVideo(sequenceNbr);
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
public boolean saveOrUpdateVideo(String sequenceNbr) throws Exception {
BaseEnterpriseVideo baseEnterpriseVideo = enterpriseVideoService.getBaseMapper().selectById(sequenceNbr);
String appKey = baseEnterpriseVideo.getAppKey();
String appSecret = baseEnterpriseVideo.getAppSecret();
String deviceSerial = baseEnterpriseVideo.getDeviceSerial();
String url = "https://113.140.67.204:55443/artemis/api/resource/v1/regions/subRegions";
String videoUrl = "https://113.140.67.204:55443/artemis/api/resource/v1/regions/regionIndexCode/cameras";
//根据跟节点673f784dc4ae4cf681957386accd445c获取区域列表子节点 开始
String regionsStr = enterpriseVideoService.getsubRegions(appKey, appSecret, url, deviceSerial);
if (ValidationUtil.isEmpty(regionsStr)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", deviceSerial);
return false;
}
JSONObject regionsResult = JSONObject.parseObject(regionsStr);
if (regionsResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台区域列表失败,data:{}", regionsStr);
return false;
}
JSONArray regionsDataList = regionsResult.getJSONArray("data");
if (ValidationUtil.isEmpty(regionsDataList)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,regionsDataList:{}", regionsDataList);
return false;
} else {
Map<String, String> regionMaps=JsonUtils.getResourceJson(regionJson);
regionsDataList.forEach(regionsData -> {
JSONObject regionDataJson = (JSONObject) regionsData;
String regionName = regionDataJson.getString("name");
String regionIndexCode = regionDataJson.getString("indexCode");
//根据区域regionIndexCode获取企业列表 开始
String unitsStr = enterpriseVideoService.getsubRegions(appKey, appSecret, url, regionIndexCode);
if (ValidationUtil.isEmpty(unitsStr)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", regionIndexCode);
}
JSONObject unitsResult = JSONObject.parseObject(unitsStr);
if (unitsResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台区域列表失败,data:{}", unitsStr);
}
JSONArray unitsDataList = unitsResult.getJSONArray("data");
if (ValidationUtil.isEmpty(unitsDataList)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,regionsDataList:{}", unitsDataList);
} else {
unitsDataList.forEach(unitsData -> {
JSONObject unitDataJson = (JSONObject) unitsData;
String unitNameAndCode = unitDataJson.getString("name");
String unitName = unitNameAndCode==null?"":unitNameAndCode.split("#")[0];
String unitCode = unitNameAndCode==null?"":(unitNameAndCode.contains("#")?unitNameAndCode.split("#")[1]:"");
final String unitOrgCode;
if (null!=unitCode || !ValidationUtil.isEmpty(unitCode)) {
Set<String> setStr = new HashSet<String>();
setStr.add(unitCode);
List<TzBaseEnterpriseInfo> tzBaseEnterpriseInfos = getUnitListForTree(setStr);
unitOrgCode = tzBaseEnterpriseInfos.size() > 0? tzBaseEnterpriseInfos.get(0).getOrgCode() : null;
}else {
// 不满足条件时,赋值为空字符串(与原逻辑一致)
unitOrgCode = null;
}
String unitIndexCode = unitDataJson.getString("indexCode");
//根据单位unitIndexCode获取设备列表 开始
String devsStr = enterpriseVideoService.getsubRegions(appKey, appSecret, url, unitIndexCode);
if (ValidationUtil.isEmpty(devsStr)) {
log.error("获取iSecureCenter视频对接平台设备列表失败,deviceSerial:{}", unitIndexCode);
}
JSONObject devsResult = JSONObject.parseObject(devsStr);
if (devsResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台设备列表失败,data:{}", devsStr);
}
JSONArray devsDataList = devsResult.getJSONArray("data");
if (ValidationUtil.isEmpty(devsDataList)) {
log.error("获取iSecureCenter视频对接平台设备列表失败,regionsDataList:{}", devsDataList);
} else {
devsDataList.forEach(devsData -> {
JSONObject devDataJson = (JSONObject) devsData;
String devName = devDataJson.getString("name");
String devIndexCode = devDataJson.getString("indexCode");
String camerasStr = enterpriseVideoService.getCameras(appKey, appSecret, videoUrl, devIndexCode);
if (ValidationUtil.isEmpty(camerasStr)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,deviceSerial:{}", deviceSerial);
}
JSONObject camerasResult = JSONObject.parseObject(camerasStr);
if (camerasResult.get("data") == null) {
log.error("获取iSecureCenter视频对接平台区域列表失败,data:{}", camerasStr);
}
JSONObject camerasDataList = (JSONObject) camerasResult.get("data");
JSONArray cameraDataList = camerasDataList.getJSONArray("list");
if (ValidationUtil.isEmpty(camerasDataList)) {
log.error("获取iSecureCenter视频对接平台区域列表失败,regionsDataList:{}", camerasDataList);
} else {
cameraDataList.forEach(cameraData -> {
JSONObject cameraDataJson = (JSONObject) cameraData;
String cameraName = cameraDataJson.getString("cameraName");
String useInstallCode = cameraDataJson.getString("installLocation");
String reIndexCode = cameraDataJson.getString("regionIndexCode");
String cameraIndexCode = cameraDataJson.getString("cameraIndexCode");
String updateTime = cameraDataJson.getString("updateTime");
String createTime = cameraDataJson.getString("createTime");
String regionCode = regionMaps.get(regionName);
BaseEnterpriseVideoNode enterpriseVideoNode = new BaseEnterpriseVideoNode();
enterpriseVideoNode.setUseUnitName(unitName);
enterpriseVideoNode.setUseUnitCode(unitCode);
enterpriseVideoNode.setRegionName(regionName);
enterpriseVideoNode.setRegionCode(regionCode);
enterpriseVideoNode.setOrgCode(unitOrgCode);
enterpriseVideoNode.setVideoName(cameraName);
enterpriseVideoNode.setDevUseCode(useInstallCode);
enterpriseVideoNode.setIsDelete(true);
enterpriseVideoNode.setCameraIndexCode(cameraIndexCode);
enterpriseVideoNode.setVideoSeq(Long.parseLong(sequenceNbr));
enterpriseVideoNode.setEquListCode(EquipmentClassifityEnum.KYSD.getCode());
try {
// enterpriseVideoNode.setRecDate(DateUtils.dateParseWithPattern(createTime));
enterpriseVideoNode.setUpdatesTime(DateUtils.dateParseWithZonedDateTime(updateTime));
} catch (ParseException e) {
throw new RuntimeException(e);
}
baseEnterpriseVideoNodeService.saveOrUpdates(enterpriseVideoNode,cameraIndexCode);
});
}
});
}
});
}
});
}
return true;
}
} }
{
"西安":"610000#610100",
"铜川":"610000#610200",
"宝鸡":"610000#610300",
"咸阳":"610000#610400",
"渭南":"610000#610500",
"延安":"610000#610600",
"汉中":"610000#610700",
"榆林":"610000#610800",
"安康":"610000#610900",
"商洛":"610000#611000"
}
\ No newline at end of file
...@@ -208,4 +208,9 @@ public class TzBaseEnterpriseInfo extends BaseEntity { ...@@ -208,4 +208,9 @@ public class TzBaseEnterpriseInfo extends BaseEntity {
*/ */
@TableField(value = "create_date") @TableField(value = "create_date")
private Date createDate; private Date createDate;
/**
* 组织机构
*/
@TableField(value = "org_code")
private String orgCode;
} }
...@@ -81,8 +81,7 @@ public class TzBaseEnterpriseInfoServiceImpl ...@@ -81,8 +81,7 @@ public class TzBaseEnterpriseInfoServiceImpl
@Autowired @Autowired
DataDictionaryServiceImpl iDataDictionaryService; DataDictionaryServiceImpl iDataDictionaryService;
@Autowired
RegUnitInfoMapper regUnitInfoMapper;
@Autowired @Autowired
StartPlatformTokenService platformTokenService; StartPlatformTokenService platformTokenService;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment