ソースを参照

fix: 添加case_no_area_code函数

许家凯 1 年間 前
コミット
e343d49414

+ 101 - 0
src/main/java/com/winhc/bigdata/bean/case_no/CaseNoRegionInfoEntity.java

@@ -0,0 +1,101 @@
+package com.winhc.bigdata.bean.case_no;
+
+import java.util.Objects;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/31 9:12
+ */
+public class CaseNoRegionInfoEntity {
+
+    /**
+     * 法院代码,主键
+     */
+    private String court_code;
+
+    private String court_name;
+
+    private String province_code;
+    private String city_code;
+    private String district_code;
+
+    private String province;
+    private String city;
+    private String district;
+
+    /**
+     * 0,1,2,3 分别为:最高院,高院,中院,基院
+     */
+    private Integer court_level;
+    private String superior_court_code;
+
+    /**
+     * 变更或调整说明
+     */
+    private String description_info;
+    /**
+     * 0 现有;1 因法院代字变更而调整;9 脏数据逻辑删除
+     */
+    private Integer deleted;
+
+    public String getCourt_code() {
+        return court_code;
+    }
+
+    public String getCourt_name() {
+        return court_name;
+    }
+
+    public String getProvince_code() {
+        return province_code;
+    }
+
+    public String getCity_code() {
+        return city_code;
+    }
+
+    public String getDistrict_code() {
+        return district_code;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public Integer getCourt_level() {
+        return court_level;
+    }
+
+    public String getSuperior_court_code() {
+        return superior_court_code;
+    }
+
+    public String getDescription_info() {
+        return description_info;
+    }
+
+    public Integer getDeleted() {
+        return deleted;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        CaseNoRegionInfoEntity that = (CaseNoRegionInfoEntity) o;
+        return court_code.equals(that.court_code);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(court_code);
+    }
+}

+ 71 - 0
src/main/java/com/winhc/bigdata/udf/justice/CaseNoRegionInfoUDF.java

@@ -0,0 +1,71 @@
+package com.winhc.bigdata.udf.justice;
+
+import com.aliyun.odps.udf.ExecutionContext;
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.udf.UDFException;
+import com.winhc.bigdata.bean.case_no.CaseNoRegionInfoEntity;
+import com.winhc.bigdata.utils.CaseNoRegionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: XuJiakai
+ * 2023/11/6 9:54
+ *
+ * function name: case_no_area_code
+ */
+public class CaseNoRegionInfoUDF extends UDF {
+
+    private List<String> caseNoKeyword = null;
+    Map<String, CaseNoRegionInfoEntity> case_no_keyword_map = null;
+    Map<String, CaseNoRegionInfoEntity> court_name_map = null;
+
+
+    @Override
+    public void setup(ExecutionContext ctx) throws UDFException, IOException {
+        Map<String, CaseNoRegionInfoEntity> caseNoRegionInfo = CaseNoRegionUtils.getCaseNoRegionInfo();
+        caseNoKeyword = caseNoRegionInfo.keySet().stream().filter(Objects::nonNull).sorted(Comparator.comparingInt(String::length).reversed()).collect(Collectors.toList());
+        case_no_keyword_map = caseNoRegionInfo;
+
+
+        Map<String, CaseNoRegionInfoEntity> collect = caseNoRegionInfo.values().stream().collect(Collectors.toMap(CaseNoRegionInfoEntity::getCourt_name, e -> e));
+        court_name_map = collect;
+    }
+
+    public List<String> evaluate(String case_no, String court_name) {
+        List<String> list = new ArrayList<String>(3);
+        String caseNoKeyword = getCaseNoKeyword(case_no);
+        if (caseNoKeyword != null && case_no_keyword_map.containsKey(caseNoKeyword)) {
+            CaseNoRegionInfoEntity caseNoRegionInfoEntity = case_no_keyword_map.get(caseNoKeyword);
+            list.set(0, caseNoRegionInfoEntity.getProvince_code());
+            list.set(1, caseNoRegionInfoEntity.getCity_code());
+            list.set(2, caseNoRegionInfoEntity.getDistrict_code());
+            return list;
+        }
+
+        if (StringUtils.isNotEmpty(court_name) && court_name_map.containsKey(court_name)) {
+            CaseNoRegionInfoEntity caseNoRegionInfoEntity = court_name_map.get(court_name);
+            list.set(0, caseNoRegionInfoEntity.getProvince_code());
+            list.set(1, caseNoRegionInfoEntity.getCity_code());
+            list.set(2, caseNoRegionInfoEntity.getDistrict_code());
+            return list;
+        }
+        return list;
+    }
+
+    private String getCaseNoKeyword(String case_no) {
+        if (StringUtils.isEmpty(case_no)) {
+            return null;
+        }
+        for (String s : caseNoKeyword) {
+            if (case_no.contains(s)) {
+                return s;
+            }
+        }
+        return null;
+    }
+
+}

+ 26 - 0
src/main/java/com/winhc/bigdata/utils/CaseNoRegionUtils.java

@@ -0,0 +1,26 @@
+package com.winhc.bigdata.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.winhc.bigdata.bean.case_no.CaseNoRegionInfoEntity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author: XuJiakai
+ * 2023/11/6 9:57
+ */
+public class CaseNoRegionUtils {
+
+    public static Map<String, CaseNoRegionInfoEntity> getCaseNoRegionInfo() {
+        Map<String, CaseNoRegionInfoEntity> map = new HashMap<>();
+        String s = BaseUtils.readeResourceFile("court_keyword_region.json");
+        JSONObject jsonObject = JSON.parseObject(s);
+        for (String key : jsonObject.keySet()) {
+            CaseNoRegionInfoEntity caseNoRegionInfoEntity = jsonObject.getObject(key, CaseNoRegionInfoEntity.class);
+            map.put(key, caseNoRegionInfoEntity);
+        }
+        return map;
+    }
+}

ファイルの差分が大きいため隠しています
+ 49324 - 0
src/main/resources/court_keyword_region.json