Ver Fonte

对用户手动输入的出生日期做通配。

lighter há 4 anos atrás
pai
commit
8f3ad6690f

+ 13 - 1
src/main/java/thyyxxk/wxservice_server/service/IdCardAnalyzeService.java

@@ -18,6 +18,7 @@ import thyyxxk.wxservice_server.entity.analyzeidcard.UploadIdCardParam;
 import thyyxxk.wxservice_server.entity.hrgresponse.CreateCardResponse;
 import thyyxxk.wxservice_server.entity.patientcards.BindPatientIdParam;
 import thyyxxk.wxservice_server.entity.patientcards.CreatCardParam;
+import thyyxxk.wxservice_server.utils.DateUtil;
 import thyyxxk.wxservice_server.utils.ResultVoUtil;
 import thyyxxk.wxservice_server.utils.StringUtil;
 
@@ -66,8 +67,10 @@ public class IdCardAnalyzeService {
         if (1 == res.getInt("idcard_number_type")) {
             IdCardAnalyzeResult idCard = new IdCardAnalyzeResult();
             JSONObject result = res.getJSONObject("words_result");
+            String socialNo = result.getJSONObject("公民身份号码").getString("words");
             idCard.setName(result.getJSONObject("姓名").getString("words"));
-            idCard.setSocialNo(result.getJSONObject("公民身份号码").getString("words"));
+            idCard.setSocialNo(socialNo);
+            idCard.setSex(calculateSex(socialNo));
             String districtCode = idCard.getSocialNo().substring(0, 6);
             String districtName = dao.selectRegionName(districtCode);
             if (null != districtName) {
@@ -92,6 +95,15 @@ public class IdCardAnalyzeService {
 
     @Async("asyncTask")
     public CompletableFuture<ResultVo<Object>> readInput(IdCardAnalyzeResult param) throws Exception {
+        if (StringUtil.isBlank(param.getSocialNo())) {
+            String birth = DateUtil.matchDate(param.getBirthday(), "yyyyMMdd");
+            if (null == birth) {
+                return CompletableFuture.completedFuture(ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR,
+                        "儿童出生日期格式错误,请检查!(例:20180601)"));
+            }
+            param.setBirthday(birth);
+        }
+
         CreatCardParam card = new CreatCardParam();
         card.setPatName(param.getName());
         card.setPatIdType(1);

+ 28 - 0
src/main/java/thyyxxk/wxservice_server/utils/DateUtil.java

@@ -32,4 +32,32 @@ public class DateUtil {
         long offset = System.currentTimeMillis() - create.getTime();
         return (offset / 1000 / 60) < 60;
     }
+
+    private static final String[] TEMPLATE_PATTERNS = {"yyyyMMdd", "yyyy.MM.dd", "yyyy-MM-dd",
+            "yyyy-MM-d", "yyyy-M-dd", "yyyy-M-d", "yyyyMMd", "yyyyMdd", "yyyyMd", "yyyy年MM月dd日", "yyyy年MM月d日",
+            "yyyy年M月dd日", "yyyy年M月d日", "yyyy/MM/dd", "yyyy/MM/d", "yyyy/M/dd",
+            "yyyy/M/d", "yyyy.MM.d", "yyyy.M.dd", "yyyy.M.d"};
+
+    public static String matchDate(String date, String pattern) {
+        if (StringUtil.isBlank(date)) {
+            return null;
+        }
+        Date parse = null;
+        boolean isFlag = false;
+        for (String templatePattern : TEMPLATE_PATTERNS) {
+            try {
+                SimpleDateFormat format = new SimpleDateFormat(templatePattern);
+                parse = format.parse(date);
+            } catch (Exception e) {
+                continue;
+            }
+            isFlag = true;
+            break;
+        }
+        if (isFlag) {
+            SimpleDateFormat formatRes = new SimpleDateFormat(pattern);
+            return formatRes.format(parse);
+        }
+        return null;
+    }
 }

+ 1 - 1
src/main/resources/application-prod.yml

@@ -1,5 +1,5 @@
 server:
-  port: 8083
+  port: 8085
   servlet:
     context-path: /wxserver
 spring: