mirror of
https://gitee.com/zhijiantianya/ruoyi-vue-pro.git
synced 2026-10-06 07:22:59 +08:00
feat:增强对 JDK8 的兼容性
This commit is contained in:
+2
-2
@@ -6,8 +6,8 @@ import cn.iocoder.yudao.module.crm.framework.operatelog.core.CrmCustomerParseFun
|
||||
import cn.iocoder.yudao.module.crm.framework.operatelog.core.SysAdminUserParseFunction;
|
||||
import com.mzt.logapi.starter.annotation.DiffLogField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.DecimalMin;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import com.mzt.logapi.context.LogRecordContext;
|
||||
import com.mzt.logapi.service.impl.DiffParseFunction;
|
||||
import com.mzt.logapi.starter.annotation.LogRecord;
|
||||
import jakarta.annotation.Resource;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.in;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.DecimalMin;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseReturnService;
|
||||
import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService;
|
||||
import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOutService;
|
||||
import cn.iocoder.yudao.module.erp.service.sale.ErpSaleReturnService;
|
||||
import jakarta.annotation.Resource;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
+11
-11
@@ -20,14 +20,14 @@ import cn.iocoder.yudao.module.fms.service.config.FmsInitialBalanceService;
|
||||
import cn.iocoder.yudao.module.fms.service.config.FmsSubjectService;
|
||||
import cn.iocoder.yudao.module.fms.service.ledger.FmsLedgerService;
|
||||
import cn.iocoder.yudao.module.fms.service.voucher.FmsVoucherService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||
import org.springframework.test.context.bean.override.mockito.MockitoBean;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.sql.DataSource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
@@ -56,23 +56,23 @@ public class FmsReportTemplateServiceTest extends BaseDbUnitTest {
|
||||
@Resource
|
||||
private FmsCashFlowStatementServiceImpl cashFlowStatementService;
|
||||
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsAccountSetService accountSetService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsSubjectService subjectService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsLedgerService ledgerService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsFinanceParameterService financeParameterService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsInitialBalanceService initialBalanceService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsClosingPeriodService closingPeriodService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsClosingSchemeService closingSchemeService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsClosingVoucherService closingVoucherService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FmsVoucherService voucherService;
|
||||
|
||||
private final List<FmsSubjectDO> subjects = new ArrayList<>();
|
||||
|
||||
+10
-6
@@ -23,7 +23,6 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServic
|
||||
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.MESSAGE_SENSITIVE_WORD_BLOCKED;
|
||||
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.SENSITIVE_WORD_DUPLICATED;
|
||||
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.SENSITIVE_WORD_NOT_EXISTS;
|
||||
import static org.awaitility.Awaitility.await;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@@ -107,7 +106,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
|
||||
public void testValidateText_tenantIsolation() {
|
||||
// mock 不同租户的词库
|
||||
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
|
||||
.thenAnswer(invocation -> List.of(ImSensitiveWordDO.builder()
|
||||
.thenAnswer(invocation -> ListUtil.of(ImSensitiveWordDO.builder()
|
||||
.word(TenantContextHolder.getRequiredTenantId().equals(TENANT_ID) ? "firstbad" : "secondbad")
|
||||
.build()));
|
||||
|
||||
@@ -137,7 +136,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
|
||||
sensitiveWordService.validateText("hello world");
|
||||
verify(imSensitiveWordMapper).selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
// mock 删除后的词库
|
||||
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())).thenReturn(List.of());
|
||||
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())).thenReturn(ListUtil.of());
|
||||
|
||||
// 调用
|
||||
sensitiveWordService.deleteSensitiveWordList(ListUtil.of(1L, 2L));
|
||||
@@ -164,16 +163,21 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
|
||||
return LocalDateTime.of(2026, 9, 2, 0, 0);
|
||||
});
|
||||
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
|
||||
.thenReturn(List.of(ImSensitiveWordDO.builder().word("newbad").build()));
|
||||
.thenReturn(ListUtil.of(ImSensitiveWordDO.builder().word("newbad").build()));
|
||||
|
||||
// 调用
|
||||
LoadingCache<Long, ?> cache = (LoadingCache<Long, ?>) ReflectionTestUtils.getField(
|
||||
sensitiveWordService, "sensitiveWordBsCaches");
|
||||
Object oldCache = cache.getUnchecked(0L);
|
||||
cache.refresh(0L);
|
||||
|
||||
// 断言缓存异步刷新
|
||||
await().atMost(Duration.ofSeconds(5)).untilAsserted(() ->
|
||||
assertServiceException(() -> sensitiveWordService.validateText("newbad"), MESSAGE_SENSITIVE_WORD_BLOCKED));
|
||||
assertTimeoutPreemptively(Duration.ofSeconds(5), () -> {
|
||||
while (cache.getUnchecked(0L) == oldCache) {
|
||||
Thread.sleep(10);
|
||||
}
|
||||
});
|
||||
assertServiceException(() -> sensitiveWordService.validateText("newbad"), MESSAGE_SENSITIVE_WORD_BLOCKED);
|
||||
assertDoesNotThrow(() -> sensitiveWordService.validateText("badword"));
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -11,8 +11,8 @@ import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
+4
-2
@@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.infra.service.file;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
@@ -24,6 +25,7 @@ import lombok.SneakyThrows;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -42,7 +44,7 @@ public class FileServiceImpl implements FileService {
|
||||
/**
|
||||
* 允许上传的文件类型,可按业务需要调整
|
||||
*/
|
||||
private static final Set<String> ALLOWED_FILE_TYPES = Set.of(
|
||||
private static final Set<String> ALLOWED_FILE_TYPES = Collections.unmodifiableSet(CollUtil.newHashSet(
|
||||
// 图片
|
||||
"image/jpeg", "image/png", "image/gif", "image/webp", "image/bmp",
|
||||
"image/vnd.microsoft.icon", "image/tiff", "image/avif", "image/heic", "image/heif", "image/svg+xml",
|
||||
@@ -60,7 +62,7 @@ public class FileServiceImpl implements FileService {
|
||||
"audio/x-aac", "audio/x-flac", "audio/amr", "audio/x-ms-wma",
|
||||
"video/mp4", "video/quicktime", "video/x-msvideo", "video/webm", "video/x-ms-wmv", "video/x-flv",
|
||||
"application/x-matroska", "video/x-matroska"
|
||||
);
|
||||
));
|
||||
|
||||
/**
|
||||
* 上传文件的前缀,是否包含日期(yyyyMMdd)
|
||||
|
||||
+3
-3
@@ -11,14 +11,14 @@ import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresigned
|
||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
||||
import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper;
|
||||
import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
|
||||
import jakarta.annotation.Resource;
|
||||
import javax.annotation.Resource;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.test.context.bean.override.mockito.MockitoBean;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -45,7 +45,7 @@ public class FileServiceImplTest extends BaseDbUnitTest {
|
||||
@Resource
|
||||
private FileMapper fileMapper;
|
||||
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FileConfigService fileConfigService;
|
||||
|
||||
@BeforeEach
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockSe
|
||||
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
|
||||
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
|
||||
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
|
||||
import jakarta.annotation.Resource;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
-17
@@ -88,23 +88,6 @@ public class OaMailProviderSaveReqVO {
|
||||
return sslEnable == null || !sslEnable.equals(starttlsEnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验服务器主机名或 IP,不包含协议、路径和端口
|
||||
*/
|
||||
@AssertTrue(message = "请输入有效的服务器域名或 IP 地址")
|
||||
@JsonIgnore
|
||||
public boolean isHostValid() {
|
||||
if (StrUtil.isEmpty(host)) {
|
||||
return true;
|
||||
}
|
||||
if (host.contains(":")) {
|
||||
return Validator.isIpv6(host);
|
||||
}
|
||||
if (host.matches("\\d+(?:\\.\\d+){3}")) {
|
||||
return host.matches("(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)){3}");
|
||||
}
|
||||
return host.matches("(?i)[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*\\.?");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+13
-13
@@ -33,14 +33,14 @@ import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
|
||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
||||
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.test.context.bean.override.mockito.MockitoBean;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -74,25 +74,25 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
|
||||
@Resource
|
||||
private UserPostMapper userPostMapper;
|
||||
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private DeptService deptService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private PostService postService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private PermissionService permissionService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private RoleService roleService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private PasswordEncoder passwordEncoder;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private TenantService tenantService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private FileApi fileApi;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private ConfigApi configApi;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private OAuth2TokenService oauth2TokenService;
|
||||
@MockitoBean
|
||||
@MockBean
|
||||
private AdminUserProducer adminUserProducer;
|
||||
|
||||
@BeforeEach
|
||||
@@ -363,7 +363,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
|
||||
mockUserRole(adminUser.getId(), RoleCodeEnum.TENANT_ADMIN);
|
||||
|
||||
// 调用,并断言整批未删除
|
||||
assertServiceException(() -> userService.deleteUserList(List.of(ordinaryUser.getId(), adminUser.getId())),
|
||||
assertServiceException(() -> userService.deleteUserList(newArrayList(ordinaryUser.getId(), adminUser.getId())),
|
||||
USER_ADMIN_NOT_ALLOW_DELETE);
|
||||
assertNotNull(userMapper.selectById(ordinaryUser.getId()));
|
||||
assertNotNull(userMapper.selectById(adminUser.getId()));
|
||||
|
||||
Reference in New Issue
Block a user