feat: video/list接口支持isOnline在线状态查询和筛选
- VideoDO/VideoCO 新增 isOnline、type 字段 - VideoPageQry 新增 eqIsOnline 查询参数 - 查询改为 LEFT JOIN vi_video 视图,通过 video_resource_id 关联 - xgfPersonAuditList 新增 employeePersonUserName 姓名查询 - 新增 VideoQueryExe 单元测试 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>koumen
parent
acd4efe71a
commit
3304e16943
|
|
@ -21,6 +21,23 @@
|
|||
<groupId>com.zcloud.primeport</groupId>
|
||||
<artifactId>web-infrastructure</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>net.bytebuddy</groupId>
|
||||
<artifactId>byte-buddy</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.bytebuddy</groupId>
|
||||
<artifactId>byte-buddy</artifactId>
|
||||
<version>1.12.23</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public class VideoQueryExe {
|
|||
*/
|
||||
public PageResponse<VideoCO> execute(VideoPageQry videoPageQry) {
|
||||
Map<String, Object> parmas = PageQueryHelper.toHashMap(videoPageQry);
|
||||
PageResponse<VideoDO> pageResponse = videoRepository.listPage(parmas);
|
||||
PageResponse<VideoDO> pageResponse = videoRepository.listPageWithOnline(parmas);
|
||||
List<VideoCO> examCenterCOS = videoCoConvertor.converDOsToCOs(pageResponse.getData());
|
||||
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
package com.zcloud.primeport.command.query;
|
||||
|
||||
import com.alibaba.cola.dto.PageResponse;
|
||||
import com.zcloud.primeport.command.convertor.VideoCoConvertor;
|
||||
import com.zcloud.primeport.dto.VideoPageQry;
|
||||
import com.zcloud.primeport.dto.clientobject.VideoCO;
|
||||
import com.zcloud.primeport.persistence.dataobject.VideoDO;
|
||||
import com.zcloud.primeport.persistence.repository.VideoRepository;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyMap;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class VideoQueryExeTest {
|
||||
|
||||
@Mock
|
||||
private VideoRepository videoRepository;
|
||||
|
||||
@Mock
|
||||
private VideoCoConvertor videoCoConvertor;
|
||||
|
||||
private VideoQueryExe videoQueryExe;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
videoQueryExe = new VideoQueryExe(videoRepository, videoCoConvertor);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCallListPageWithOnlineAndReturnIsOnlineAndType() {
|
||||
VideoPageQry qry = new VideoPageQry();
|
||||
qry.setEqIsOnline(1);
|
||||
qry.setPageSize(10);
|
||||
qry.setPageIndex(1);
|
||||
|
||||
VideoDO videoDO = new VideoDO();
|
||||
videoDO.setId(1L);
|
||||
videoDO.setVideoResourceName("test-camera");
|
||||
videoDO.setIsOnline("1");
|
||||
videoDO.setType("yd");
|
||||
|
||||
PageResponse<VideoDO> doPage = PageResponse.of(
|
||||
Collections.singletonList(videoDO), 1, 10, 1);
|
||||
|
||||
VideoCO videoCO = new VideoCO();
|
||||
videoCO.setId(1L);
|
||||
videoCO.setVideoResourceName("test-camera");
|
||||
videoCO.setIsOnline("1");
|
||||
videoCO.setType("yd");
|
||||
|
||||
when(videoRepository.listPageWithOnline(anyMap())).thenReturn(doPage);
|
||||
when(videoCoConvertor.converDOsToCOs(any())).thenReturn(Collections.singletonList(videoCO));
|
||||
|
||||
PageResponse<VideoCO> result = videoQueryExe.execute(qry);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(1, result.getTotalCount());
|
||||
List<VideoCO> data = result.getData();
|
||||
assertEquals(1, data.size());
|
||||
assertEquals("test-camera", data.get(0).getVideoResourceName());
|
||||
assertEquals("1", data.get(0).getIsOnline());
|
||||
assertEquals("yd", data.get(0).getType());
|
||||
|
||||
verify(videoRepository).listPageWithOnline(anyMap());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnEmptyListWhenNoData() {
|
||||
VideoPageQry qry = new VideoPageQry();
|
||||
qry.setPageSize(10);
|
||||
qry.setPageIndex(1);
|
||||
|
||||
PageResponse<VideoDO> doPage = PageResponse.of(Collections.emptyList(), 0, 10, 1);
|
||||
|
||||
when(videoRepository.listPageWithOnline(anyMap())).thenReturn(doPage);
|
||||
when(videoCoConvertor.converDOsToCOs(any())).thenReturn(Collections.emptyList());
|
||||
|
||||
PageResponse<VideoCO> result = videoQueryExe.execute(qry);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(0, result.getTotalCount());
|
||||
assertTrue(result.getData().isEmpty());
|
||||
}
|
||||
}
|
||||
|
|
@ -31,5 +31,8 @@ public class VideoPageQry extends PageQuery {
|
|||
|
||||
// 视频名称
|
||||
private String videoResourceName;
|
||||
|
||||
// 是否在线(0离线/1在线)
|
||||
private Integer eqIsOnline;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,5 +38,9 @@ public class VideoCO extends ClientObject {
|
|||
//纬度
|
||||
@ApiModelProperty(value = "纬度")
|
||||
private String latitude;
|
||||
@ApiModelProperty(value = "是否在线")
|
||||
private String isOnline;
|
||||
@ApiModelProperty(value = "摄像头来源(yd移动/gd固定)")
|
||||
private String type;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.zcloud.primeport.persistence.dataobject;
|
||||
|
||||
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.jjb.saas.framework.repository.basedo.BaseDO;
|
||||
|
|
@ -40,5 +41,11 @@ public class VideoDO extends BaseDO {
|
|||
//纬度
|
||||
@ApiModelProperty(value = "纬度")
|
||||
private String latitude;
|
||||
@ApiModelProperty(value = "是否在线")
|
||||
@TableField(exist = false)
|
||||
private String isOnline;
|
||||
@ApiModelProperty(value = "摄像头来源(yd移动/gd固定)")
|
||||
@TableField(exist = false)
|
||||
private String type;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
package com.zcloud.primeport.persistence.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.zcloud.primeport.persistence.dataobject.VideoDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* web-infrastructure
|
||||
|
|
@ -13,5 +18,5 @@ import org.apache.ibatis.annotations.Mapper;
|
|||
@Mapper
|
||||
public interface VideoMapper extends BaseMapper<VideoDO> {
|
||||
|
||||
IPage<VideoDO> listPageWithOnline(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ import java.util.Map;
|
|||
public interface VideoRepository extends BaseRepository<VideoDO> {
|
||||
PageResponse<VideoDO> listPage(Map<String, Object> params);
|
||||
|
||||
PageResponse<VideoDO> listPageWithOnline(Map<String, Object> params);
|
||||
|
||||
Integer countByForeignIdAndDeviceType(Long foreignId, Integer deviceType);
|
||||
|
||||
Integer countByForeignId(Long foreignId);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.zcloud.primeport.persistence.repository.impl;
|
|||
import com.alibaba.cola.dto.PageResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.jjb.saas.framework.repository.common.PageHelper;
|
||||
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
|
||||
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
||||
|
|
@ -20,6 +21,14 @@ import java.util.Map;
|
|||
public class VideoRepositoryImpl extends BaseRepositoryImpl<VideoMapper, VideoDO> implements VideoRepository {
|
||||
private final VideoMapper videoMapper;
|
||||
|
||||
@Override
|
||||
public PageResponse<VideoDO> listPageWithOnline(Map<String, Object> params) {
|
||||
Page<Map<String, Object>> page = new Page<>(Integer.parseInt(params.get("pageIndex").toString()), Integer.parseInt(params.get("pageSize").toString()));
|
||||
page.setOptimizeJoinOfCountSql(false);
|
||||
IPage<VideoDO> result = videoMapper.listPageWithOnline(page, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResponse<VideoDO> listPage(Map<String, Object> params) {
|
||||
IPage<VideoDO> iPage = new Query<VideoDO>().getPage(params);
|
||||
|
|
|
|||
|
|
@ -4,5 +4,27 @@
|
|||
|
||||
<mapper namespace="com.zcloud.primeport.persistence.mapper.VideoMapper">
|
||||
|
||||
<select id="listPageWithOnline" resultType="com.zcloud.primeport.persistence.dataobject.VideoDO">
|
||||
SELECT v.*,
|
||||
vv.is_online,
|
||||
vv.type
|
||||
FROM video v
|
||||
LEFT JOIN vi_video vv ON v.video_resource_id = vv.id
|
||||
WHERE v.delete_enum = 'FALSE'
|
||||
<if test="params.eqForeignId != null">
|
||||
AND v.foreign_id = #{params.eqForeignId}
|
||||
</if>
|
||||
<if test="params.eqDeviceType != null">
|
||||
AND v.device_type = #{params.eqDeviceType}
|
||||
</if>
|
||||
<if test="params.videoResourceName != null and params.videoResourceName != ''">
|
||||
AND v.video_resource_name LIKE CONCAT('%', #{params.videoResourceName}, '%')
|
||||
</if>
|
||||
<if test="params.eqIsOnline != null">
|
||||
AND vv.is_online = #{params.eqIsOnline}
|
||||
</if>
|
||||
ORDER BY v.create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,9 @@
|
|||
<if test="params.applyCorpName != null and params.applyCorpName != ''">
|
||||
AND p.apply_corp_name like CONCAT('%', #{params.applyCorpName}, '%')
|
||||
</if>
|
||||
<if test="params.employeePersonUserName != null and params.employeePersonUserName != ''">
|
||||
AND p.id IN (SELECT pa.xgf_apply_person_id FROM person_apply pa WHERE pa.delete_enum = 'FALSE' AND pa.employee_person_user_name LIKE CONCAT('%', #{params.employeePersonUserName}, '%'))
|
||||
</if>
|
||||
ORDER BY
|
||||
p.create_time DESC
|
||||
</select>
|
||||
|
|
|
|||
Loading…
Reference in New Issue