Kaynağa Gözat

feat: 薪资转换

JimZhang 3 yıl önce
ebeveyn
işleme
4fc26d560d

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

@@ -0,0 +1,59 @@
+package com.winhc.bigdata.udf;
+
+import com.aliyun.odps.udf.UDF;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.NumberUtils;
+
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @author ZhangJi
+ * @since 2021-08-27 10:45
+ */
+public class ToIntervalSalary extends UDF {
+    private static final List<Integer> MIAN_YI = Lists.newArrayList(null, null);
+    private static final Pattern p = Pattern.compile("[^0-9-]");
+
+    public List<Integer> evaluate(String salary) {
+        if (StringUtils.isEmpty(salary)) {
+            return MIAN_YI;
+        }
+        boolean returnSmall = false;
+        boolean returnBig = false;
+        if (salary.contains("以上")) {
+            returnSmall = true;
+        }
+        if (salary.contains("以下")) {
+            returnBig = true;
+        }
+        int factor = 1;
+        if (salary.contains("万")) {
+            factor = 10000;
+        }
+        salary = p.matcher(salary).replaceAll("");
+        int f = factor;
+        int[] ints = Arrays.stream(salary.split("-")).filter(NumberUtils::isNumber).mapToInt(Integer::valueOf).map(i -> i * f).toArray();
+        if (ints.length == 0) {
+            return MIAN_YI;
+        } else if (ints.length == 1) {
+            if (returnSmall) {
+                return Lists.newArrayList(ints[0], null);
+            } else if (returnBig) {
+                return Lists.newArrayList(null, ints[0]);
+            }
+            return Lists.newArrayList(ints[0], ints[0]);
+        } else if (ints.length == 2) {
+            return Lists.newArrayList(ints[0], ints[1]);
+        }
+
+        return MIAN_YI;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(new ToIntervalSalary().evaluate("5000-8000\n"));
+    }
+}