Explorar el Código

Merge remote-tracking branch 'origin/feature/codegen-front' into feature/codegen-front

YunaiV hace 1 año
padre
commit
caeb23a3dc
Se han modificado 12 ficheros con 92 adiciones y 9 borrados
  1. 1 1
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java
  2. 1 1
      yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/IPUtils.java
  3. 2 2
      yudao-framework/yudao-spring-boot-starter-biz-tenant/pom.xml
  4. 42 0
      yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobTest.java
  5. 27 0
      yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/job/TestJob.java
  6. 4 0
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/SecurityProperties.java
  7. 1 1
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
  8. 2 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
  9. 2 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java
  10. 1 1
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderBaseVO.java
  11. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java
  12. 8 2
      yudao-ui-admin/src/views/login.vue

+ 1 - 1
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java

@@ -16,7 +16,7 @@ import java.util.regex.Pattern;
  */
 public class ValidationUtils {
 
-    private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[189]))\\d{8}$");
+    private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[0,1,4-9])|(?:5[0-3,5-9])|(?:6[2,5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[0-3,5-9]))\\d{8}$");
 
     private static final Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
 

+ 1 - 1
yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/IPUtils.java

@@ -51,7 +51,7 @@ public class IPUtils {
      */
     @SneakyThrows
     public static Integer getAreaId(String ip) {
-        return Integer.parseInt(SEARCHER.search(ip));
+        return Integer.parseInt(SEARCHER.search(ip.trim()));
     }
 
     /**

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-biz-tenant/pom.xml

@@ -52,8 +52,8 @@
 
         <!-- Test 测试相关 -->
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
 

+ 42 - 0
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobTest.java

@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.framework.tenant.core.job;
+
+import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService;
+import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
+import com.google.common.collect.Lists;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * 验证 job 租户逻辑
+ * {@link TenantJobHandlerDecorator}
+ *
+ * @author gaibu
+ */
+public class TenantJobTest extends BaseMockitoUnitTest {
+
+    @Mock
+    TenantFrameworkService tenantFrameworkService;
+
+    @Test
+    public void test() throws Exception {
+        // 准备测试租户 id
+        List<Long> tenantIds = Lists.newArrayList(1L, 2L, 3L);
+        // mock 数据
+        Mockito.doReturn(tenantIds).when(tenantFrameworkService).getTenantIds();
+        // 准备测试任务
+        TestJob testJob = new TestJob();
+        // 创建任务装饰器
+        TenantJobHandlerDecorator tenantJobHandlerDecorator = new TenantJobHandlerDecorator(tenantFrameworkService, testJob);
+
+        // 执行任务
+        tenantJobHandlerDecorator.execute(null);
+
+        // 断言返回值
+        assertEquals(testJob.getTenantIds(), tenantIds);
+    }
+}

+ 27 - 0
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/test/java/cn/iocoder/yudao/framework/tenant/core/job/TestJob.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.framework.tenant.core.job;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+@Component
+@TenantJob // 标记多租户
+public class TestJob implements JobHandler {
+
+    private final List<Long> tenantIds = new CopyOnWriteArrayList<>();
+
+    @Override
+    public String execute(String param) throws Exception {
+        tenantIds.add(TenantContextHolder.getTenantId());
+        return "success";
+    }
+
+    public List<Long> getTenantIds() {
+        CollUtil.sort(tenantIds, Long::compareTo);
+        return tenantIds;
+    }
+}

+ 4 - 0
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/SecurityProperties.java

@@ -37,4 +37,8 @@ public class SecurityProperties {
      */
     private List<String> permitAllUrls = Collections.emptyList();
 
+    /**
+     * PasswordEncoder 加密复杂度,越高开销越大
+     */
+    private Integer passwordEncoderLength = 4;
 }

+ 1 - 1
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java

@@ -69,7 +69,7 @@ public class YudaoSecurityAutoConfiguration {
      */
     @Bean
     public PasswordEncoder passwordEncoder() {
-        return new BCryptPasswordEncoder();
+        return new BCryptPasswordEncoder(securityProperties.getPasswordEncoderLength());
     }
 
     /**

+ 2 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java

@@ -135,6 +135,8 @@ public interface BpmTaskConvert {
     }
 
     @Mapping(source = "taskDefinitionKey", target = "definitionKey")
+    @Mapping(target = "createTime", expression = "java(bean.getCreateTime() == null ? null : LocalDateTime.ofInstant(bean.getCreateTime().toInstant(), ZoneId.systemDefault()))")
+    @Mapping(target = "endTime", expression = "java(bean.getEndTime() == null ? null : LocalDateTime.ofInstant(bean.getEndTime().toInstant(), ZoneId.systemDefault()))")
     BpmTaskRespVO convert3(HistoricTaskInstance bean);
 
     BpmTaskRespVO.User convert3(AdminUserRespDTO bean);

+ 2 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java

@@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
 import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
 import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
 import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import lombok.Data;
@@ -26,6 +27,7 @@ public class CodegenTableDO extends BaseDO {
     /**
      * ID 编号
      */
+    @TableId
     private Long id;
 
     /**

+ 1 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/vo/TradeOrderBaseVO.java

@@ -22,7 +22,7 @@ public class TradeOrderBaseVO {
     private String no;
 
     @Schema(description = "下单时间", required = true)
-    private Date createTime;
+    private LocalDateTime createTime;
 
     @Schema(description = "订单类型", required = true, example = "1")
     private Integer type;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/sms/SmsCodeDO.java

@@ -26,7 +26,7 @@ public class SmsCodeDO extends BaseDO {
     /**
      * 编号
      */
-    private Integer id;
+    private Long id;
     /**
      * 手机号
      */

+ 8 - 2
yudao-ui-admin/src/views/login.vue

@@ -52,11 +52,12 @@
                 </el-form-item>
                 <el-form-item prop="mobileCode">
                   <el-input v-model="loginForm.mobileCode" type="text" auto-complete="off" placeholder="短信验证码"
+                            class="sms-login-mobile-code-prefix"
                             @keyup.enter.native="handleLogin">
-                    <template v-slot="icon">
+                    <template>
                       <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/>
                     </template>
-                    <template v-slot="append">
+                    <template slot="append">
                       <span v-if="mobileCodeTimer <= 0" class="getMobileCode" @click="getSmsCode" style="cursor: pointer;">获取验证码</span>
                       <span v-if="mobileCodeTimer > 0" class="getMobileCode">{{ mobileCodeTimer }}秒后可重新获取</span>
                     </template>
@@ -335,4 +336,9 @@ export default {
   text-decoration: underline red;
   color: red;
 }
+.sms-login-mobile-code-prefix {
+  :deep(.el-input__prefix) {
+    top: 22%;
+  }
+}
 </style>