sgj
3 天以前 00135bb6a8477a574aeb6ec6c7883f5c8e770e21
智能抓拍修改提交
已修改6个文件
208 ■■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/SnapRecord.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapRecordService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SnapRecordController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/static/security/snap/snapRecord.js 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/security/snap/snapRecord/snapRecord.html 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/SnapRecord.java
@@ -43,6 +43,10 @@
    @TableField("result")
    private String result = "SUCCESS";
    @Column(name = "tags", columnDefinition = "varchar(100) COMMENT '标签'")
    @TableField("tags")
    private String tags ;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "snap_time", columnDefinition = "datetime COMMENT '抓拍时间'")
    @TableField("snap_time")
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapRecordService.java
@@ -47,6 +47,19 @@
        if (StringUtils.isNotBlank(param.getDeptId())) {
            queryWrapper.eq("dept_id", param.getDeptId());
        }
        if (StringUtils.isNotBlank(param.getDepotId())) {
            queryWrapper.eq("depot_id", param.getDepotId());
        }
        //标签检索
        if (StringUtils.isNotBlank(param.getKey())) {
            queryWrapper.like("tags", param.getKey());
        }
        //抓拍时间检索
        if (param.getStart() != null && param.getEnd() != null) {
            queryWrapper.between("snap_time", param.getStart(), param.getEnd());
        }
        queryWrapper.orderByDesc("create_time");
        return queryWrapper;
fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/security/SnapRecordController.java
@@ -5,6 +5,7 @@
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.data.PageResponse;
import com.fzzy.igds.domain.SnapRecord;
import com.fzzy.sys.manager.common.CommonManager;
import com.fzzy.sys.manager.security.SnapRecordManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
@@ -27,6 +28,9 @@
    @Resource
    private SnapRecordManager snapRecordManager;
    @Resource
    private CommonManager commonManager;
    /**
     * 获取智能抓拍页面
     */
@@ -42,6 +46,7 @@
        model.addAttribute("currentPage", images.getCurrent());
        model.addAttribute("totalItems", images.getTotal());
        model.addAttribute("pageSize", images.getSize());
        model.addAttribute("cameraList", commonManager.listCameraData());
        return prefix + "/snapRecord";
    }
@@ -55,9 +60,7 @@
    @ResponseBody
    public PageResponse<Page<SnapRecord>> pageData(@RequestBody IgdsBaseParam param) {
        Page<SnapRecord> snapRecordPage = snapRecordManager.pageData(param);
        if (null == snapRecordPage.getRecords() || snapRecordPage.getRecords().isEmpty()) {
            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "获取到数据信息为空");
        }
        //            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "获取到数据信息为空");
        return new PageResponse<>(RespCodeEnum.CODE_0000, snapRecordPage);
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/common/CommonManager.java
@@ -1,11 +1,13 @@
package com.fzzy.sys.manager.common;
import com.fzzy.igds.constant.DepotType;
import com.fzzy.igds.domain.Camera;
import com.fzzy.igds.domain.Depot;
import com.fzzy.igds.domain.Dept;
import com.fzzy.igds.service.CoreDeptService;
import com.fzzy.igds.service.DepotService;
import com.fzzy.igds.service.DicService;
import com.fzzy.igds.service.SecCameraService;
import com.fzzy.igds.utils.ContextUtil;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.SysUser;
@@ -33,6 +35,9 @@
    private DicService dicService;
    @Resource
    private CoreDeptService coreDeptService;
    @Autowired
    private SecCameraService secCameraService;
    @Autowired
    private ISysUserService userService;
