diff --git a/web-app/pom.xml b/web-app/pom.xml index d8b6a77..706d4bc 100644 --- a/web-app/pom.xml +++ b/web-app/pom.xml @@ -21,6 +21,23 @@ com.zcloud.primeport web-infrastructure + + org.springframework.boot + spring-boot-starter-test + test + + + net.bytebuddy + byte-buddy + + + + + net.bytebuddy + byte-buddy + 1.12.23 + test + diff --git a/web-app/src/main/java/com/zcloud/primeport/command/query/VideoQueryExe.java b/web-app/src/main/java/com/zcloud/primeport/command/query/VideoQueryExe.java index 5772e42..c5b1e9d 100644 --- a/web-app/src/main/java/com/zcloud/primeport/command/query/VideoQueryExe.java +++ b/web-app/src/main/java/com/zcloud/primeport/command/query/VideoQueryExe.java @@ -34,7 +34,7 @@ public class VideoQueryExe { */ public PageResponse execute(VideoPageQry videoPageQry) { Map parmas = PageQueryHelper.toHashMap(videoPageQry); - PageResponse pageResponse = videoRepository.listPage(parmas); + PageResponse pageResponse = videoRepository.listPageWithOnline(parmas); List examCenterCOS = videoCoConvertor.converDOsToCOs(pageResponse.getData()); return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); } diff --git a/web-app/src/test/java/com/zcloud/primeport/command/query/VideoQueryExeTest.java b/web-app/src/test/java/com/zcloud/primeport/command/query/VideoQueryExeTest.java new file mode 100644 index 0000000..3c2ca8b --- /dev/null +++ b/web-app/src/test/java/com/zcloud/primeport/command/query/VideoQueryExeTest.java @@ -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 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 result = videoQueryExe.execute(qry); + + assertNotNull(result); + assertEquals(1, result.getTotalCount()); + List 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 doPage = PageResponse.of(Collections.emptyList(), 0, 10, 1); + + when(videoRepository.listPageWithOnline(anyMap())).thenReturn(doPage); + when(videoCoConvertor.converDOsToCOs(any())).thenReturn(Collections.emptyList()); + + PageResponse result = videoQueryExe.execute(qry); + + assertNotNull(result); + assertEquals(0, result.getTotalCount()); + assertTrue(result.getData().isEmpty()); + } +} diff --git a/web-client/src/main/java/com/zcloud/primeport/dto/VideoPageQry.java b/web-client/src/main/java/com/zcloud/primeport/dto/VideoPageQry.java index b1cf88d..c2f1865 100644 --- a/web-client/src/main/java/com/zcloud/primeport/dto/VideoPageQry.java +++ b/web-client/src/main/java/com/zcloud/primeport/dto/VideoPageQry.java @@ -31,5 +31,8 @@ public class VideoPageQry extends PageQuery { // 视频名称 private String videoResourceName; + + // 是否在线(0离线/1在线) + private Integer eqIsOnline; } diff --git a/web-client/src/main/java/com/zcloud/primeport/dto/clientobject/VideoCO.java b/web-client/src/main/java/com/zcloud/primeport/dto/clientobject/VideoCO.java index ee57be0..89e2f63 100644 --- a/web-client/src/main/java/com/zcloud/primeport/dto/clientobject/VideoCO.java +++ b/web-client/src/main/java/com/zcloud/primeport/dto/clientobject/VideoCO.java @@ -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; } diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/VideoDO.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/VideoDO.java index 4e0ac26..6a0af2f 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/VideoDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/VideoDO.java @@ -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; } diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/VideoMapper.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/VideoMapper.java index 0230ff6..572a555 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/VideoMapper.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/VideoMapper.java @@ -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 { + IPage listPageWithOnline(Page> page, @Param("params") Map params); } - diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/VideoRepository.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/VideoRepository.java index 638c0f4..202b605 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/VideoRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/VideoRepository.java @@ -8,6 +8,8 @@ import java.util.Map; public interface VideoRepository extends BaseRepository { PageResponse listPage(Map params); + PageResponse listPageWithOnline(Map params); + Integer countByForeignIdAndDeviceType(Long foreignId, Integer deviceType); Integer countByForeignId(Long foreignId); diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/VideoRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/VideoRepositoryImpl.java index 5f9d7e8..46d8d06 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/VideoRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/VideoRepositoryImpl.java @@ -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 implements VideoRepository { private final VideoMapper videoMapper; + @Override + public PageResponse listPageWithOnline(Map params) { + Page> page = new Page<>(Integer.parseInt(params.get("pageIndex").toString()), Integer.parseInt(params.get("pageSize").toString())); + page.setOptimizeJoinOfCountSql(false); + IPage result = videoMapper.listPageWithOnline(page, params); + return PageHelper.pageToResponse(result, result.getRecords()); + } + @Override public PageResponse listPage(Map params) { IPage iPage = new Query().getPage(params); diff --git a/web-infrastructure/src/main/resources/mapper/VideoDO.xml b/web-infrastructure/src/main/resources/mapper/VideoDO.xml index b6de3f2..e091c30 100644 --- a/web-infrastructure/src/main/resources/mapper/VideoDO.xml +++ b/web-infrastructure/src/main/resources/mapper/VideoDO.xml @@ -4,5 +4,27 @@ + + diff --git a/web-infrastructure/src/main/resources/mapper/XgfApplyPersonDO.xml b/web-infrastructure/src/main/resources/mapper/XgfApplyPersonDO.xml index facf804..274b543 100644 --- a/web-infrastructure/src/main/resources/mapper/XgfApplyPersonDO.xml +++ b/web-infrastructure/src/main/resources/mapper/XgfApplyPersonDO.xml @@ -108,6 +108,9 @@ AND p.apply_corp_name like CONCAT('%', #{params.applyCorpName}, '%') + + 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}, '%')) + ORDER BY p.create_time DESC