From 03a64da51a8e90b05683b1570c1ad648dfeb5ef0 Mon Sep 17 00:00:00 2001
From: guoshengxiong <1923636941@qq.com>
Date: Thu, 16 Oct 2025 17:03:06 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=A1=AB=E9=94=99?=
=?UTF-8?q?=E4=BA=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/resources/application.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8dab6c587..f71a64400 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -220,6 +220,6 @@ rengzhicekong.hj212.port=24041
#上传文件限制
# 文件上传允许的扩展名
file.upload.allowed-extensions=jpg,jpeg,png,gif,bmp,webp,svg,tiff,ico,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtf,csv,mp4,avi,mov,wmv,flv,mkv,webm,m4v,3gp,mp3,wav,ogg,flac,aac,wma,m4a,zip,rar,7z,tar,gz,apk,html,htm
-file.upload.allowed-mime-types=image/jpeg,image/png,image/gif,image/bmp,image/webp,image/svg+xml,image/tiff,image/x-icon,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,text/plain,application/rtf,text/csv,video/mp4,video/x-msvideo,video/quicktime,video/x-ms-wmv,video/x-flv,video/x-matroska,video/webm,video/3gpp,audio/mpeg,audio/wav,audio/ogg,audio/flac,audio/aac,audio/x-ms-wma,audio/mp4,application/zip,application/x-rar-compressed,application/x-7z-compressed,application/x-tar,application/gzip,application/vnd.android.package-archive,text/html#mcs8下载选择的是http内网、外网
+file.upload.allowed-mime-types=image/jpeg,image/png,image/gif,image/bmp,image/webp,image/svg+xml,image/tiff,image/x-icon,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,text/plain,application/rtf,text/csv,video/mp4,video/x-msvideo,video/quicktime,video/x-ms-wmv,video/x-flv,video/x-matroska,video/webm,video/3gpp,audio/mpeg,audio/wav,audio/ogg,audio/flac,audio/aac,audio/x-ms-wma,audio/mp4,application/zip,application/x-rar-compressed,application/x-7z-compressed,application/x-tar,application/gzip,application/vnd.android.package-archive,text/html
#mcs8下载选择的是http内网、外网
mcs8.download.http.type=
From 32913ad71886e5e8392ed6aff47649e97b45897a Mon Sep 17 00:00:00 2001
From: guoshengxiong <1923636941@qq.com>
Date: Fri, 17 Oct 2025 18:46:38 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=A5=A8bug=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/policecamera/mapper/xml/WorkTicketMapper.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/WorkTicketMapper.xml b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/WorkTicketMapper.xml
index a0fb9f9a2..cf6effec0 100644
--- a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/WorkTicketMapper.xml
+++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/WorkTicketMapper.xml
@@ -30,6 +30,9 @@
,ifnull(sum(if(t.status=3,1,0)),0) as pause
,ifnull(sum(if(t.status=4,1,0)),0) as done
from work_ticket t
- where t.project_sn=#{projectSn}
+ where 1=1
+
+ and t.project_sn = #{projectSn}
+
From 8c228f14954dda842cf3ca637bf3915ab691a818 Mon Sep 17 00:00:00 2001
From: guoshengxiong <1923636941@qq.com>
Date: Fri, 17 Oct 2025 18:47:14 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=BF=E6=8D=A2wss?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/zhgd/xmgl/util/HikVideoUtil.java | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java b/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java
index f56c8a278..61710f3b5 100644
--- a/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java
+++ b/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java
@@ -14,6 +14,7 @@ import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.util.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
import java.util.*;
@@ -25,6 +26,18 @@ import java.util.*;
**/
@Slf4j
public class HikVideoUtil {
+ private static String replaceWssFrom;
+ private static String replaceWssTo;
+
+ @Value("${replaceWssFrom:wss://hrdl.zhgdyun.com}")
+ public void setReplaceWssFrom(String replaceWssFrom) {
+ HikVideoUtil.replaceWssFrom = replaceWssFrom;
+ }
+
+ @Value("${replaceWssTo:wss://sp.szjxj.com}")
+ public void setReplaceWssTo(String replaceWssTo) {
+ HikVideoUtil.replaceWssTo = replaceWssTo;
+ }
private static final String ARTEMIS_PATH = "/artemis";
@@ -81,6 +94,10 @@ public class HikVideoUtil {
if ("0".equals((String) json.get("code"))) {
JSONObject object2 = (JSONObject) json.get("data");
url = (String) object2.get("url");
+ //替换wss域名
+ if (url.startsWith(HikVideoUtil.replaceWssFrom)) {
+ url = StrUtil.replace(url, HikVideoUtil.replaceWssFrom, HikVideoUtil.replaceWssTo);
+ }
}
} else {
throw new OpenAlertException(MessageUtil.get("failErr"));
From 76694a1b17014b9077ffb2a6c9ab6d6433613410 Mon Sep 17 00:00:00 2001
From: guoshengxiong <1923636941@qq.com>
Date: Fri, 17 Oct 2025 18:48:18 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E7=9A=84=E6=A0=91=E5=BD=A2=E9=A1=B9=E7=9B=AE=E5=92=8C=E7=9B=91?=
=?UTF-8?q?=E6=8E=A7=E5=88=86=E7=BB=84=E5=92=8C=E7=9B=91=E6=8E=A7=E5=88=97?=
=?UTF-8?q?=E8=A1=A8=E5=92=8C=E4=BA=91=E7=AB=AF=E6=A0=B9=E6=8D=AE=E6=9D=A1?=
=?UTF-8?q?=E4=BB=B6=E5=88=A0=E9=99=A4=E6=89=A7=E6=B3=95=E8=AE=B0=E5=BD=95?=
=?UTF-8?q?=E4=BB=AA=E6=96=87=E4=BB=B6=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../PoliceCameraItemFileController.java | 39 ++++++-
.../entity/PoliceCameraItemFile.java | 4 +
.../entity/vo/PoliceCameraItemFileVo.java | 2 +
.../mapper/xml/PoliceCameraItemFileMapper.xml | 6 +
.../project/controller/ProjectController.java | 15 ++-
.../entity/vo/TreeProjectVideoListVo.java | 108 ++++++++++++++++++
.../modules/project/mapper/ProjectMapper.java | 2 +-
.../project/mapper/xml/ProjectMapper.xml | 22 ++--
.../project/service/IProjectService.java | 2 +
.../service/impl/ProjectServiceImpl.java | 79 +++++++++++++
10 files changed, 263 insertions(+), 16 deletions(-)
create mode 100644 src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java
diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemFileController.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemFileController.java
index 4f1b97237..e950c1efe 100644
--- a/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemFileController.java
+++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemFileController.java
@@ -1,6 +1,8 @@
package com.zhgd.xmgl.modules.policecamera.controller;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result;
@@ -11,6 +13,7 @@ import com.zhgd.xmgl.modules.policecamera.entity.dto.PoliceCameraItemFileDto;
import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemFileVo;
import com.zhgd.xmgl.modules.policecamera.service.IPoliceCameraItemFileService;
import com.zhgd.xmgl.modules.policecamera.service.IProjectPoliceCameraConfigService;
+import com.zhgd.xmgl.util.PathUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -23,10 +26,8 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
/**
@@ -61,6 +62,7 @@ public class PoliceCameraItemFileController {
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"),
+ @ApiImplicitParam(name = "externalIdIsNull", value = "1前端上传的文件", paramType = "query", required = true, dataType = "Integer"),
})
@GetMapping(value = "/page")
public Result> queryPageList(@ApiIgnore @RequestParam HashMap param) {
@@ -169,4 +171,33 @@ public class PoliceCameraItemFileController {
}
return Result.ok();
}
+
+ @OperLog(operModul = "执法记录仪文件管理", operType = "删除", operDesc = "根据条件删除执法记录仪文件信息")
+ @ApiOperation(value = "根据条件删除执法记录仪文件信息", notes = "根据条件删除执法记录仪文件信息", httpMethod = "POST")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deleteFileModel", value = "1删除记录和文件2只删除记录不删除文件3只删除文件不删除记录", paramType = "query", required = true, dataType = "String"),
+ @ApiImplicitParam(name = "createDate_begin", value = "查询开始日期yyyy-MM-dd HH:mm:ss", paramType = "query", required = false, dataType = "String"),
+ @ApiImplicitParam(name = "createDate_end", value = "查询结束日期yyyy-MM-dd HH:mm:ss", paramType = "query", required = false, dataType = "String"),
+ })
+ @PostMapping(value = "/deleteBy")
+ public Result deleteBy(@ApiIgnore @RequestBody HashMap map) {
+ List vos = policeCameraItemFileService.queryList(map);
+ if (CollUtil.isNotEmpty(vos)) {
+ Integer deleteFileModel = MapUtils.getInteger(map, "deleteFileModel");
+ if (Objects.equals(deleteFileModel, 1) || Objects.equals(deleteFileModel, 2)) {
+ List ids = vos.stream().map(PoliceCameraItemFileVo::getId).collect(Collectors.toList());
+ policeCameraItemFileService.removeByIds(ids);
+ }
+ if (Objects.equals(deleteFileModel, 1) || Objects.equals(deleteFileModel, 3)) {
+ for (PoliceCameraItemFileVo vo : vos) {
+ try {
+ FileUtil.del(PathUtil.getBasePath() + "/" + vo.getFileUrl());
+ } catch (Exception e) {
+ log.warn("执法记录仪文件删除失败:",e);
+ }
+ }
+ }
+ }
+ return Result.ok();
+ }
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItemFile.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItemFile.java
index a7a7c9503..182537c5d 100644
--- a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItemFile.java
+++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItemFile.java
@@ -60,11 +60,15 @@ public class PoliceCameraItemFile implements Serializable {
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private java.util.Date createDate;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private java.util.Date updateDate;
/**
* 0 其它,1 图片,2 音频,3 视频
diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/PoliceCameraItemFileVo.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/PoliceCameraItemFileVo.java
index d877df98e..7f2038293 100644
--- a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/PoliceCameraItemFileVo.java
+++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/PoliceCameraItemFileVo.java
@@ -23,4 +23,6 @@ public class PoliceCameraItemFileVo extends PoliceCameraItemFile {
*/
@ApiModelProperty(value = "工作票编号")
private java.lang.String workTicketNumber;
+ @ApiModelProperty(value = "项目名称")
+ private String projectName;
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemFileMapper.xml b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemFileMapper.xml
index 60c760026..35edd89ab 100644
--- a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemFileMapper.xml
+++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemFileMapper.xml
@@ -7,11 +7,17 @@
,pci.dev_name
,wtt.type_name
,wt.work_ticket_number
+ ,p.project_name
from police_camera_item_file t
left join police_camera_item pci on pci.item_id=t.item_id
left join work_ticket_history wth on wth.id = t.history_id
left join work_ticket wt on wt.id = wth.work_ticket_id
left join work_ticket_type wtt on wtt.id=wt.type_id
+ join project p on p.project_sn=t.project_sn
+ where 1=1
+
+ and t.external_id is null
+
)t
${ew.customSqlSegment}
diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java
index b07f68278..b60274bf7 100644
--- a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java
+++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java
@@ -105,8 +105,8 @@ public class ProjectController {
}
- @OperLog(operModul = "项目管理", operType = "查询", operDesc = "查询企业所属项目列表")
- @ApiOperation(value = "查询企业所属项目列表", notes = "查询企业所属项目列表")
+ @OperLog(operModul = "项目管理", operType = "查询", operDesc = "查询企业市区所属项目列表")
+ @ApiOperation(value = "查询企业市区所属项目列表", notes = "查询企业市区所属项目列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectName", value = "项目名称", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "companySn", value = "企业市区唯一标识", paramType = "body", required = false, dataType = "String"),
@@ -481,5 +481,14 @@ public class ProjectController {
return Result.success(projectService.getProjectExtendInfo(map));
}
-
+ @OperLog(operModul = "项目管理", operType = "", operDesc = "查询企业的树形项目和监控分组和监控列表")
+ @ApiOperation(value = "查询企业的树形项目和监控分组和监控列表", notes = "查询企业的树形项目和监控分组和监控列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "sn", value = "企业sn", paramType = "body", required = true, dataType = "String"),
+ @ApiImplicitParam(name = "name", value = "名称", paramType = "body", required = false, dataType = "String"),
+ })
+ @PostMapping("/tree/projectList/video")
+ public Result> selectTreeProjectVideoList(@RequestBody HashMap map) {
+ return Result.success(projectService.selectTreeProjectVideoList(map));
+ }
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java
new file mode 100644
index 000000000..acbbf21dc
--- /dev/null
+++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java
@@ -0,0 +1,108 @@
+package com.zhgd.xmgl.modules.project.entity.vo;
+
+import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig;
+import com.zhgd.xmgl.modules.video.entity.VideoItem;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TreeProjectVideoListVo {
+ /**
+ * id
+ */
+ @ApiModelProperty(value = "id")
+ private java.lang.String id;
+ /**
+ * 父Id
+ */
+ @ApiModelProperty(value = "父Id")
+ private java.lang.String parentId;
+ /**
+ * 名称
+ */
+ @ApiModelProperty(value = "名称")
+ private java.lang.String name;
+ /**
+ * project项目group监控分组video监控
+ */
+ @ApiModelProperty(value = "project项目group监控分组video监控")
+ private java.lang.String type;
+// /**
+// * 项目唯一标识
+// */
+// @ApiModelProperty(value = "项目唯一标识")
+// private java.lang.String projectSn;
+ private VideoItem videoItem;
+ private ProjectVideoConfig projectVideoConfig;
+ private List children;
+ /**
+ * 监控类型枚举
+ */
+ public static enum MonitorType {
+
+ /**
+ * 项目监控 (例如:统计一个项目下的所有资源)
+ */
+ PROJECT("project", "项目监控"),
+
+ /**
+ * 分组监控 (例如:统计一个分组下的设备或用户)
+ */
+ GROUP("group", "分组监控"),
+
+ /**
+ * 视频监控 (例如:针对单个视频流或摄像头的监控)
+ */
+ VIDEO("video", "视频监控");
+
+ /**
+ * 内部代码/标识符 (可用于数据库存储或API传输)
+ */
+ private final String code;
+
+ /**
+ * 描述/中文名称
+ */
+ private final String description;
+
+ /**
+ * 构造方法
+ * @param code 标识代码
+ * @param description 描述
+ */
+ MonitorType(String code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ /**
+ * 获取代码/标识符
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * 获取描述/中文名称
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * 根据代码获取枚举实例
+ * @param code 标识代码
+ * @return 对应的枚举实例,如果不存在则返回 null
+ */
+ public static MonitorType fromCode(String code) {
+ for (MonitorType type : MonitorType.values()) {
+ if (type.code.equalsIgnoreCase(code)) {
+ return type;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectMapper.java b/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectMapper.java
index 95f90452f..d2baa0407 100644
--- a/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectMapper.java
+++ b/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectMapper.java
@@ -265,5 +265,5 @@ public interface ProjectMapper extends BaseMapper {
boolean hasProjectSnAccessByNewUser(@Param("userId") Long userId, @Param("sn") String sn);
- List selectProjectListByCompanySn(HashMap map);
+ List selectProjectListByCompanySn(@Param("param") Map map);
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml b/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml
index 5bbabc9e3..9a74e8508 100644
--- a/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml
+++ b/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProjectMapper.xml
@@ -761,17 +761,23 @@
INNER JOIN company b ON cp.parent_id = b.company_id
Left JOIN company f ON b.parent_id = f.company_id
-
- and f.headquarters_sn = #{sn}
+
+ and a.project_name like CONCAT(CONCAT('%', #{param.projectName}), '%')
-
- and f.company_sn = #{sn}
+
+ and b.headquarters_sn = #{param.sn}
-
- and b.company_sn = #{sn}
+
+ and f.company_sn = #{param.sn}
-
- and cp.company_sn = #{sn}
+
+ and b.company_sn = #{param.sn}
+
+
+ and a.project_sn = #{param.sn}
+
+
+ and cp.company_sn = #{param.sn}
diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/IProjectService.java b/src/main/java/com/zhgd/xmgl/modules/project/service/IProjectService.java
index bd94da753..901504f94 100644
--- a/src/main/java/com/zhgd/xmgl/modules/project/service/IProjectService.java
+++ b/src/main/java/com/zhgd/xmgl/modules/project/service/IProjectService.java
@@ -236,4 +236,6 @@ public interface IProjectService extends IService {
boolean hasProjectSnAccessByNewUser(Long userId, String sn);
List selectProjectListByCompanySn(HashMap map);
+
+ List selectTreeProjectVideoList(HashMap map);
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java
index 115bd780a..b5936c2d4 100644
--- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java
@@ -1,6 +1,7 @@
package com.zhgd.xmgl.modules.project.service.impl;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
@@ -10,6 +11,8 @@ import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -61,6 +64,7 @@ import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
import com.zhgd.xmgl.modules.policecamera.service.IPoliceCameraItemService;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.entity.ProjectConfig;
+import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig;
import com.zhgd.xmgl.modules.project.entity.WSSsdrAddress;
import com.zhgd.xmgl.modules.project.entity.dto.CompanyProjectStat;
import com.zhgd.xmgl.modules.project.entity.dto.ProjectDevStat;
@@ -80,6 +84,8 @@ import com.zhgd.xmgl.modules.video.entity.VideoItem;
import com.zhgd.xmgl.modules.video.mapper.VideoGroupMapper;
import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
import com.zhgd.xmgl.modules.video.service.IAiAnalyseHardWareRecordService;
+import com.zhgd.xmgl.modules.video.service.IVideoGroupService;
+import com.zhgd.xmgl.modules.video.service.impl.VideoItemServiceImpl;
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
import com.zhgd.xmgl.modules.worker.service.*;
import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityDangerField;
@@ -227,6 +233,12 @@ public class ProjectServiceImpl extends ServiceImpl impl
@Lazy
@Autowired
private IXzSecurityDangerFieldService xzSecurityDangerFieldService;
+ @Lazy
+ @Autowired
+ private IVideoGroupService videoGroupService;
+ @Lazy
+ @Autowired
+ private VideoItemServiceImpl videoItemService;
@Override
public List getProjectSnList(String sn) {
@@ -452,9 +464,76 @@ public class ProjectServiceImpl extends ServiceImpl impl
@Override
public List selectProjectListByCompanySn(HashMap map) {
+ companyService.getCompanyType(map);
return baseMapper.selectProjectListByCompanySn(map);
}
+ @Override
+ public List selectTreeProjectVideoList(HashMap map) {
+ List projects = this.selectProjectListByCompanySn(map);
+ if (CollUtil.isEmpty(projects)) {
+ return null;
+ }
+ List voList = projects.stream().map(p->{
+ TreeProjectVideoListVo vo = new TreeProjectVideoListVo();
+ vo.setId(p.getProjectSn());
+ vo.setParentId("0");
+ vo.setName(p.getProjectName());
+ vo.setType(TreeProjectVideoListVo.MonitorType.PROJECT.getCode());
+ return vo;
+ }).collect(Collectors.toList());
+ List projectSns = projects.stream().map(Project::getProjectSn).collect(Collectors.toList());
+ List groups = videoGroupService.list(new LambdaQueryWrapper()
+ .in(VideoGroup::getProjectSn, projectSns));
+ List groupsVoList = groups.stream().map(g -> {
+ TreeProjectVideoListVo vo = new TreeProjectVideoListVo();
+ vo.setId(TreeProjectVideoListVo.MonitorType.GROUP.getCode() + "_" + g.getId());
+ String parentId = "";
+ if (Objects.equals(g.getParentId(), 0L)) {
+ parentId = g.getProjectSn();
+ } else {
+ parentId = TreeProjectVideoListVo.MonitorType.GROUP.getCode() + "_" + g.getParentId();
+ }
+ vo.setParentId(parentId);
+ vo.setName(g.getGroupName());
+ vo.setType(TreeProjectVideoListVo.MonitorType.GROUP.getCode());
+ return vo;
+ }).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(groupsVoList)) {
+ voList.addAll(groupsVoList);
+ }
+ List configs = projectVideoConfigService.list(new LambdaQueryWrapper()
+ .in(ProjectVideoConfig::getProjectSn, projectSns)
+ .eq(ProjectVideoConfig::getIsEnable, 1)
+ );
+ List groupIds = groups.stream().map(VideoGroup::getId).collect(Collectors.toList());
+ List configIds = configs.stream().map(ProjectVideoConfig::getId).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(groupIds)&&CollUtil.isNotEmpty(configIds)) {
+ List items = videoItemService.list(new LambdaQueryWrapper()
+ .in(VideoItem::getGroupId, groupIds)
+ .in(VideoItem::getVideoId, configIds)
+ );
+ Map configMap = configs.stream().collect(Collectors.toMap(ProjectVideoConfig::getId, Function.identity(), (o1, o2) -> o1));
+ List itemVoList = items.stream().map(i -> {
+ TreeProjectVideoListVo vo = new TreeProjectVideoListVo();
+ vo.setId(TreeProjectVideoListVo.MonitorType.VIDEO.getCode() + "_" + i.getItemId());
+ vo.setParentId(TreeProjectVideoListVo.MonitorType.GROUP.getCode()+"_"+i.getGroupId());
+ vo.setName(i.getVideoName());
+ vo.setType(TreeProjectVideoListVo.MonitorType.VIDEO.getCode());
+ vo.setVideoItem(i);
+ vo.setProjectVideoConfig(configMap.get(i.getVideoId()));
+ return vo;
+ }).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(itemVoList)) {
+ voList.addAll(itemVoList);
+ }
+ }
+ String name = MapUtils.getString(map, "name");
+ List rtVoList = BeanUtil.copyToList(TreeUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(voList)), "id", "parentId", "children", "name", name), TreeProjectVideoListVo.class);
+ rtVoList = rtVoList.stream().filter(v -> Objects.equals(v.getType(), TreeProjectVideoListVo.MonitorType.PROJECT.getCode())).collect(Collectors.toList());
+ return rtVoList;
+ }
+
@Override
public void saveZwProject(ZwProjectDataVo zwProjectDataVo) {
Project project = new Project();