完成结果总览模型区服务组装
This commit is contained in:
@@ -1,9 +1,14 @@
|
|||||||
package com.ruoyi.ccdi.project.service.impl;
|
package com.ruoyi.ccdi.project.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewStatVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewStatVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleItemVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewItemVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleItemVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleItemVO;
|
||||||
@@ -86,6 +91,37 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
|||||||
return topRiskPeople;
|
return topRiskPeople;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CcdiProjectRiskModelCardsVO getRiskModelCards(Long projectId) {
|
||||||
|
ensureProjectExists(projectId);
|
||||||
|
|
||||||
|
CcdiProjectRiskModelCardsVO cards = new CcdiProjectRiskModelCardsVO();
|
||||||
|
cards.setCardList(defaultList(overviewMapper.selectRiskModelCardsByProjectId(projectId)));
|
||||||
|
return cards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CcdiProjectRiskModelPeopleVO getRiskModelPeople(CcdiProjectRiskModelPeopleQueryDTO queryDTO) {
|
||||||
|
ensureProjectExists(queryDTO.getProjectId());
|
||||||
|
normalizeRiskModelPeopleQuery(queryDTO);
|
||||||
|
|
||||||
|
Page<CcdiProjectRiskModelPeopleItemVO> page = new Page<>(
|
||||||
|
defaultPageNum(queryDTO.getPageNum()),
|
||||||
|
defaultPageSize(queryDTO.getPageSize())
|
||||||
|
);
|
||||||
|
Page<CcdiProjectRiskModelPeopleItemVO> resultPage = overviewMapper.selectRiskModelPeoplePage(page, queryDTO);
|
||||||
|
|
||||||
|
List<CcdiProjectRiskModelPeopleItemVO> rows = defaultList(resultPage == null ? null : resultPage.getRecords())
|
||||||
|
.stream()
|
||||||
|
.peek(item -> item.setActionLabel(ACTION_LABEL))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
CcdiProjectRiskModelPeopleVO people = new CcdiProjectRiskModelPeopleVO();
|
||||||
|
people.setRows(rows);
|
||||||
|
people.setTotal(resultPage == null ? 0L : resultPage.getTotal());
|
||||||
|
return people;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void refreshProjectRiskCounts(Long projectId, String operator) {
|
public void refreshProjectRiskCounts(Long projectId, String operator) {
|
||||||
@@ -130,6 +166,14 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
|||||||
getRequiredProject(projectId);
|
getRequiredProject(projectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void normalizeRiskModelPeopleQuery(CcdiProjectRiskModelPeopleQueryDTO queryDTO) {
|
||||||
|
if (queryDTO.getMatchMode() == null || queryDTO.getMatchMode().isBlank()) {
|
||||||
|
queryDTO.setMatchMode("ANY");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
queryDTO.setMatchMode(queryDTO.getMatchMode().trim().toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
private CcdiProjectOverviewStatVO buildStat(String key, String label, Integer value) {
|
private CcdiProjectOverviewStatVO buildStat(String key, String label, Integer value) {
|
||||||
CcdiProjectOverviewStatVO stat = new CcdiProjectOverviewStatVO();
|
CcdiProjectOverviewStatVO stat = new CcdiProjectOverviewStatVO();
|
||||||
stat.setKey(key);
|
stat.setKey(key);
|
||||||
@@ -156,6 +200,18 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
|||||||
return value == null ? 0 : value;
|
return value == null ? 0 : value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long defaultPageNum(Integer pageNum) {
|
||||||
|
return pageNum == null || pageNum < 1 ? 1L : pageNum.longValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private long defaultPageSize(Integer pageSize) {
|
||||||
|
return pageSize == null || pageSize < 1 ? 10L : pageSize.longValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> List<T> defaultList(List<T> value) {
|
||||||
|
return value == null ? List.of() : value;
|
||||||
|
}
|
||||||
|
|
||||||
private CcdiProject getRequiredProject(Long projectId) {
|
private CcdiProject getRequiredProject(Long projectId) {
|
||||||
CcdiProject project = projectMapper.selectById(projectId);
|
CcdiProject project = projectMapper.selectById(projectId);
|
||||||
if (project == null) {
|
if (project == null) {
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
package com.ruoyi.ccdi.project.service.impl;
|
package com.ruoyi.ccdi.project.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleItemVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
||||||
import com.ruoyi.ccdi.project.mapper.CcdiProjectMapper;
|
import com.ruoyi.ccdi.project.mapper.CcdiProjectMapper;
|
||||||
@@ -18,7 +24,10 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.argThat;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -108,6 +117,8 @@ class CcdiProjectOverviewServiceImplTest {
|
|||||||
|
|
||||||
assertThrows(ServiceException.class, () -> service.getRiskPeopleOverview(99L));
|
assertThrows(ServiceException.class, () -> service.getRiskPeopleOverview(99L));
|
||||||
assertThrows(ServiceException.class, () -> service.getTopRiskPeople(99L));
|
assertThrows(ServiceException.class, () -> service.getTopRiskPeople(99L));
|
||||||
|
assertThrows(ServiceException.class, () -> service.getRiskModelCards(99L));
|
||||||
|
assertThrows(ServiceException.class, () -> service.getRiskModelPeople(buildRiskModelPeopleQuery(99L)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -127,4 +138,100 @@ class CcdiProjectOverviewServiceImplTest {
|
|||||||
|
|
||||||
verify(projectMapper).updateRiskCountsByProjectId(eq(43L), eq(2), eq(1), eq(3), eq("tester"));
|
verify(projectMapper).updateRiskCountsByProjectId(eq(43L), eq(2), eq(1), eq(3), eq("tester"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldWrapRiskModelCardsIntoCardList() {
|
||||||
|
CcdiProject project = new CcdiProject();
|
||||||
|
project.setProjectId(40L);
|
||||||
|
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||||
|
|
||||||
|
CcdiProjectRiskModelCardVO card = new CcdiProjectRiskModelCardVO();
|
||||||
|
card.setModelCode("MODEL_A");
|
||||||
|
card.setWarningCount(3);
|
||||||
|
when(overviewMapper.selectRiskModelCardsByProjectId(40L)).thenReturn(List.of(card));
|
||||||
|
|
||||||
|
CcdiProjectRiskModelCardsVO result = service.getRiskModelCards(40L);
|
||||||
|
|
||||||
|
assertNotNull(result.getCardList());
|
||||||
|
assertEquals(1, result.getCardList().size());
|
||||||
|
assertEquals("MODEL_A", result.getCardList().getFirst().getModelCode());
|
||||||
|
assertEquals(3, result.getCardList().getFirst().getWarningCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldWrapRiskModelPeopleRowsTotalAndActionLabel() {
|
||||||
|
CcdiProject project = new CcdiProject();
|
||||||
|
project.setProjectId(40L);
|
||||||
|
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||||
|
|
||||||
|
CcdiProjectRiskModelPeopleItemVO item = new CcdiProjectRiskModelPeopleItemVO();
|
||||||
|
item.setStaffName("王五");
|
||||||
|
item.setStaffCode("10001");
|
||||||
|
|
||||||
|
Page<CcdiProjectRiskModelPeopleItemVO> page = new Page<>(2, 5);
|
||||||
|
page.setRecords(List.of(item));
|
||||||
|
page.setTotal(11);
|
||||||
|
when(overviewMapper.selectRiskModelPeoplePage(any(Page.class), any(CcdiProjectRiskModelPeopleQueryDTO.class)))
|
||||||
|
.thenReturn(page);
|
||||||
|
|
||||||
|
CcdiProjectRiskModelPeopleVO result = service.getRiskModelPeople(buildRiskModelPeopleQuery(40L));
|
||||||
|
|
||||||
|
assertNotNull(result.getRows());
|
||||||
|
assertEquals(1, result.getRows().size());
|
||||||
|
assertEquals(11L, result.getTotal());
|
||||||
|
assertEquals("查看详情", result.getRows().getFirst().getActionLabel());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldReturnEmptyCollectionsForRiskModelCardsAndPeople() {
|
||||||
|
CcdiProject project = new CcdiProject();
|
||||||
|
project.setProjectId(40L);
|
||||||
|
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||||
|
when(overviewMapper.selectRiskModelCardsByProjectId(40L)).thenReturn(List.of());
|
||||||
|
|
||||||
|
Page<CcdiProjectRiskModelPeopleItemVO> emptyPage = new Page<>(1, 10);
|
||||||
|
emptyPage.setRecords(List.of());
|
||||||
|
emptyPage.setTotal(0);
|
||||||
|
when(overviewMapper.selectRiskModelPeoplePage(any(Page.class), any(CcdiProjectRiskModelPeopleQueryDTO.class)))
|
||||||
|
.thenReturn(emptyPage);
|
||||||
|
|
||||||
|
CcdiProjectRiskModelCardsVO cards = service.getRiskModelCards(40L);
|
||||||
|
CcdiProjectRiskModelPeopleVO people = service.getRiskModelPeople(buildRiskModelPeopleQuery(40L));
|
||||||
|
|
||||||
|
assertNotNull(cards.getCardList());
|
||||||
|
assertEquals(0, cards.getCardList().size());
|
||||||
|
assertNotNull(people.getRows());
|
||||||
|
assertEquals(0, people.getRows().size());
|
||||||
|
assertEquals(0L, people.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldDefaultRiskModelPeopleMatchModeToAny() {
|
||||||
|
CcdiProject project = new CcdiProject();
|
||||||
|
project.setProjectId(40L);
|
||||||
|
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||||
|
|
||||||
|
Page<CcdiProjectRiskModelPeopleItemVO> emptyPage = new Page<>(1, 10);
|
||||||
|
emptyPage.setRecords(List.of());
|
||||||
|
emptyPage.setTotal(0);
|
||||||
|
when(overviewMapper.selectRiskModelPeoplePage(any(Page.class), any(CcdiProjectRiskModelPeopleQueryDTO.class)))
|
||||||
|
.thenReturn(emptyPage);
|
||||||
|
|
||||||
|
CcdiProjectRiskModelPeopleQueryDTO queryDTO = buildRiskModelPeopleQuery(40L);
|
||||||
|
queryDTO.setMatchMode(null);
|
||||||
|
service.getRiskModelPeople(queryDTO);
|
||||||
|
|
||||||
|
verify(overviewMapper).selectRiskModelPeoplePage(
|
||||||
|
any(Page.class),
|
||||||
|
argThat(query -> "ANY".equals(query.getMatchMode()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiProjectRiskModelPeopleQueryDTO buildRiskModelPeopleQuery(Long projectId) {
|
||||||
|
CcdiProjectRiskModelPeopleQueryDTO queryDTO = new CcdiProjectRiskModelPeopleQueryDTO();
|
||||||
|
queryDTO.setProjectId(projectId);
|
||||||
|
queryDTO.setPageNum(1);
|
||||||
|
queryDTO.setPageSize(10);
|
||||||
|
return queryDTO;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user