完成员工与亲属资产导入后端拆分

This commit is contained in:
wkc
2026-03-13 16:29:04 +08:00
parent ee31f74aef
commit bda89202ba
17 changed files with 841 additions and 64 deletions

View File

@@ -109,11 +109,11 @@ class CcdiAssetInfoControllerTest {
}
@Test
void importTemplate_shouldUseGenericAssetTemplateName() {
void importTemplate_shouldUseFamilyAssetTemplateName() {
try (MockedStatic<EasyExcelUtil> mocked = mockStatic(EasyExcelUtil.class)) {
controller.importTemplate(null);
mocked.verify(() -> EasyExcelUtil.importTemplateWithDictDropdown(null, CcdiAssetInfoExcel.class, "资产信息"));
mocked.verify(() -> EasyExcelUtil.importTemplateWithDictDropdown(null, CcdiAssetInfoExcel.class, "亲属资产信息"));
}
}
}

View File

@@ -0,0 +1,119 @@
package com.ruoyi.info.collection.controller;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffAssetInfoExcel;
import com.ruoyi.info.collection.domain.vo.BaseStaffAssetImportFailureVO;
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
import com.ruoyi.info.collection.service.ICcdiBaseStaffAssetImportService;
import com.ruoyi.info.collection.utils.EasyExcelUtil;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.mock.web.MockMultipartFile;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class CcdiBaseStaffAssetImportControllerTest {
@InjectMocks
private CcdiBaseStaffAssetImportController controller;
@Mock
private ICcdiBaseStaffAssetImportService baseStaffAssetImportService;
@Test
void importData_shouldReturnWarnWhenExcelHasNoRows() throws Exception {
MockMultipartFile file = new MockMultipartFile(
"file",
"base-staff-asset-empty.xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"empty".getBytes(StandardCharsets.UTF_8)
);
try (MockedStatic<EasyExcelUtil> mocked = mockStatic(EasyExcelUtil.class)) {
mocked.when(() -> EasyExcelUtil.importExcel(any(InputStream.class), eq(CcdiBaseStaffAssetInfoExcel.class)))
.thenReturn(List.of());
AjaxResult result = controller.importData(file);
assertEquals(HttpStatus.WARN, result.get(AjaxResult.CODE_TAG));
assertEquals("至少需要一条数据", result.get(AjaxResult.MSG_TAG));
}
}
@Test
void importData_shouldReturnSuccessWhenTaskCreated() throws Exception {
MockMultipartFile file = new MockMultipartFile(
"file",
"base-staff-asset.xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"asset".getBytes(StandardCharsets.UTF_8)
);
CcdiBaseStaffAssetInfoExcel excel = new CcdiBaseStaffAssetInfoExcel();
excel.setPersonId("320101199001010011");
when(baseStaffAssetImportService.importAssetInfo(List.of(excel))).thenReturn("task-1");
try (MockedStatic<EasyExcelUtil> mocked = mockStatic(EasyExcelUtil.class)) {
mocked.when(() -> EasyExcelUtil.importExcel(any(InputStream.class), eq(CcdiBaseStaffAssetInfoExcel.class)))
.thenReturn(List.of(excel));
AjaxResult result = controller.importData(file);
assertEquals(HttpStatus.SUCCESS, result.get(AjaxResult.CODE_TAG));
assertEquals("导入任务已提交,正在后台处理", result.get(AjaxResult.MSG_TAG));
ImportResultVO data = (ImportResultVO) result.get(AjaxResult.DATA_TAG);
assertEquals("task-1", data.getTaskId());
}
}
@Test
void getImportStatus_shouldDelegateToImportService() {
ImportStatusVO statusVO = new ImportStatusVO();
statusVO.setTaskId("task-2");
when(baseStaffAssetImportService.getImportStatus("task-2")).thenReturn(statusVO);
AjaxResult result = controller.getImportStatus("task-2");
assertEquals(HttpStatus.SUCCESS, result.get(AjaxResult.CODE_TAG));
assertEquals(statusVO, result.get(AjaxResult.DATA_TAG));
}
@Test
void getImportFailures_shouldReturnPagedRows() {
BaseStaffAssetImportFailureVO failure1 = new BaseStaffAssetImportFailureVO();
failure1.setPersonId("A1");
BaseStaffAssetImportFailureVO failure2 = new BaseStaffAssetImportFailureVO();
failure2.setPersonId("A2");
when(baseStaffAssetImportService.getImportFailures("task-3")).thenReturn(List.of(failure1, failure2));
TableDataInfo result = controller.getImportFailures("task-3", 2, 1);
assertEquals(2, result.getTotal());
assertEquals(1, result.getRows().size());
assertEquals("A2", ((BaseStaffAssetImportFailureVO) result.getRows().get(0)).getPersonId());
}
@Test
void importTemplate_shouldUseBaseStaffAssetTemplateName() {
try (MockedStatic<EasyExcelUtil> mocked = mockStatic(EasyExcelUtil.class)) {
controller.importTemplate(null);
mocked.verify(() -> EasyExcelUtil.importTemplateWithDictDropdown(null, CcdiBaseStaffAssetInfoExcel.class, "员工资产信息"));
}
}
}