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();