1. 新增物料相关接口

2. 修复部分服务因为包名设置错误导致无法采集日志的错误
This commit is contained in:
chenbowen
2025-11-06 13:41:56 +08:00
parent 4f50e517b8
commit 2e65960bf1
35 changed files with 1894 additions and 2 deletions

View File

@@ -0,0 +1,87 @@
package com.zt.plat.module.base.api.businessdictionarytype;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryDataDTO;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryTypePageReqDTO;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryTypeRespDTO;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryTypeSaveReqDTO;
import com.zt.plat.module.base.controller.admin.businessdictionarytype.vo.BusinessDictionaryTypePageReqVO;
import com.zt.plat.module.base.controller.admin.businessdictionarytype.vo.BusinessDictionaryTypeRespVO;
import com.zt.plat.module.base.controller.admin.businessdictionarytype.vo.BusinessDictionaryTypeSaveReqVO;
import com.zt.plat.module.base.dal.dataobject.businessdictionarytype.BusinessDictionaryDataDO;
import com.zt.plat.module.base.dal.dataobject.businessdictionarytype.BusinessDictionaryTypeDO;
import com.zt.plat.module.base.service.businessdictionarytype.BusinessDictionaryTypeService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
@RestController
@Validated
public class BusinessDictionaryTypeApiImpl implements BusinessDictionaryTypeApi {
@Resource
private BusinessDictionaryTypeService businessDictionaryTypeService;
@Override
public CommonResult<BusinessDictionaryTypeRespDTO> createBusinessDictionaryType(BusinessDictionaryTypeSaveReqDTO createReqDTO) {
BusinessDictionaryTypeRespVO respVO = businessDictionaryTypeService.createBusinessDictionaryType(convertSaveReq(createReqDTO));
return success(BeanUtils.toBean(respVO, BusinessDictionaryTypeRespDTO.class));
}
@Override
public CommonResult<Boolean> updateBusinessDictionaryType(BusinessDictionaryTypeSaveReqDTO updateReqDTO) {
businessDictionaryTypeService.updateBusinessDictionaryType(convertSaveReq(updateReqDTO));
return success(true);
}
@Override
public CommonResult<Boolean> deleteBusinessDictionaryType(Long id) {
businessDictionaryTypeService.deleteBusinessDictionaryType(id);
return success(true);
}
@Override
public CommonResult<Boolean> deleteBusinessDictionaryTypeList(List<Long> ids) {
businessDictionaryTypeService.deleteBusinessDictionaryTypeListByIds(ids);
return success(true);
}
@Override
public CommonResult<BusinessDictionaryTypeRespDTO> getBusinessDictionaryType(Long id) {
BusinessDictionaryTypeDO typeDO = businessDictionaryTypeService.getBusinessDictionaryType(id);
return success(BeanUtils.toBean(typeDO, BusinessDictionaryTypeRespDTO.class));
}
@Override
public CommonResult<PageResult<BusinessDictionaryTypeRespDTO>> getBusinessDictionaryTypePage(BusinessDictionaryTypePageReqDTO pageReqDTO) {
BusinessDictionaryTypePageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BusinessDictionaryTypePageReqVO.class);
PageResult<BusinessDictionaryTypeDO> pageResult = businessDictionaryTypeService.getBusinessDictionaryTypePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, BusinessDictionaryTypeRespDTO.class));
}
@Override
public CommonResult<List<BusinessDictionaryDataDTO>> getBusinessDictionaryDataListByDictionaryTypeId(Long dictionaryTypeId) {
List<BusinessDictionaryDataDO> list = businessDictionaryTypeService.getBusinessDictionaryDataListByDictionaryTypeId(dictionaryTypeId);
return success(BeanUtils.toBean(list, BusinessDictionaryDataDTO.class));
}
@Override
public CommonResult<List<BusinessDictionaryDataDTO>> getBusinessDictionaryDataListByType(String type) {
List<BusinessDictionaryDataDO> list = businessDictionaryTypeService.getBusinessDictionaryDataListByType(type);
return success(BeanUtils.toBean(list, BusinessDictionaryDataDTO.class));
}
private BusinessDictionaryTypeSaveReqVO convertSaveReq(BusinessDictionaryTypeSaveReqDTO dto) {
BusinessDictionaryTypeSaveReqVO reqVO = BeanUtils.toBean(dto, BusinessDictionaryTypeSaveReqVO.class);
if (dto.getBusinessDictionaryDatas() != null && !dto.getBusinessDictionaryDatas().isEmpty()) {
reqVO.setBusinessDictionaryDatas(BeanUtils.toBean(dto.getBusinessDictionaryDatas(), BusinessDictionaryDataDO.class));
}
return reqVO;
}
}

