定义结果总览模型区接口结构

This commit is contained in:
wkc
2026-03-20 11:07:12 +08:00
parent 345b166cb1
commit c149b2ae33
9 changed files with 235 additions and 0 deletions

View File

@@ -1,6 +1,9 @@
package com.ruoyi.ccdi.project.controller; package com.ruoyi.ccdi.project.controller;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
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.service.ICcdiProjectOverviewService; import com.ruoyi.ccdi.project.service.ICcdiProjectOverviewService;
@@ -57,4 +60,26 @@ public class CcdiProjectOverviewController extends BaseController {
CcdiProjectTopRiskPeopleVO topRiskPeople = overviewService.getTopRiskPeople(projectId); CcdiProjectTopRiskPeopleVO topRiskPeople = overviewService.getTopRiskPeople(projectId);
return AjaxResult.success(topRiskPeople); return AjaxResult.success(topRiskPeople);
} }
/**
* 查询风险模型卡片
*/
@GetMapping("/risk-models/cards")
@Operation(summary = "查询风险模型卡片")
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
public AjaxResult getRiskModelCards(Long projectId) {
CcdiProjectRiskModelCardsVO cards = overviewService.getRiskModelCards(projectId);
return AjaxResult.success(cards);
}
/**
* 查询风险模型命中人员
*/
@GetMapping("/risk-models/people")
@Operation(summary = "查询风险模型命中人员")
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
public AjaxResult getRiskModelPeople(CcdiProjectRiskModelPeopleQueryDTO queryDTO) {
CcdiProjectRiskModelPeopleVO people = overviewService.getRiskModelPeople(queryDTO);
return AjaxResult.success(people);
}
} }

View File

@@ -0,0 +1,34 @@
package com.ruoyi.ccdi.project.domain.dto;
import jakarta.validation.constraints.Pattern;
import java.util.List;
import lombok.Data;
/**
* 风险模型命中人员查询DTO
*/
@Data
public class CcdiProjectRiskModelPeopleQueryDTO {
/** 项目ID */
private Long projectId;
/** 模型编码列表 */
private List<String> modelCodes;
/** 匹配方式 */
@Pattern(regexp = "ANY|ALL", message = "匹配方式仅支持ANY或ALL")
private String matchMode;
/** 关键字 */
private String keyword;
/** 部门ID */
private Long deptId;
/** 页码 */
private Integer pageNum;
/** 每页数量 */
private Integer pageSize;
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
/**
* 风险命中标签
*/
@Data
public class CcdiProjectRiskHitTagVO {
private String ruleCode;
private String ruleName;
private String riskLevel;
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.ccdi.project.domain.vo;
import lombok.Data;
/**
* 风险模型卡片
*/
@Data
public class CcdiProjectRiskModelCardVO {
private String modelCode;
private String modelName;
private Integer warningCount;
private Integer peopleCount;
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.ccdi.project.domain.vo;
import java.util.List;
import lombok.Data;
/**
* 风险模型卡片列表
*/
@Data
public class CcdiProjectRiskModelCardsVO {
private List<CcdiProjectRiskModelCardVO> cardList;
}

View File

@@ -0,0 +1,25 @@
package com.ruoyi.ccdi.project.domain.vo;
import java.util.List;
import lombok.Data;
/**
* 风险模型命中人员项
*/
@Data
public class CcdiProjectRiskModelPeopleItemVO {
private String staffName;
private String staffCode;
private String idNo;
private String department;
private List<String> modelNames;
private List<CcdiProjectRiskHitTagVO> hitTagList;
private String actionLabel;
}

View File

@@ -0,0 +1,15 @@
package com.ruoyi.ccdi.project.domain.vo;
import java.util.List;
import lombok.Data;
/**
* 风险模型命中人员分页
*/
@Data
public class CcdiProjectRiskModelPeopleVO {
private List<CcdiProjectRiskModelPeopleItemVO> rows;
private Long total;
}

View File

@@ -1,6 +1,9 @@
package com.ruoyi.ccdi.project.service; package com.ruoyi.ccdi.project.service;
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
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;
@@ -33,6 +36,26 @@ public interface ICcdiProjectOverviewService {
*/ */
CcdiProjectTopRiskPeopleVO getTopRiskPeople(Long projectId); CcdiProjectTopRiskPeopleVO getTopRiskPeople(Long projectId);
/**
* 查询风险模型卡片
*
* @param projectId 项目ID
* @return 风险模型卡片
*/
default CcdiProjectRiskModelCardsVO getRiskModelCards(Long projectId) {
return new CcdiProjectRiskModelCardsVO();
}
/**
* 查询风险模型命中人员
*
* @param queryDTO 查询条件
* @return 风险模型命中人员
*/
default CcdiProjectRiskModelPeopleVO getRiskModelPeople(CcdiProjectRiskModelPeopleQueryDTO queryDTO) {
return new CcdiProjectRiskModelPeopleVO();
}
/** /**
* 刷新项目风险人数 * 刷新项目风险人数
* *

View File

@@ -0,0 +1,66 @@
package com.ruoyi.ccdi.project.controller;
import io.swagger.v3.oas.annotations.Operation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.jupiter.api.Test;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
class CcdiProjectOverviewControllerContractTest {
@Test
void shouldExposeRiskModelCardsEndpointContract() throws Exception {
Class<?> controllerClass = Class.forName("com.ruoyi.ccdi.project.controller.CcdiProjectOverviewController");
RequestMapping requestMapping = controllerClass.getAnnotation(RequestMapping.class);
Method method = controllerClass.getMethod("getRiskModelCards", Long.class);
GetMapping getMapping = method.getAnnotation(GetMapping.class);
Operation operation = method.getAnnotation(Operation.class);
assertNotNull(requestMapping);
assertEquals("/ccdi/project/overview", requestMapping.value()[0]);
assertNotNull(getMapping);
assertEquals("/risk-models/cards", getMapping.value()[0]);
assertNotNull(operation);
}
@Test
void shouldExposeRiskModelPeopleEndpointContract() throws Exception {
Class<?> controllerClass = Class.forName("com.ruoyi.ccdi.project.controller.CcdiProjectOverviewController");
Class<?> queryDtoClass = Class.forName("com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO");
Method method = controllerClass.getMethod("getRiskModelPeople", queryDtoClass);
GetMapping getMapping = method.getAnnotation(GetMapping.class);
Operation operation = method.getAnnotation(Operation.class);
assertNotNull(getMapping);
assertEquals("/risk-models/people", getMapping.value()[0]);
assertNotNull(operation);
assertEquals(queryDtoClass, method.getParameterTypes()[0]);
}
@Test
void shouldExposeRiskModelPeopleQueryDtoFields() throws Exception {
Class<?> dtoClass = Class.forName("com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO");
List<String> fieldNames = Arrays.stream(dtoClass.getDeclaredFields())
.map(Field::getName)
.collect(Collectors.toList());
assertTrue(fieldNames.contains("projectId"));
assertTrue(fieldNames.contains("modelCodes"));
assertTrue(fieldNames.contains("matchMode"));
assertTrue(fieldNames.contains("keyword"));
assertTrue(fieldNames.contains("deptId"));
assertTrue(fieldNames.contains("pageNum"));
assertTrue(fieldNames.contains("pageSize"));
}
}