xiongzhu %!s(int64=3) %!d(string=hai) anos
pai
achega
ef62caf8f7

+ 22 - 1
src/main/java/com/izouma/nineth/service/IdentityAuthService.java

@@ -10,6 +10,7 @@ import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.IdentityAuthRepo;
 import com.izouma.nineth.repo.UserRepo;
+import com.izouma.nineth.utils.DateTimeUtils;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -19,9 +20,12 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Service
@@ -119,9 +123,26 @@ public class IdentityAuthService {
         try {
             List<IdentityAuth> list = identityAuthRepo.findByStatusAndAutoValidated(AuthStatus.PENDING, false);
             list.parallelStream().forEach(identityAuth -> {
-                int count = identityAuthRepo.countByIdNoAndStatus(identityAuth.getIdNo(), AuthStatus.SUCCESS);
                 boolean success = false;
                 String reason = null;
+
+                if (!Pattern.matches("[1-9]{1}[0-9]{5}(19|20)[0-9]{2}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|([1-2]{1}[0-9]{1}|(3[0-1]{1})))[0-9]{3}[0-9x]{1}", identityAuth.getIdNo())) {
+                    audit(identityAuth.getId(), AuthStatus.FAIL, "身份证格式错误");
+                    return;
+                } else {
+                    LocalDate birth = DateTimeUtils.toLocalDate(identityAuth.getIdNo().substring(6, 14), "yyyyMMdd");
+                    long age = ChronoUnit.YEARS.between(birth, LocalDate.now());
+                    if (age < 18) {
+                        audit(identityAuth.getId(), AuthStatus.FAIL, "未满18岁");
+                        return;
+                    } else if (age > 60) {
+                        audit(identityAuth.getId(), AuthStatus.FAIL, "超过60岁");
+                        return;
+                    }
+                }
+
+                int count = identityAuthRepo.countByIdNoAndStatus(identityAuth.getIdNo(), AuthStatus.SUCCESS);
+
                 if (count >= 3) {
                     success = false;
                     reason = "同一身份证注册超过3个";

+ 2 - 1
src/main/vue/src/views/IdentityAuthList.vue

@@ -107,7 +107,8 @@
             </el-table-column>
             <el-table-column prop="status" label="审核状态" :formatter="statusFormatter" width="120" align="center">
             </el-table-column>
-            <el-table-column prop="createdAt" label="时间" width="150">
+            <el-table-column prop="createdAt" label="时间" width="150"/>
+            <el-table-column prop="reason" label="原因" show-overflow-tooltip/>
             <el-table-column label="操作" align="center" fixed="right" width="210">
                 <template slot-scope="{ row }">
                     <el-button @click="repeat(row)" type="success" size="mini" plain> 查重 </el-button>

+ 7 - 6
src/test/java/com/izouma/nineth/CommonTest.java

@@ -8,8 +8,8 @@ import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.BaseEntity;
 import com.izouma.nineth.domain.BlindBoxItem;
 import com.izouma.nineth.domain.User;
-import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.utils.AESEncryptUtil;
+import com.izouma.nineth.utils.DateTimeUtils;
 import com.izouma.nineth.utils.TokenUtils;
 import com.izouma.nineth.web.BaseController;
 import io.ipfs.api.IPFS;
@@ -66,6 +66,8 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.security.NoSuchAlgorithmException;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
 import java.util.List;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
@@ -458,10 +460,9 @@ public class CommonTest {
     public void aasdf() {
         System.out.println(new ArrayList<>(10).size());
 
-        PageQuery p1 = new PageQuery();
-        PageQuery p2 = new PageQuery();
-        p1.setPage(2);
-        System.out.println(p1.hashCode());
-        System.out.println(p2.hashCode());
+        System.out.println(Pattern.matches("[1-9]{1}[0-9]{5}(19|20)[0-9]{2}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|([1-2]{1}[0-9]{1}|(3[0-1]{1})))[0-9]{3}[0-9x]{1}",
+                "321002199408304614"));
+        System.out.println(DateTimeUtils.toLocalDate("321002199408304614".substring(6, 14), "yyyyMMdd"));
+        System.out.println(ChronoUnit.YEARS.between(DateTimeUtils.toLocalDate("321002199408304614".substring(6, 14), "yyyyMMdd"), LocalDate.now()));
     }
 }