View File

@@ -0,0 +1,64 @@
package com.zt.plat.module.base.api.departmentmaterial;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.base.api.departmentmaterial.dto.DepartmentMaterialPageReqDTO;
import com.zt.plat.module.base.api.departmentmaterial.dto.DepartmentMaterialRespDTO;
import com.zt.plat.module.base.api.departmentmaterial.dto.DepartmentMaterialSaveReqDTO;
import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.DepartmentMaterialPageReqVO;
import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.DepartmentMaterialRespVO;
import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.DepartmentMaterialSaveReqVO;
import com.zt.plat.module.base.service.departmentmaterial.DepartmentMaterialService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
@RestController
@Validated
public class DepartmentMaterialApiImpl implements DepartmentMaterialApi {
@Resource
private DepartmentMaterialService departmentMaterialService;
@Override
public CommonResult<DepartmentMaterialRespDTO> createDepartmentMaterial(DepartmentMaterialSaveReqDTO createReqDTO) {
DepartmentMaterialRespVO respVO = departmentMaterialService.createDepartmentMaterial(BeanUtils.toBean(createReqDTO, DepartmentMaterialSaveReqVO.class));
return success(BeanUtils.toBean(respVO, DepartmentMaterialRespDTO.class));
}
@Override
public CommonResult<Boolean> updateDepartmentMaterial(DepartmentMaterialSaveReqDTO updateReqDTO) {
departmentMaterialService.updateDepartmentMaterial(BeanUtils.toBean(updateReqDTO, DepartmentMaterialSaveReqVO.class));
return success(true);
}
@Override
public CommonResult<Boolean> deleteDepartmentMaterial(Long id) {
departmentMaterialService.deleteDepartmentMaterial(id);
return success(true);
}
@Override
public CommonResult<Boolean> deleteDepartmentMaterialList(List<Long> ids) {
departmentMaterialService.deleteDepartmentMaterialListByIds(ids);
return success(true);
}
@Override
public CommonResult<DepartmentMaterialRespDTO> getDepartmentMaterial(Long id) {
DepartmentMaterialRespVO respVO = departmentMaterialService.getDepartmentMaterial(id);
return success(BeanUtils.toBean(respVO, DepartmentMaterialRespDTO.class));
}
@Override
public CommonResult<PageResult<DepartmentMaterialRespDTO>> getDepartmentMaterialPage(DepartmentMaterialPageReqDTO pageReqDTO) {
DepartmentMaterialPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, DepartmentMaterialPageReqVO.class);
PageResult<DepartmentMaterialRespVO> pageResult = departmentMaterialService.getDepartmentMaterialPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DepartmentMaterialRespDTO.class));
}
}

View File

