调整信息维护页面并修复项目概览统计
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.ccdi.project.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectAbnormalAccountQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO;
|
||||
@@ -39,12 +40,11 @@ import com.ruoyi.ccdi.project.domain.vo.CcdiProjectSuspiciousTransactionItemVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectSuspiciousTransactionPageVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleItemVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamAllVO;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiProjectMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiBankTagResultMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiProjectOverviewEmployeeResultMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiProjectOverviewMapper;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiProjectOverviewService;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
@@ -74,6 +74,9 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
||||
@Resource
|
||||
private CcdiProjectMapper projectMapper;
|
||||
|
||||
@Resource
|
||||
private CcdiModelParamMapper modelParamMapper;
|
||||
|
||||
@Resource
|
||||
private CcdiProjectOverviewEmployeeResultMapper overviewEmployeeResultMapper;
|
||||
|
||||
@@ -89,9 +92,6 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
||||
@Resource
|
||||
private CcdiProjectOverviewReportPdfExporter reportPdfExporter;
|
||||
|
||||
@Resource
|
||||
private ICcdiModelParamService modelParamService;
|
||||
|
||||
@Override
|
||||
public CcdiProjectOverviewDashboardVO getDashboard(Long projectId) {
|
||||
CcdiProject project = overviewMapper.selectDashboardBaseByProjectId(projectId);
|
||||
@@ -328,7 +328,7 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
||||
report.setUploadSubjects(defaultList(overviewMapper.selectReportUploadSubjects(projectId)).stream()
|
||||
.peek(item -> item.setDataPeriod(formatDataPeriod(item.getMinTrxDate(), item.getMaxTrxDate())))
|
||||
.toList());
|
||||
report.setParams(buildReportParams(projectId));
|
||||
report.setParams(buildReportParams(project));
|
||||
report.setModelSummaries(defaultList(overviewMapper.selectReportRiskModelSummaries(projectId)));
|
||||
report.setRiskPeople(defaultList(overviewMapper.selectReportRiskPeople(projectId)).stream()
|
||||
.peek(item -> item.setActionLabel(ACTION_LABEL))
|
||||
@@ -554,21 +554,23 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
|
||||
return row;
|
||||
}
|
||||
|
||||
private List<CcdiProjectOverviewReportParamVO> buildReportParams(Long projectId) {
|
||||
ModelParamAllVO response = modelParamService.selectAllParams(projectId);
|
||||
return defaultList(response == null ? null : response.getModels()).stream()
|
||||
.flatMap(model -> defaultList(model.getParams()).stream().map(param -> {
|
||||
CcdiProjectOverviewReportParamVO row = new CcdiProjectOverviewReportParamVO();
|
||||
row.setModelName(model.getModelName());
|
||||
row.setParamName(param.getParamName());
|
||||
row.setParamValue(param.getParamValue());
|
||||
row.setParamUnit(param.getParamUnit());
|
||||
row.setParamDesc(param.getParamDesc());
|
||||
return row;
|
||||
}))
|
||||
private List<CcdiProjectOverviewReportParamVO> buildReportParams(CcdiProject project) {
|
||||
Long effectiveProjectId = "default".equals(project.getConfigType()) ? 0L : project.getProjectId();
|
||||
return defaultList(modelParamMapper.selectByProjectId(effectiveProjectId)).stream()
|
||||
.map(this::buildReportParamRow)
|
||||
.toList();
|
||||
}
|
||||
|
||||
private CcdiProjectOverviewReportParamVO buildReportParamRow(CcdiModelParam param) {
|
||||
CcdiProjectOverviewReportParamVO row = new CcdiProjectOverviewReportParamVO();
|
||||
row.setModelName(param.getModelName());
|
||||
row.setParamName(param.getParamName());
|
||||
row.setParamValue(param.getParamValue());
|
||||
row.setParamUnit(param.getParamUnit());
|
||||
row.setParamDesc(param.getParamDesc());
|
||||
return row;
|
||||
}
|
||||
|
||||
private String formatDataPeriod(String minTrxDate, String maxTrxDate) {
|
||||
if (minTrxDate == null || minTrxDate.isBlank() || maxTrxDate == null || maxTrxDate.isBlank()) {
|
||||
return "-";
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.ruoyi.ccdi.project.service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
class CcdiProjectOverviewServiceStructureTest {
|
||||
@@ -35,4 +37,15 @@ class CcdiProjectOverviewServiceStructureTest {
|
||||
assertNotNull(clazz.getMethod("refreshOverviewEmployeeResults", Long.class, String.class));
|
||||
assertNotNull(clazz.getMethod("refreshProjectRiskCounts", Long.class, String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void overviewServiceImplShouldNotDependOnModelParamService() throws Exception {
|
||||
Class<?> clazz = Class.forName(
|
||||
"com.ruoyi.ccdi.project.service.impl.CcdiProjectOverviewServiceImpl"
|
||||
);
|
||||
|
||||
assertFalse(Arrays.stream(clazz.getDeclaredFields()).anyMatch(field ->
|
||||
"com.ruoyi.ccdi.project.service.ICcdiModelParamService".equals(field.getType().getName())
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.ccdi.project.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskPeopleQueryDTO;
|
||||
@@ -16,6 +17,7 @@ import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewEmployeeHitRowVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewReportVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisBasicInfoVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisObjectRecordVO;
|
||||
@@ -27,6 +29,7 @@ import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectSuspiciousTransactionItemVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiProjectMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiBankTagResultMapper;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiProjectOverviewEmployeeResultMapper;
|
||||
@@ -38,6 +41,7 @@ import java.util.List;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
@@ -65,6 +69,9 @@ class CcdiProjectOverviewServiceImplTest {
|
||||
@Mock
|
||||
private CcdiProjectMapper projectMapper;
|
||||
|
||||
@Mock
|
||||
private CcdiModelParamMapper modelParamMapper;
|
||||
|
||||
@Mock
|
||||
private CcdiProjectOverviewEmployeeResultMapper overviewEmployeeResultMapper;
|
||||
|
||||
@@ -77,6 +84,9 @@ class CcdiProjectOverviewServiceImplTest {
|
||||
@Mock
|
||||
private CcdiProjectRiskDetailWorkbookExporter workbookExporter;
|
||||
|
||||
@Mock
|
||||
private CcdiProjectOverviewReportPdfExporter reportPdfExporter;
|
||||
|
||||
@Test
|
||||
void shouldBuildDashboardWithNoRiskCount() {
|
||||
CcdiProject project = new CcdiProject();
|
||||
@@ -300,6 +310,37 @@ class CcdiProjectOverviewServiceImplTest {
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldExportOverviewReportParamsFromDefaultProjectConfig() throws Exception {
|
||||
CcdiProject project = new CcdiProject();
|
||||
project.setProjectId(40L);
|
||||
project.setProjectName("测试项目");
|
||||
project.setConfigType("default");
|
||||
when(projectMapper.selectById(40L)).thenReturn(project);
|
||||
|
||||
CcdiProject dashboardProject = new CcdiProject();
|
||||
dashboardProject.setProjectId(40L);
|
||||
dashboardProject.setTargetCount(10);
|
||||
dashboardProject.setHighRiskCount(1);
|
||||
dashboardProject.setMediumRiskCount(2);
|
||||
dashboardProject.setLowRiskCount(3);
|
||||
when(overviewMapper.selectDashboardBaseByProjectId(40L)).thenReturn(dashboardProject);
|
||||
when(modelParamMapper.selectByProjectId(0L)).thenReturn(List.of(
|
||||
buildModelParam("LARGE_TRANSACTION", "大额交易模型", "单笔金额", "1000", "元", "单笔金额阈值")
|
||||
));
|
||||
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
service.exportOverviewReport(response, 40L);
|
||||
|
||||
ArgumentCaptor<CcdiProjectOverviewReportVO> captor =
|
||||
ArgumentCaptor.forClass(CcdiProjectOverviewReportVO.class);
|
||||
verify(modelParamMapper).selectByProjectId(0L);
|
||||
verify(reportPdfExporter).export(eq(response), captor.capture());
|
||||
assertEquals(1, captor.getValue().getParams().size());
|
||||
assertEquals("大额交易模型", captor.getValue().getParams().getFirst().getModelName());
|
||||
assertEquals("单笔金额", captor.getValue().getParams().getFirst().getParamName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnPersonAnalysisDetailWithBasicInfoAndGroupedAbnormalDetail() {
|
||||
CcdiProject project = new CcdiProject();
|
||||
@@ -539,6 +580,24 @@ class CcdiProjectOverviewServiceImplTest {
|
||||
return result;
|
||||
}
|
||||
|
||||
private CcdiModelParam buildModelParam(
|
||||
String modelCode,
|
||||
String modelName,
|
||||
String paramName,
|
||||
String paramValue,
|
||||
String paramUnit,
|
||||
String paramDesc
|
||||
) {
|
||||
CcdiModelParam param = new CcdiModelParam();
|
||||
param.setModelCode(modelCode);
|
||||
param.setModelName(modelName);
|
||||
param.setParamName(paramName);
|
||||
param.setParamValue(paramValue);
|
||||
param.setParamUnit(paramUnit);
|
||||
param.setParamDesc(paramDesc);
|
||||
return param;
|
||||
}
|
||||
|
||||
private CcdiProjectRiskHitTagVO buildHitTag(
|
||||
String modelCode,
|
||||
String modelName,
|
||||
|
||||
Reference in New Issue
Block a user