监控导入设备重名更新

This commit is contained in:
guoshengxiong 2025-09-26 19:16:25 +08:00
parent cb497f1e6c
commit 7018348d79
7 changed files with 264 additions and 7 deletions

View File

@ -1,5 +1,6 @@
package com.zhgd.xmgl.modules.video.controller; package com.zhgd.xmgl.modules.video.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -582,11 +583,14 @@ public class VideoItemController {
.eq(ProjectVideoConfig::getProjectSn, projectSn) .eq(ProjectVideoConfig::getProjectSn, projectSn)
.eq(ProjectVideoConfig::getVideoType, videoType) .eq(ProjectVideoConfig::getVideoType, videoType)
); );
Map<Long, Map<String, List<VideoItem>>> group2NameListMap = videoItemService.getEnableVideoListByProjectSn(projectSn).stream().collect(Collectors.groupingBy(VideoItem::getGroupId, Collectors.groupingBy(VideoItem::getVideoName)));
if (videoConfig == null) { if (videoConfig == null) {
throw new OpenAlertException("请先启用该视频类型"); throw new OpenAlertException("请先启用该视频类型");
} }
List<VideoItem> videoItems = new ArrayList<>(); List<VideoItem> videoItems = new ArrayList<>();
List<VideoItem> updateVideoItems = new ArrayList<>();
List<String> sucList = new ArrayList<>(); List<String> sucList = new ArrayList<>();
List<String> notChangeList = new ArrayList<>();
List<String> failGroupList = new ArrayList<>(); List<String> failGroupList = new ArrayList<>();
for (Map<String, String> importInfo : list) { for (Map<String, String> importInfo : list) {
VideoGroup group = groupMap.get(importInfo.get("*视频分组")); VideoGroup group = groupMap.get(importInfo.get("*视频分组"));
@ -617,11 +621,28 @@ public class VideoItemController {
videoItem.setAiFunctionType(aiFunctionType); videoItem.setAiFunctionType(aiFunctionType);
videoItem.setParentObj(JSON.toJSONString(group)); videoItem.setParentObj(JSON.toJSONString(group));
videoItem.setAiVideoUrl(aiVideoUrl); videoItem.setAiVideoUrl(aiVideoUrl);
videoItem.setDefaultStreamType(defaultStreamType); videoItem.setDefaultStreamType(Objects.isNull(defaultStreamType) ? 1 : defaultStreamType);
List<VideoItem> getItems = Optional.ofNullable(group2NameListMap.get(group.getId())).map(m -> m.get(videoName)).orElse(null);
if (CollUtil.isNotEmpty(getItems)) {
String toImportString = videoItem.toImportString();
if (getItems.stream().anyMatch(item -> Objects.equals(item.toImportString(), toImportString))) {
notChangeList.add(videoName);
continue;
} else {
videoItem.setItemId(getItems.get(0).getItemId());
updateVideoItems.add(videoItem);
}
} else {
videoItems.add(videoItem); videoItems.add(videoItem);
}
sucList.add(videoName); sucList.add(videoName);
} }
if (CollUtil.isNotEmpty(videoItems)) {
videoItemService.saveBatch(videoItems); videoItemService.saveBatch(videoItems);
}
if (CollUtil.isNotEmpty(updateVideoItems)) {
videoItemService.updateBatchById(updateVideoItems);
}
StringJoiner joiner = new StringJoiner(";"); StringJoiner joiner = new StringJoiner(";");
if (sucList.size() > 0) { if (sucList.size() > 0) {
joiner.add("导入成功:" + StrUtil.join(",", sucList)); joiner.add("导入成功:" + StrUtil.join(",", sucList));
@ -629,6 +650,9 @@ public class VideoItemController {
if (failGroupList.size() > 0) { if (failGroupList.size() > 0) {
joiner.add("导入失败(分组不存在):" + StrUtil.join(",", failGroupList)); joiner.add("导入失败(分组不存在):" + StrUtil.join(",", failGroupList));
} }
if (notChangeList.size() > 0) {
joiner.add("忽略相同不导入:" + StrUtil.join(",", notChangeList));
}
String result = "导入完成。" + (joiner.length() > 0 ? joiner.toString() : ""); String result = "导入完成。" + (joiner.length() > 0 ? joiner.toString() : "");
return Result.ok(result); return Result.ok(result);
} catch (OpenAlertException e) { } catch (OpenAlertException e) {

View File

@ -230,4 +230,18 @@ public class VideoItem implements Serializable {
@ApiModelProperty(value = "视频配置") @ApiModelProperty(value = "视频配置")
private ProjectVideoConfig projectVideoConfig; private ProjectVideoConfig projectVideoConfig;
public String toImportString() {
return "VideoItem{" +
", videoId=" + videoId +
", videoName='" + videoName + '\'' +
", serialNumber='" + serialNumber + '\'' +
", verificationCode='" + verificationCode + '\'' +
", deviceType=" + deviceType +
", groupId=" + groupId +
", aiFunctionType=" + aiFunctionType +
", parentObj='" + parentObj + '\'' +
", aiVideoUrl='" + aiVideoUrl + '\'' +
", defaultStreamType=" + defaultStreamType +
'}';
}
} }

View File

@ -3,7 +3,6 @@ package com.zhgd.xmgl.modules.video.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhgd.annotation.DataScope; import com.zhgd.annotation.DataScope;
import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.base.entity.vo.TrendOneVo;
import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.entity.VideoItem;
import com.zhgd.xmgl.modules.video.entity.bo.GroupVideoNumBo; import com.zhgd.xmgl.modules.video.entity.bo.GroupVideoNumBo;
import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo; import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo;
@ -184,7 +183,7 @@ public interface VideoItemMapper extends BaseMapper<VideoItem> {
*/ */
List<CountStatusVo> countStatusTrend(Map<String, Object> param); List<CountStatusVo> countStatusTrend(Map<String, Object> param);
List<TrendOneVo> getExceedSpeedTrend(Map<String, Object> map);
List<GroupVideoNumBo> getGroupVideoNumList(HashMap<String, Object> paramMap); List<GroupVideoNumBo> getGroupVideoNumList(HashMap<String, Object> paramMap);
List<VideoItem> getEnableVideoListByProjectSn(String projectSn);
} }

View File

@ -378,4 +378,13 @@
AND vg.project_sn=#{projectSn} AND vg.project_sn=#{projectSn}
group by vg.id group by vg.id
</select> </select>
<select id="getEnableVideoListByProjectSn" resultType="com.zhgd.xmgl.modules.video.entity.VideoItem">
SELECT
t1.*
FROM video_item t1
INNER JOIN project_video_config t2 ON t2.id = t1.video_id
WHERE t2.is_enable = 1
AND t2.project_sn=#{projectSn}
</select>
</mapper> </mapper>

View File

@ -3,7 +3,6 @@ package com.zhgd.xmgl.modules.video.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo;
import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig;
import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.entity.VideoItem;

View File

@ -963,6 +963,11 @@ public class VideoItemServiceImpl extends ServiceImpl<VideoItemMapper, VideoItem
return videoItemMapper.getListByProjectSn(projectSn); return videoItemMapper.getListByProjectSn(projectSn);
} }
@Override
public List<VideoItem> getEnableVideoListByProjectSn(String projectSn) {
return videoItemMapper.getEnableVideoListByProjectSn(projectSn);
}
@Override @Override
public void updateByProjectAndNvrId(Long id, int status) { public void updateByProjectAndNvrId(Long id, int status) {
videoItemMapper.updateByNvrId(id, status); videoItemMapper.updateByNvrId(id, status);

View File

@ -0,0 +1,207 @@
package com.zhgd.xmgl.modules.video.controller;
import cn.hutool.http.HttpRequest;
import java.util.Arrays;
import java.util.List;
public class VideoGroupControllerTest {
public static void main(String[] args) {
createGroup();
}
/**
* 批量创建分组
*
* @param args
*/
private static void createGroup() {
List<String> list = Arrays.asList("H01-X01方阵区域",
"H01-X02方阵区域",
"H01-X03方阵区域",
"H01-X04方阵区域",
"H01-X05方阵区域",
"H01-X06方阵区域",
"H04-X01方阵区域",
"H04-X02方阵区域",
"H04-X03方阵区域",
"H04-X04方阵区域",
"H04-X05方阵区域",
"H04-X06方阵区域",
"H04-X07方阵区域",
"H04-X08方阵区域",
"H04-X09方阵区域",
"H06-X01方阵区域",
"H06-X02方阵区域",
"H06-X03方阵区域",
"H06-X04方阵区域",
"H06-X05方阵区域",
"H06-X06方阵区域",
"H06-X07方阵区域",
"H06-X09方阵区域",
"H06-X10方阵区域",
"H07-X01方阵区域",
"H07-X02方阵区域",
"H07-X03方阵区域",
"H07-X04方阵区域",
"H07-X05方阵区域",
"H07-X06方阵区域",
"H07-X07方阵区域",
"H07-X08方阵区域",
"H07-X09方阵区域",
"H07-X10方阵区域",
"H08-X01方阵区域",
"H08-X02方阵区域",
"H08-X03方阵区域",
"H08-X04方阵区域",
"H08-X05方阵区域",
"H08-X06方阵区域",
"H08-X07方阵区域",
"H08-X08方阵区域",
"H08-X09方阵区域",
"H08-X10方阵区域",
"H09-X01方阵区域",
"H09-X02方阵区域",
"H09-X03方阵区域",
"H09-X04方阵区域",
"H09-X05方阵区域",
"H09-X06方阵区域",
"H09-X07方阵区域",
"H09-X08方阵区域",
"H09-X09方阵区域",
"H09-X10方阵区域",
"H11-X01方阵区域",
"H11-X02方阵区域",
"H11-X03方阵区域",
"H11-X04方阵区域",
"H11-X05方阵区域",
"H11-X06方阵区域",
"H11-X07方阵区域",
"H11-X08方阵区域",
"H12-X01方阵区域",
"H12-X02方阵区域",
"H12-X03方阵区域",
"H12-X04方阵区域",
"H12-X05方阵区域",
"H12-X06方阵区域",
"H12-X07方阵区域",
"H12-X08方阵区域",
"H12-X09方阵区域",
"H12-X10方阵区域",
"H13-X01方阵区域",
"H13-X02方阵区域",
"H13-X03方阵区域",
"H13-X04方阵区域",
"H13-X05方阵区域",
"H13-X06方阵区域",
"H13-X07方阵区域",
"H13-X08方阵区域",
"H13-X09方阵区域",
"H14-X01方阵区域",
"H14-X02方阵区域",
"H14-X03方阵区域",
"H14-X04方阵区域",
"H14-X05方阵区域",
"H14-X06方阵区域",
"H14-X07方阵区域",
"H14-X08方阵区域",
"H14-X09方阵区域",
"H14-X10方阵区域",
"H16-X01方阵区域",
"H16-X02方阵区域",
"H16-X03方阵区域",
"H16-X04方阵区域",
"H16-X05方阵区域",
"H16-X06方阵区域",
"H17-X01方阵区域",
"H17-X02方阵区域",
"H17-X03方阵区域",
"H17-X04方阵区域",
"H17-X05方阵区域",
"H17-X06方阵区域",
"H17-X07方阵区域",
"H18-X01方阵区域",
"H18-X02方阵区域",
"H18-X03方阵区域",
"H18-X04方阵区域",
"H18-X05方阵区域",
"H18-X06方阵区域",
"H18-X07方阵区域",
"H18-X08方阵区域",
"H18-X09方阵区域",
"H19-X01方阵区域",
"H19-X02方阵区域",
"H19-X03方阵区域",
"H19-X04方阵区域",
"H19-X05方阵区域",
"H19-X06方阵区域",
"H19-X07方阵区域",
"H19-X08方阵区域",
"H19-X09方阵区域",
"H20-X01方阵区域",
"H20-X02方阵区域",
"H20-X03方阵区域",
"H20-X04方阵区域",
"H20-X05方阵区域",
"H20-X06方阵区域",
"H20-X07方阵区域",
"H20-X08方阵区域",
"H20-X09方阵区域",
"H21-X01方阵区域",
"H21-X02方阵区域",
"H21-X03方阵区域",
"H21-X04方阵区域",
"H21-X05方阵区域",
"H21-X06方阵区域",
"H21-X07方阵区域",
"H21-X08方阵区域",
"H21-X09方阵区域",
"H21-X10方阵区域",
"H22-X01方阵区域",
"H22-X02方阵区域",
"H22-X03方阵区域",
"H22-X04方阵区域",
"H22-X05方阵区域",
"H22-X06方阵区域",
"H22-X07方阵区域",
"H22-X08方阵区域",
"H22-X09方阵区域",
"H22-X10方阵区域",
"H23-X01方阵区域",
"H23-X02方阵区域",
"H23-X03方阵区域",
"H23-X04方阵区域",
"H23-X05方阵区域",
"H23-X06方阵区域",
"H23-X07方阵区域",
"H23-X08方阵区域",
"H23-X09方阵区域",
"H23-X10方阵区域",
"H23-X11方阵区域",
"H24-X01方阵区域",
"H24-X02方阵区域",
"H24-X03方阵区域",
"H24-X04方阵区域",
"H24-X05方阵区域",
"H24-X06方阵区域",
"H24-X07方阵区域",
"H24-X08方阵区域");
for (String name : list) {
String body = HttpRequest.post("http://gszhdz.crpower.com.cn:9809/xmgl/videoGroup/add")
.body("{\n" +
" \"groupName\": \"" + name + "\",\n" +
" \"totalNum\": 0,\n" +
" \"children\": [],\n" +
" \"id\": \"1971489920436301826\",\n" +
" \"parentObj\": \"{\\\"groupName\\\":\\\"光伏区域\\\",\\\"totalNum\\\":0,\\\"children\\\":[],\\\"id\\\":\\\"1971489920436301826\\\",\\\"ancestors\\\":\\\"0\\\",\\\"projectSn\\\":\\\"5BFE355FC95F4350A0DE9D308BABE727\\\",\\\"parentId\\\":0}\",\n" +
" \"ancestors\": \"0\",\n" +
" \"projectSn\": \"5BFE355FC95F4350A0DE9D308BABE727\",\n" +
" \"parentId\": \"1971489920436301826\"\n" +
"}").header("authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVPdXQiOjAsImV4cCI6MTc4OTk3ODc0NywidXVpZCI6IjQyMjljYTI0MDgzNTQ3OGViNTgxMGY2OTRiMjRlMzljIiwiaWF0IjoxNzU4ODc0NzQ3LCJhY2NvdW50IjoieW9uZ2RlbmcifQ.GgAz7Ztb6lrnhbehSqwM0cx1xy8VdexGsYCpJwYAyTk")
.execute().body();
System.out.println(body);
}
}
}