@@ -0,0 +1,97 @@
package com.zt.plat.module.base.api.materialclasses;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesPageReqDTO;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesRespDTO;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesSaveReqDTO;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesTreeRespDTO;
import com.zt.plat.module.base.controller.admin.materialclasses.vo.MaterialClassesPageReqVO;
import com.zt.plat.module.base.controller.admin.materialclasses.vo.MaterialClassesRespVO;
import com.zt.plat.module.base.controller.admin.materialclasses.vo.MaterialClassesSaveReqVO;
import com.zt.plat.module.base.dal.dataobject.materialclasses.MaterialClassesDO;
import com.zt.plat.module.base.service.materialclasses.MaterialClassesService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
@RestController
@Validated
public class MaterialClassesApiImpl implements MaterialClassesApi {
@Resource
private MaterialClassesService materialClassesService;
@Override
public CommonResult<MaterialClassesRespDTO> createMaterialClasses(MaterialClassesSaveReqDTO createReqDTO) {
MaterialClassesRespVO respVO = materialClassesService.createMaterialClasses(BeanUtils.toBean(createReqDTO, MaterialClassesSaveReqVO.class));
return success(BeanUtils.toBean(respVO, MaterialClassesRespDTO.class));
}
@Override
public CommonResult<Boolean> updateMaterialClasses(MaterialClassesSaveReqDTO updateReqDTO) {
materialClassesService.updateMaterialClasses(BeanUtils.toBean(updateReqDTO, MaterialClassesSaveReqVO.class));
return success(true);
}
@Override
public CommonResult<Boolean> deleteMaterialClasses(Long id) {
materialClassesService.deleteMaterialClasses(id);
return success(true);
}
@Override
public CommonResult<Boolean> deleteMaterialClassesList(List<Long> ids) {
materialClassesService.deleteMaterialClassesListByIds(ids);
return success(true);
}
@Override
public CommonResult<MaterialClassesRespDTO> getMaterialClasses(Long id) {
MaterialClassesDO classesDO = materialClassesService.getMaterialClasses(id);
return success(BeanUtils.toBean(classesDO, MaterialClassesRespDTO.class));
}
@Override
public CommonResult<PageResult<MaterialClassesRespDTO>> getMaterialClassesPage(MaterialClassesPageReqDTO pageReqDTO) {
MaterialClassesPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, MaterialClassesPageReqVO.class);
PageResult<MaterialClassesDO> pageResult = materialClassesService.getMaterialClassesPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialClassesRespDTO.class));
}
@Override
public CommonResult<List<MaterialClassesTreeRespDTO>> getMaterialClassesTree() {
List<MaterialClassesDO> list = materialClassesService.getMaterialClassesList();
return success(buildTree(list));
}
private List<MaterialClassesTreeRespDTO> buildTree(List<MaterialClassesDO> list) {
if (list == null || list.isEmpty()) {
return Collections.emptyList();
}
Map<Long, MaterialClassesTreeRespDTO> nodeMap = new LinkedHashMap<>();
list.stream()
.sorted(Comparator.comparing(MaterialClassesDO::getId))
.forEach(item -> nodeMap.put(item.getId(), BeanUtils.toBean(item, MaterialClassesTreeRespDTO.class)));
List<MaterialClassesTreeRespDTO> roots = new ArrayList<>();
nodeMap.values().forEach(node -> {
Long parentId = node.getParentId();
if (parentId == null || parentId == 0 || !nodeMap.containsKey(parentId)) {
roots.add(node);
} else {
nodeMap.get(parentId).getChildren().add(node);
}
});
return roots;
}
}

View File

@@ -1,8 +1,8 @@
<configuration>
<!-- 引用 Spring Boot 的 logback 基础配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!-- 变量 yudao.info.base-package基础业务包 -->
<springProperty scope="context" name="yudao.info.base-package" source="yudao.info.base-package"/>
<!-- 变量 zt.info.base-package基础业务包 -->
<springProperty scope="context" name="zt.info.base-package" source="zt.info.base-package"/>
<!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level级别从左显示 5 个字符宽度,%msg日志消息%n是换行符 -->
<property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} | %highlight(${LOG_LEVEL_PATTERN:-%5p} ${PID:- }) | %boldYellow(%thread [%tid]) %boldGreen(%-40.40logger{39}) | %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

View File

