|
|
@@ -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个";
|