@@ -110,4 +115,15 @@
        user.setDeptId(Long.valueOf(ContextUtil.subDeptId(null)));
        return userService.selectUserList(user);
    }
    /**
     * 获取设备列表
     *
     * @author sgj
     * @date 2025/12/12
     */
    public  List<Camera>  listCameraData() {
        return secCameraService.listCamera(ContextUtil.getCompanyId(),ContextUtil.subDeptId(null));
    }
}
fzzy-igdss-web/src/main/resources/static/security/snap/snapRecord.js
@@ -24,7 +24,9 @@
        count: typeof totalItems !== 'undefined' ? totalItems : 0,
        limit: typeof pageSize !== 'undefined' ? pageSize : 6,
        curr: typeof currentPage !== 'undefined' ? currentPage : 1,
        layout: [ 'prev', 'page', 'next', 'refresh', 'skip'],
        layout: [ 'prev',  'next', ],
        prev: '<i class="layui-icon layui-icon-left"></i>',
        next: '<i class="layui-icon layui-icon-right"></i>',
        jump: function (obj, first) {
            if (!first) {
                searchRecord(obj.curr, obj.limit)
@@ -45,7 +47,9 @@
        count: totalCount,
        limit: pageSize,
        curr: currentPage,
        layout: ['prev', 'page', 'next', 'refresh', 'skip'],
        layout: ['prev',  'next', ],
        prev: '<i class="layui-icon layui-icon-left"></i>',
        next: '<i class="layui-icon layui-icon-right"></i>',
        jump: function (obj, first) {
            if (!first) {
                searchRecord(obj.curr, obj.limit)
@@ -94,7 +98,8 @@
    // 添加表单查询条件
    var form = document.getElementById('snapRecord-form');
    if (form) {
        var inputs = form.querySelectorAll('input[name], select[name]');
        // 处理普通输入框和选择框
        var inputs = form.querySelectorAll('input[name]:not([type="hidden"]), select[name]');
        inputs.forEach(function(input) {
            if (input.value) { // 只添加非空值
                params[input.name] = input.value;
@@ -136,53 +141,79 @@
    // 生成图片卡片
    var html = '';
    records.forEach(function(record) {
        //标签展示
        var tagsHtml = '';
        if (record.tags) {
            var tags = record.tags.split(',');
            tags.forEach(function(tag) {
                tagsHtml += `
            <span class="tag-person">
                <i class="layui-icon layui-icon-note"></i>
                <span>${tag.trim()}</span>
            </span>
        `;
            });
        }
        html += `
            <div class="gallery-item">
                <img  src="${record.imgName || '/logo-sm.png'}" alt="${record.id}"
                     data-url="${record.imgName || '/logo-sm.png'}" data-id="${record.id}"
                     class="gallery-img" onclick="showSnapRecordPreview(this.getAttribute('data-url'))">
                <div class="gallery-info">
                    <div class="gallery-header">
<!--                        <h3 class="gallery-title">${record.id}</h3>-->
                        <div class="gallery-tags">
                            <span class="tag-person">
                                <i class="layui-icon layui-icon-note"></i>
                                <span>汽车</span>
                            </span>
                            <span class="tag-person">
                                <i class="layui-icon layui-icon-note"></i>
                                <span>卡车</span>
                            </span>
                            <span class="tag-person">
                                <i class="layui-icon layui-icon-note"></i>
                                <span>翻斗车</span>
                            </span>
                        </div>
                    </div>
                    <div class="gallery-meta">
                         <div style="display: flex; align-items: center; gap: 15px;width: 100%">
                             <div class="meta-item" style="width: 50%">
                                <i class="layui-icon layui-icon-video"></i>
                                <span>${record.cameraId || ''}</span>
                            </div>
                            <div class="meta-item" style="width: 50%">
                                <i class="layui-icon layui-icon-date"></i>
                                <span>${formatDate(record.snapTime)}</span>
                            </div>
                         </div>
                        <div class="meta-item">
                            <i class="layui-icon layui-icon-home"></i>
                            <span>${record.deptId || ''}</span>
                        </div>
                    </div>
    <div class="gallery-item">
        <img  src="${record.imgName || '/logo-sm.png'}" alt="${record.id}"
             data-url="${record.imgName || '/logo-sm.png'}" data-id="${record.id}"
             class="gallery-img" onclick="showSnapRecordPreview(this.getAttribute('data-url'))">
        <div class="gallery-info">
            <div class="gallery-header">
                <div class="gallery-tags">
                    ${tagsHtml}
                </div>
            </div>
        `;
            <div class="gallery-meta">
                 <div style="display: flex; align-items: center; gap: 15px;width: 100%">
                     <div class="meta-item" style="width: 50%">
                        <i class="layui-icon layui-icon-video"></i>
                        <span>${getCameraName(record.cameraId) || record.cameraId || ''}</span>
                    </div>
                    <div class="meta-item" style="width: 50%">
                        <i class="layui-icon layui-icon-date"></i>
                        <span>${formatDate(record.snapTime)}</span>
                    </div>
                 </div>
<!--
  <div class="meta-item">
                    <i class="layui-icon layui-icon-home"></i>
                    <span>${record.deptId || ''}</span>
                 </div>
 -->
            </div>
        </div>
    </div>
`;
    });
    container.innerHTML = html;
}
/**
 * 根据摄像头ID获取摄像头名称
 * @param {string} cameraId - 摄像头ID
 * @returns {string|null} 摄像头名称或null
 */
function getCameraName(cameraId) {
    // 确保cameraList存在且为数组
    if (typeof cameraList !== 'undefined' && Array.isArray(cameraList) && cameraId) {
        // 查找匹配的摄像头对象
        var camera = cameraList.find(function(item) {
            return item.id === cameraId;
        });
        // 返回摄像头名称,如果找不到则返回null
        return camera ? camera.name : null;
    }
    return null;
}
/**
 * 格式化日期
 * @param {string|number} date - 日期字符串或时间戳
fzzy-igdss-web/src/main/resources/templates/security/snap/snapRecord/snapRecord.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
@@ -17,8 +17,14 @@
            <form id="snapRecord-form">
                <div class="select-list">
                    <ul>
                        <li class="select-time">
                            <label style="width: 100px">抓拍时间: </label>
                            <input type="text" class="time-input" id="start" placeholder="开始时间" name="start"/>
                            <span>-</span>
                            <input type="text" class="time-input" id="end" placeholder="结束时间" name="end"/>
                        </li>
                        <li>
                            所属库区:<input type="text" name="deptId"/>
                            标签:<input type="text" name="key"/>
                        </li>
                        <li>
                            <a class="btn btn-primary btn-rounded btn-sm" onclick="searchRecord()"><i
@@ -56,17 +62,9 @@
                            <!--                            <h3 class="gallery-title" th:text="${snapRecord.id}"></h3>-->
                            <!-- 标签列表 -->
                            <div class="gallery-tags">
                                <span class="tag-person">
                                <span th:each="tag : ${#strings.arraySplit(snapRecord.tags, ',')}" class="tag-person">
                                    <i class="layui-icon layui-icon-note"></i>
                                    <span>汽车</span>
                                </span>
                                <span class="tag-person">
                                    <i class="layui-icon layui-icon-note"></i>
                                    <span>卡车</span>
                                </span>
                                <span class="tag-person">
                                    <i class="layui-icon layui-icon-note"></i>
                                    <span>翻斗车</span>
                                    <span th:text="${tag}"></span>
                                </span>
                            </div>
                        </div>
@@ -75,17 +73,30 @@
                            <div style="display: flex; align-items: center; gap: 15px;width: 100%">
                                <div class="meta-item" style="width: 50%">
                                    <i class="layui-icon layui-icon-video"></i>
                                    <span th:text="${snapRecord.cameraId}"></span>
                                    <!-- 使用标志变量记录是否已匹配 -->
                                    <th:block th:with="matchedCameras=${cameraList.?[id == #root.snapRecord.cameraId]}">
                                        <!-- 如果有匹配项,显示第一个匹配的摄像头名称 -->
                                        <th:block th:if="${!#lists.isEmpty(matchedCameras)}">
                                            <span th:text="${matchedCameras[0].name}"></span>
                                        </th:block>
                                        <!-- 如果没有匹配项,显示原始ID -->
                                        <th:block th:if="${#lists.isEmpty(matchedCameras)}">
                                            <span th:text="${snapRecord.cameraId}"></span>
                                        </th:block>
                                    </th:block>
                                </div>
                                <div class="meta-item" style="width: 50%">
                                    <i class="layui-icon layui-icon-date"></i>
                                    <span th:text="${#dates.format(snapRecord.snapTime, 'yyyy-MM-dd HH:mm')}"></span>
                                </div>
                                    <span th:text="${snapRecord.snapTime != null ? #dates.format(snapRecord.snapTime, 'yyyy-MM-dd HH:mm') : '无时间'}"></span>                                </div>
                            </div>
                            <div class="meta-item">
                                <i class="layui-icon layui-icon-home"></i>
                                <span th:text="${snapRecord.deptId}"></span>
                            </div>
                            <!--                            <div class="meta-item">-->
                            <!--                                <i class="layui-icon layui-icon-home"></i>-->
                            <!--                                <span th:text="${snapRecord.deptId}"></span>-->
                            <!--                            </div>-->
                        </div>
                    </div>
                </div>
@@ -112,9 +123,11 @@
<script th:src="@{/ajax/libs/layui-ruoyi/layui.js}"></script>
<script th:src="@{/security/snap/snapRecord.js}"></script>
<script th:inline="javascript">
    var cameraList = [[${cameraList}]];
    var currentPage = [[${currentPage}]];
    var totalItems = [[${totalItems}]];
    var pageSize = [[${pageSize}]];
</script>
</body>