@@ -0,0 +1,201 @@
package com.zt.plat.module.base.api.businessdictionarytype;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryDataDTO;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryTypePageReqDTO;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryTypeRespDTO;
import com.zt.plat.module.base.api.businessdictionarytype.dto.BusinessDictionaryTypeSaveReqDTO;
import com.zt.plat.module.base.controller.admin.businessdictionarytype.vo.BusinessDictionaryTypePageReqVO;
import com.zt.plat.module.base.controller.admin.businessdictionarytype.vo.BusinessDictionaryTypeRespVO;
import com.zt.plat.module.base.controller.admin.businessdictionarytype.vo.BusinessDictionaryTypeSaveReqVO;
import com.zt.plat.module.base.dal.dataobject.businessdictionarytype.BusinessDictionaryDataDO;
import com.zt.plat.module.base.dal.dataobject.businessdictionarytype.BusinessDictionaryTypeDO;
import com.zt.plat.module.base.service.businessdictionarytype.BusinessDictionaryTypeService;
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;
import java.time.LocalDateTime;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class BusinessDictionaryTypeApiImplTest {
@InjectMocks
private BusinessDictionaryTypeApiImpl api;
@Mock
private BusinessDictionaryTypeService businessDictionaryTypeService;
private BusinessDictionaryTypeSaveReqDTO buildSaveReqDTO() {
BusinessDictionaryDataDTO dataDTO = new BusinessDictionaryDataDTO();
dataDTO.setId(10L);
dataDTO.setLabel("启用");
dataDTO.setValue("ENABLE");
dataDTO.setRemark("默认状态");
BusinessDictionaryTypeSaveReqDTO dto = new BusinessDictionaryTypeSaveReqDTO();
dto.setId(1L);
dto.setName("状态字典");
dto.setType("base_material_status");
dto.setStatus(0L);
dto.setRemark("备注");
dto.setBusinessDictionaryDatas(List.of(dataDTO));
return dto;
}
private BusinessDictionaryTypeRespVO buildRespVO() {
BusinessDictionaryTypeRespVO respVO = new BusinessDictionaryTypeRespVO();
respVO.setId(1L);
respVO.setName("状态字典");
respVO.setType("base_material_status");
respVO.setStatus(0L);
respVO.setRemark("备注");
respVO.setCreateTime(LocalDateTime.now());
return respVO;
}
@Test
void createBusinessDictionaryType_shouldForwardToServiceAndReturnConvertedDto() {
BusinessDictionaryTypeSaveReqDTO reqDTO = buildSaveReqDTO();
BusinessDictionaryTypeRespVO serviceResp = buildRespVO();
when(businessDictionaryTypeService.createBusinessDictionaryType(any(BusinessDictionaryTypeSaveReqVO.class)))
.thenReturn(serviceResp);
CommonResult<BusinessDictionaryTypeRespDTO> result = api.createBusinessDictionaryType(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).usingRecursiveComparison()
.ignoringFields("createTime")
.isEqualTo(BeanAssertHelper.toRespDTO(serviceResp));
ArgumentCaptor<BusinessDictionaryTypeSaveReqVO> captor = ArgumentCaptor.forClass(BusinessDictionaryTypeSaveReqVO.class);
verify(businessDictionaryTypeService).createBusinessDictionaryType(captor.capture());
BusinessDictionaryTypeSaveReqVO passed = captor.getValue();
assertThat(passed.getName()).isEqualTo(reqDTO.getName());
assertThat(passed.getBusinessDictionaryDatas()).hasSize(1);
BusinessDictionaryDataDO dataDO = passed.getBusinessDictionaryDatas().get(0);
assertThat(dataDO.getLabel()).isEqualTo("启用");
assertThat(dataDO.getValue()).isEqualTo("ENABLE");
}
@Test
void updateBusinessDictionaryType_shouldInvokeServiceWithConvertedPayload() {
BusinessDictionaryTypeSaveReqDTO reqDTO = buildSaveReqDTO();
CommonResult<Boolean> result = api.updateBusinessDictionaryType(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
ArgumentCaptor<BusinessDictionaryTypeSaveReqVO> captor = ArgumentCaptor.forClass(BusinessDictionaryTypeSaveReqVO.class);
verify(businessDictionaryTypeService).updateBusinessDictionaryType(captor.capture());
assertThat(captor.getValue().getName()).isEqualTo(reqDTO.getName());
}
@Test
void deleteBusinessDictionaryType_shouldInvokeService() {
CommonResult<Boolean> result = api.deleteBusinessDictionaryType(123L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
verify(businessDictionaryTypeService).deleteBusinessDictionaryType(123L);
}
@Test
void deleteBusinessDictionaryTypeList_shouldInvokeService() {
List<Long> ids = List.of(1L, 2L);
CommonResult<Boolean> result = api.deleteBusinessDictionaryTypeList(ids);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
verify(businessDictionaryTypeService).deleteBusinessDictionaryTypeListByIds(ids);
}
@Test
void getBusinessDictionaryType_shouldConvertDoToDto() {
BusinessDictionaryTypeDO typeDO = new BusinessDictionaryTypeDO();
typeDO.setId(55L);
typeDO.setName("状态字典");
when(businessDictionaryTypeService.getBusinessDictionaryType(55L)).thenReturn(typeDO);
CommonResult<BusinessDictionaryTypeRespDTO> result = api.getBusinessDictionaryType(55L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getId()).isEqualTo(55L);
assertThat(result.getData().getName()).isEqualTo("状态字典");
}
@Test
void getBusinessDictionaryTypePage_shouldConvertPageResult() {
BusinessDictionaryTypeDO typeDO = new BusinessDictionaryTypeDO();
typeDO.setId(11L);
typeDO.setName("状态");
PageResult<BusinessDictionaryTypeDO> page = new PageResult<>(List.of(typeDO), 1L);
when(businessDictionaryTypeService.getBusinessDictionaryTypePage(any(BusinessDictionaryTypePageReqVO.class)))
.thenReturn(page);
BusinessDictionaryTypePageReqDTO reqDTO = new BusinessDictionaryTypePageReqDTO();
reqDTO.setName("状态");
CommonResult<PageResult<BusinessDictionaryTypeRespDTO>> result = api.getBusinessDictionaryTypePage(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getList()).hasSize(1);
assertThat(result.getData().getList().get(0).getName()).isEqualTo("状态");
assertThat(result.getData().getTotal()).isEqualTo(1L);
}
@Test
void getBusinessDictionaryDataListByDictionaryTypeId_shouldConvertList() {
BusinessDictionaryDataDO dataDO = new BusinessDictionaryDataDO();
dataDO.setId(9L);
dataDO.setLabel("启用");
when(businessDictionaryTypeService.getBusinessDictionaryDataListByDictionaryTypeId(8L))
.thenReturn(List.of(dataDO));
CommonResult<List<BusinessDictionaryDataDTO>> result = api.getBusinessDictionaryDataListByDictionaryTypeId(8L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).hasSize(1);
assertThat(result.getData().get(0).getLabel()).isEqualTo("启用");
}
@Test
void getBusinessDictionaryDataListByType_shouldConvertList() {
BusinessDictionaryDataDO dataDO = new BusinessDictionaryDataDO();
dataDO.setId(9L);
dataDO.setValue("ENABLE");
when(businessDictionaryTypeService.getBusinessDictionaryDataListByType("base_material_status"))
.thenReturn(List.of(dataDO));
CommonResult<List<BusinessDictionaryDataDTO>> result = api.getBusinessDictionaryDataListByType("base_material_status");
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).hasSize(1);
assertThat(result.getData().get(0).getValue()).isEqualTo("ENABLE");
}
private static final class BeanAssertHelper {
private BeanAssertHelper() {
}
static BusinessDictionaryTypeRespDTO toRespDTO(BusinessDictionaryTypeRespVO respVO) {
BusinessDictionaryTypeRespDTO dto = new BusinessDictionaryTypeRespDTO();
dto.setId(respVO.getId());
dto.setName(respVO.getName());
dto.setType(respVO.getType());
dto.setStatus(respVO.getStatus());
dto.setRemark(respVO.getRemark());
dto.setCreateTime(respVO.getCreateTime());
return dto;
}
}
}

View File

@@ -0,0 +1,146 @@
package com.zt.plat.module.base.api.departmentmaterial;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.base.api.departmentmaterial.dto.DepartmentMaterialPageReqDTO;
import com.zt.plat.module.base.api.departmentmaterial.dto.DepartmentMaterialRespDTO;
import com.zt.plat.module.base.api.departmentmaterial.dto.DepartmentMaterialSaveReqDTO;
import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.DepartmentMaterialPageReqVO;
import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.DepartmentMaterialRespVO;
import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.DepartmentMaterialSaveReqVO;
import com.zt.plat.module.base.service.departmentmaterial.DepartmentMaterialService;
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;
import java.time.LocalDateTime;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class DepartmentMaterialApiImplTest {
@InjectMocks
private DepartmentMaterialApiImpl api;
@Mock
private DepartmentMaterialService departmentMaterialService;
private DepartmentMaterialSaveReqDTO buildSaveReq() {
DepartmentMaterialSaveReqDTO dto = new DepartmentMaterialSaveReqDTO();
dto.setId(100L);
dto.setDeptId(200L);
dto.setInfomationId(300L);
dto.setClassesId(400L);
dto.setDictionaryDataValue("TYPE");
dto.setStatus("ENABLE");
dto.setRemark("备注");
return dto;
}
private DepartmentMaterialRespVO buildRespVO() {
DepartmentMaterialRespVO respVO = new DepartmentMaterialRespVO();
respVO.setId(100L);
respVO.setDeptId(200L);
respVO.setInfomationId(300L);
respVO.setClassesId(400L);
respVO.setDictionaryDataValue("TYPE");
respVO.setRemark("备注");
respVO.setStatus("ENABLE");
respVO.setMaterialName("原材料");
respVO.setCreateTime(LocalDateTime.now());
return respVO;
}
@Test
void createDepartmentMaterial_shouldForwardToServiceAndReturnConvertedDto() {
DepartmentMaterialSaveReqDTO reqDTO = buildSaveReq();
DepartmentMaterialRespVO serviceResp = buildRespVO();
when(departmentMaterialService.createDepartmentMaterial(any(DepartmentMaterialSaveReqVO.class)))
.thenReturn(serviceResp);
CommonResult<DepartmentMaterialRespDTO> result = api.createDepartmentMaterial(reqDTO);
assertThat(result.isSuccess()).isTrue();
DepartmentMaterialRespDTO data = result.getData();
assertThat(data.getId()).isEqualTo(serviceResp.getId());
assertThat(data.getMaterialName()).isEqualTo("原材料");
ArgumentCaptor<DepartmentMaterialSaveReqVO> captor = ArgumentCaptor.forClass(DepartmentMaterialSaveReqVO.class);
verify(departmentMaterialService).createDepartmentMaterial(captor.capture());
DepartmentMaterialSaveReqVO passed = captor.getValue();
assertThat(passed.getDeptId()).isEqualTo(reqDTO.getDeptId());
assertThat(passed.getInfomationId()).isEqualTo(reqDTO.getInfomationId());
assertThat(passed.getDictionaryDataValue()).isEqualTo(reqDTO.getDictionaryDataValue());
}
@Test
void updateDepartmentMaterial_shouldInvokeService() {
DepartmentMaterialSaveReqDTO reqDTO = buildSaveReq();
CommonResult<Boolean> result = api.updateDepartmentMaterial(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
ArgumentCaptor<DepartmentMaterialSaveReqVO> captor = ArgumentCaptor.forClass(DepartmentMaterialSaveReqVO.class);
verify(departmentMaterialService).updateDepartmentMaterial(captor.capture());
assertThat(captor.getValue().getDeptId()).isEqualTo(reqDTO.getDeptId());
}
@Test
void deleteDepartmentMaterial_shouldInvokeService() {
CommonResult<Boolean> result = api.deleteDepartmentMaterial(99L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
verify(departmentMaterialService).deleteDepartmentMaterial(99L);
}
@Test
void deleteDepartmentMaterialList_shouldInvokeService() {
List<Long> ids = List.of(1L, 2L, 3L);
CommonResult<Boolean> result = api.deleteDepartmentMaterialList(ids);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
verify(departmentMaterialService).deleteDepartmentMaterialListByIds(ids);
}
@Test
void getDepartmentMaterial_shouldConvertVoToDto() {
DepartmentMaterialRespVO respVO = buildRespVO();
when(departmentMaterialService.getDepartmentMaterial(11L)).thenReturn(respVO);
CommonResult<DepartmentMaterialRespDTO> result = api.getDepartmentMaterial(11L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getId()).isEqualTo(respVO.getId());
assertThat(result.getData().getMaterialName()).isEqualTo(respVO.getMaterialName());
}
@Test
void getDepartmentMaterialPage_shouldConvertPageResult() {
DepartmentMaterialRespVO respVO = buildRespVO();
PageResult<DepartmentMaterialRespVO> page = new PageResult<>(List.of(respVO), 1L);
when(departmentMaterialService.getDepartmentMaterialPage(any(DepartmentMaterialPageReqVO.class)))
.thenReturn(page);
DepartmentMaterialPageReqDTO reqDTO = new DepartmentMaterialPageReqDTO();
reqDTO.setDeptId(200L);
CommonResult<PageResult<DepartmentMaterialRespDTO>> result = api.getDepartmentMaterialPage(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getList()).hasSize(1);
assertThat(result.getData().getList().get(0).getMaterialName()).isEqualTo("原材料");
assertThat(result.getData().getTotal()).isEqualTo(1L);
}
}

View File

@@ -0,0 +1,180 @@
package com.zt.plat.module.base.api.materialclasses;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesPageReqDTO;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesRespDTO;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesSaveReqDTO;
import com.zt.plat.module.base.api.materialclasses.dto.MaterialClassesTreeRespDTO;
import com.zt.plat.module.base.controller.admin.materialclasses.vo.MaterialClassesPageReqVO;
import com.zt.plat.module.base.controller.admin.materialclasses.vo.MaterialClassesRespVO;
import com.zt.plat.module.base.controller.admin.materialclasses.vo.MaterialClassesSaveReqVO;
import com.zt.plat.module.base.dal.dataobject.materialclasses.MaterialClassesDO;
import com.zt.plat.module.base.service.materialclasses.MaterialClassesService;
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;
import java.time.LocalDateTime;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class MaterialClassesApiImplTest {
@InjectMocks
private MaterialClassesApiImpl api;
@Mock
private MaterialClassesService materialClassesService;
private MaterialClassesSaveReqDTO buildSaveReq() {
MaterialClassesSaveReqDTO dto = new MaterialClassesSaveReqDTO();
dto.setId(1L);
dto.setParentId(0L);
dto.setCode("CLS001");
dto.setName("原材料");
dto.setLevel(1L);
dto.setRemark("顶级分类");
return dto;
}
private MaterialClassesRespVO buildRespVO() {
MaterialClassesRespVO respVO = new MaterialClassesRespVO();
respVO.setId(1L);
respVO.setParentId(0L);
respVO.setCode("CLS001");
respVO.setName("原材料");
respVO.setLevel(1L);
respVO.setRemark("顶级分类");
respVO.setCreateTime(LocalDateTime.now());
return respVO;
}
@Test
void createMaterialClasses_shouldForwardToServiceAndReturnConvertedDto() {
MaterialClassesSaveReqDTO reqDTO = buildSaveReq();
MaterialClassesRespVO serviceResp = buildRespVO();
when(materialClassesService.createMaterialClasses(any(MaterialClassesSaveReqVO.class)))
.thenReturn(serviceResp);
CommonResult<MaterialClassesRespDTO> result = api.createMaterialClasses(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getName()).isEqualTo("原材料");
ArgumentCaptor<MaterialClassesSaveReqVO> captor = ArgumentCaptor.forClass(MaterialClassesSaveReqVO.class);
verify(materialClassesService).createMaterialClasses(captor.capture());
MaterialClassesSaveReqVO passed = captor.getValue();
assertThat(passed.getCode()).isEqualTo(reqDTO.getCode());
assertThat(passed.getName()).isEqualTo(reqDTO.getName());
}
@Test
void updateMaterialClasses_shouldInvokeService() {
MaterialClassesSaveReqDTO reqDTO = buildSaveReq();
CommonResult<Boolean> result = api.updateMaterialClasses(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
ArgumentCaptor<MaterialClassesSaveReqVO> captor = ArgumentCaptor.forClass(MaterialClassesSaveReqVO.class);
verify(materialClassesService).updateMaterialClasses(captor.capture());
assertThat(captor.getValue().getCode()).isEqualTo(reqDTO.getCode());
}
@Test
void deleteMaterialClasses_shouldInvokeService() {
CommonResult<Boolean> result = api.deleteMaterialClasses(5L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
verify(materialClassesService).deleteMaterialClasses(5L);
}
@Test
void deleteMaterialClassesList_shouldInvokeService() {
List<Long> ids = List.of(3L, 4L);
CommonResult<Boolean> result = api.deleteMaterialClassesList(ids);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData()).isTrue();
verify(materialClassesService).deleteMaterialClassesListByIds(ids);
}
@Test
void getMaterialClasses_shouldConvertDoToDto() {
MaterialClassesDO classesDO = new MaterialClassesDO();
classesDO.setId(7L);
classesDO.setName("辅料");
when(materialClassesService.getMaterialClasses(7L)).thenReturn(classesDO);
CommonResult<MaterialClassesRespDTO> result = api.getMaterialClasses(7L);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getId()).isEqualTo(7L);
assertThat(result.getData().getName()).isEqualTo("辅料");
}
@Test
void getMaterialClassesPage_shouldConvertPageResult() {
MaterialClassesDO classesDO = new MaterialClassesDO();
classesDO.setId(8L);
classesDO.setName("辅料");
PageResult<MaterialClassesDO> page = new PageResult<>(List.of(classesDO), 1L);
when(materialClassesService.getMaterialClassesPage(any(MaterialClassesPageReqVO.class)))
.thenReturn(page);
MaterialClassesPageReqDTO reqDTO = new MaterialClassesPageReqDTO();
reqDTO.setName("辅料");
CommonResult<PageResult<MaterialClassesRespDTO>> result = api.getMaterialClassesPage(reqDTO);
assertThat(result.isSuccess()).isTrue();
assertThat(result.getData().getList()).hasSize(1);
assertThat(result.getData().getList().get(0).getName()).isEqualTo("辅料");
assertThat(result.getData().getTotal()).isEqualTo(1L);
}
@Test
void getMaterialClassesTree_shouldAssembleHierarchy() {
MaterialClassesDO root = new MaterialClassesDO();
root.setId(1L);
root.setParentId(0L);
root.setName("根节点");
MaterialClassesDO child = new MaterialClassesDO();
child.setId(2L);
child.setParentId(1L);
child.setName("子节点");
MaterialClassesDO orphan = new MaterialClassesDO();
orphan.setId(3L);
orphan.setParentId(99L);
orphan.setName("孤儿节点");
when(materialClassesService.getMaterialClassesList()).thenReturn(List.of(child, root, orphan));
CommonResult<List<MaterialClassesTreeRespDTO>> result = api.getMaterialClassesTree();
assertThat(result.isSuccess()).isTrue();
List<MaterialClassesTreeRespDTO> tree = result.getData();
assertThat(tree).hasSize(2);
MaterialClassesTreeRespDTO rootNode = tree.get(0);
assertThat(rootNode.getId()).isEqualTo(1L);
assertThat(rootNode.getChildren()).hasSize(1);
assertThat(rootNode.getChildren().get(0).getId()).isEqualTo(2L);
MaterialClassesTreeRespDTO orphanNode = tree.get(1);
assertThat(orphanNode.getId()).isEqualTo(3L);
assertThat(orphanNode.getChildren()).isEmpty();
}
}