补充结果总览详情接口契约

This commit is contained in:
wkc
2026-03-25 15:03:24 +08:00
parent 155da36e78
commit 8df9dbacd8
11 changed files with 173 additions and 0 deletions

View File

@@ -1,6 +1,8 @@
package com.ruoyi.ccdi.project.controller;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
@@ -82,4 +84,15 @@ public class CcdiProjectOverviewController extends BaseController {
CcdiProjectRiskModelPeopleVO people = overviewService.getRiskModelPeople(queryDTO);
return AjaxResult.success(people);
}
/**
* 查询项目分析详情
*/
@GetMapping("/person-analysis/detail")
@Operation(summary = "查询项目分析详情")
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
public AjaxResult getPersonAnalysisDetail(CcdiProjectPersonAnalysisDetailQueryDTO queryDTO) {
CcdiProjectPersonAnalysisDetailVO detail = overviewService.getPersonAnalysisDetail(queryDTO);
return AjaxResult.success(detail);
}
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.ccdi.project.domain.dto;
import lombok.Data;
/**
* 项目分析详情查询DTO
*/
@Data
public class CcdiProjectPersonAnalysisDetailQueryDTO {
/** 项目ID */
private Long projectId;
/** 员工身份证号 */
private String staffIdCard;
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.ccdi.project.domain.vo;
import java.util.List;
import lombok.Data;
/**
* 项目分析异常明细
*/
@Data
public class CcdiProjectPersonAnalysisAbnormalDetailVO {
private List<CcdiProjectPersonAnalysisAbnormalGroupVO> groups;
}

View File

@@ -0,0 +1,19 @@
package com.ruoyi.ccdi.project.domain.vo;
import java.util.List;
import lombok.Data;
/**
* 项目分析异常分组
*/
@Data
public class CcdiProjectPersonAnalysisAbnormalGroupVO {
private String groupCode;
private String groupName;
private String groupType;
private List<?> records;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
/**
* 项目分析人员基础信息
*/
@Data
public class CcdiProjectPersonAnalysisBasicInfoVO {
private String name;
private String idNo;
private String staffCode;
private String department;
private String phone;
private String riskLevel;
private String projectName;
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
/**
* 项目分析详情
*/
@Data
public class CcdiProjectPersonAnalysisDetailVO {
private CcdiProjectPersonAnalysisBasicInfoVO basicInfo;
private CcdiProjectPersonAnalysisAbnormalDetailVO abnormalDetail;
}

View File

@@ -0,0 +1,22 @@
package com.ruoyi.ccdi.project.domain.vo;
import java.util.List;
import java.util.Map;
import lombok.Data;
/**
* 项目分析对象型异常记录
*/
@Data
public class CcdiProjectPersonAnalysisObjectRecordVO {
private String title;
private String subtitle;
private List<String> riskTags;
private String summary;
private List<Map<String, String>> extraFields;
}

View File

@@ -1,6 +1,8 @@
package com.ruoyi.ccdi.project.service;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
@@ -36,6 +38,16 @@ public interface ICcdiProjectOverviewService {
*/
CcdiProjectTopRiskPeopleVO getTopRiskPeople(Long projectId);
/**
* 查询项目分析详情
*
* @param queryDTO 查询条件
* @return 项目分析详情
*/
default CcdiProjectPersonAnalysisDetailVO getPersonAnalysisDetail(CcdiProjectPersonAnalysisDetailQueryDTO queryDTO) {
return new CcdiProjectPersonAnalysisDetailVO();
}
/**
* 查询风险模型卡片
*

View File

@@ -2,8 +2,10 @@ 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.dto.CcdiProjectPersonAnalysisDetailQueryDTO;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
import com.ruoyi.ccdi.project.domain.entity.CcdiProjectOverviewEmployeeResult;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewEmployeeHitRowVO;
@@ -100,6 +102,12 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi
return topRiskPeople;
}
@Override
public CcdiProjectPersonAnalysisDetailVO getPersonAnalysisDetail(CcdiProjectPersonAnalysisDetailQueryDTO queryDTO) {
ensureProjectExists(queryDTO.getProjectId());
return new CcdiProjectPersonAnalysisDetailVO();
}
@Override
public CcdiProjectRiskModelCardsVO getRiskModelCards(Long projectId) {
ensureProjectExists(projectId);

View File

@@ -1,5 +1,6 @@
package com.ruoyi.ccdi.project.controller;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.v3.oas.annotations.Operation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -63,4 +64,31 @@ class CcdiProjectOverviewControllerContractTest {
assertTrue(fieldNames.contains("pageNum"));
assertTrue(fieldNames.contains("pageSize"));
}
@Test
void shouldExposePersonAnalysisDetailEndpointContract() throws Exception {
Class<?> controllerClass = Class.forName("com.ruoyi.ccdi.project.controller.CcdiProjectOverviewController");
Class<?> queryDtoClass =
Class.forName("com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO");
Method method = controllerClass.getMethod("getPersonAnalysisDetail", queryDtoClass);
GetMapping getMapping = method.getAnnotation(GetMapping.class);
Operation operation = method.getAnnotation(Operation.class);
assertNotNull(getMapping);
assertEquals("/person-analysis/detail", getMapping.value()[0]);
assertNotNull(operation);
assertEquals(queryDtoClass, method.getParameterTypes()[0]);
assertEquals(AjaxResult.class, method.getReturnType());
}
@Test
void shouldExposePersonAnalysisDetailQueryDtoFields() throws Exception {
Class<?> dtoClass = Class.forName("com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO");
List<String> fieldNames = Arrays.stream(dtoClass.getDeclaredFields())
.map(Field::getName)
.collect(Collectors.toList());
assertEquals(List.of("projectId", "staffIdCard"), fieldNames);
}
}

View File

@@ -13,6 +13,10 @@ class CcdiProjectOverviewServiceStructureTest {
assertNotNull(clazz.getMethod("getDashboard", Long.class));
assertNotNull(clazz.getMethod("getRiskPeopleOverview", Long.class));
assertNotNull(clazz.getMethod("getTopRiskPeople", Long.class));
assertNotNull(clazz.getMethod(
"getPersonAnalysisDetail",
Class.forName("com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO")
));
assertNotNull(clazz.getMethod("refreshOverviewEmployeeResults", Long.class, String.class));
assertNotNull(clazz.getMethod("refreshProjectRiskCounts", Long.class, String.class));
}