Browse Source

Merge remote-tracking branch 'origin/master'

许家凯 3 years ago
parent
commit
f6138cb853

+ 59 - 0
src/main/java/com/winhc/bigdata/udf/find_companyid.java

@@ -0,0 +1,59 @@
+package com.winhc.bigdata.udf;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONPath;
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.utils.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @Author: π
+ * @Description: 取
+ */
+public class find_companyid extends UDF {
+
+    public String evaluate(String jsons) {
+        if (StringUtils.isBlank(jsons)) {
+            return "";
+        }
+
+        try {
+            HashSet<String> set = new HashSet<>();
+            String[] jsonArr = jsons.split("&&", -1);
+            for (String json : jsonArr) {
+                String[] arr2 = json.split("@@", -1);
+                String comapny_id = arr2[0];
+                String company_type = arr2[1];
+                String deleted = arr2[2];
+                if (jsonArr.length == 1) {
+                    return comapny_id;
+                }
+                //company_type = 1 deleted = 0
+                if (StringUtils.isNotBlank(company_type) && StringUtils.isNotBlank(deleted) && "1".equals(company_type) && "0".equals(deleted)) {
+                    set.add(comapny_id);
+                }
+            }
+            if (set.size() != 1) {
+                return "";
+            }
+            return set.iterator().next();
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+
+    public static void main(String[] args) {
+        String jsons = "10a704a26e011f74b9dac8190d08d3d7@@2@@0&&390cff501246a61c828dacaf24da1b6d@@1@@0";
+        find_companyid n = new find_companyid();
+        System.out.println(n.evaluate(jsons));
+    }
+
+}
+
+

+ 112 - 0
src/main/java/com/winhc/bigdata/udf/id_trans.java

@@ -0,0 +1,112 @@
+package com.winhc.bigdata.udf;
+
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.utils.StringUtils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Author: π
+ * @Description: 身份证15转18位
+ */
+public class id_trans extends UDF {
+
+    public String evaluate(String id) {
+        if (StringUtils.isBlank(id)) {
+            return null;
+        }
+        if (isNumeric(id.substring(0,id.length() - 1))) {
+            if (id.length() == 18) {
+                return id;
+            } else if (id.length() == 15) {
+                return trans15bitTo18bit(id);
+            }
+        }
+        return null;
+    }
+
+    public static String trans15bitTo18bit(String in) {
+
+        try {
+
+            String[] input = in.split("", -1);
+            String[] result = new String[18];
+            for (int i = 0; i < input.length; i++) {
+                if (i <= 5) {
+                    result[i] = input[i];
+                } else {
+                    result[i + 2] = input[i];
+                }
+            }
+            result[6] = "1";
+            result[7] = "9";
+            //计算最后一位(前十七位乘以系数)
+            String[] xs = {"7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"};
+            int sum = 0;
+            for (int i = 0; i < 17; i++) {
+                sum += Integer.valueOf(result[i]) * Integer.valueOf(xs[i]);
+            }
+            //对11求余,的余数 0 - 10
+            int rod = sum % 11;
+            //所得余数映射到对应数字即可
+            if (rod == 0) {
+                result[17] = "1";
+            } else if (rod == 1) {
+                result[17] = "0";
+            } else if (rod == 2) {
+                result[17] = "X";
+            } else if (rod == 3) {
+                result[17] = "9";
+            } else if (rod == 4) {
+                result[17] = "8";
+            } else if (rod == 5) {
+                result[17] = "7";
+            } else if (rod == 6) {
+                result[17] = "6";
+            } else if (rod == 7) {
+                result[17] = "5";
+            } else if (rod == 8) {
+                result[17] = "4";
+            } else if (rod == 9) {
+                result[17] = "3";
+            } else if (rod == 10) {
+                result[17] = "2";
+            }
+
+            StringBuilder sb = new StringBuilder();
+            for (String c : result) {
+                sb.append(c);
+            }
+            return sb.toString();
+        } catch (Exception e) {
+            return null;
+        }
+
+    }
+
+    /**
+     * 利用正则表达式判断字符串是否是数字
+     *
+     * @param str
+     * @return
+     */
+    public static boolean isNumeric(String str) {
+        Pattern pattern = Pattern.compile("[0-9]*");
+        Matcher isNum = pattern.matcher(str);
+        if (!isNum.matches()) {
+            return false;
+        }
+        return true;
+    }
+
+    public static void main(String[] args) {
+        String id = "5101025409306126";
+        System.out.println(isNumeric(id));
+        id_trans n = new id_trans();
+        System.out.println(n.evaluate(id));
+    }
+
+}
+
+

+ 52 - 0
src/main/java/com/winhc/bigdata/udf/split_names.java

@@ -0,0 +1,52 @@
+package com.winhc.bigdata.udf;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONPath;
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.utils.StringUtils;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: π
+ * @Description: 获取json 里字段
+ */
+public class split_names extends UDF {
+
+    public List<String> evaluate(String jsons, String json_path) {
+        if (StringUtils.isBlank(jsons)) {
+            return new ArrayList<>();
+        }
+        try {
+            String[] jsonArr = jsons.split("&");
+            HashSet<String> set = new HashSet();
+            for (String json : jsonArr) {
+                parse(json, json_path, set);
+            }
+            return new ArrayList<>(set);
+        } catch (Exception e) {
+            return new ArrayList<>();
+        }
+    }
+
+    public void parse(String json, String json_path, Set set) {
+        JSONArray jsonArray = ((JSONArray) JSONPath.eval(JSON.parse(json), json_path));
+        for (Object o : jsonArray) {
+            set.add(o);
+        }
+    }
+
+    public static void main(String[] args) {
+        String jsons = "[{\"name\":\"张海林\",\"litigant_id\":\"\"},{\"name\":\"招商银行股份有限公司信用卡中心\",\"litigant_id\":\"cc45eeb0634f73531ba54ad55ba152a6\"}]&[{\"name\":\"上海浦东发展银行静安支行\",\"litigant_id\":\"c2c57fcc6398cfd49393c1a2d3c35a4c\"}]";
+        String json_path = "$.name";
+        split_names n = new split_names();
+        System.out.println(n.evaluate(jsons, json_path));
+    }
+
+}
+
+

+ 26 - 0
src/main/java/com/winhc/bigdata/udf/str_contain.java

@@ -0,0 +1,26 @@
+package com.winhc.bigdata.udf;
+
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.utils.StringUtils;
+import com.google.gson.Gson;
+
+import java.util.HashMap;
+
+/**
+ * @Author: π
+ * @Date: 2020/5/14 16:26
+ * @Description: 字符串包含关系
+ */
+public class str_contain extends UDF {
+
+    public Boolean evaluate(String full_str, String str) {
+        if (StringUtils.isBlank(full_str) || StringUtils.isBlank(str)) return false;
+        return full_str.contains(str);
+    }
+
+    public static void main(String[] args) {
+        System.out.println(new str_contain().evaluate("abccfdgd", "cfdg"));
+    }
+}
+
+