Browse Source

一期,首页 - 拥有保单件数分布 从ES查到数据直接返回给前端,不在代码中做特殊处理,而是把逻辑处理放在后台数据端(详见hive存储过程shanglifeecif.bdnum_distribution())

luGuangChen 2 years ago
parent
commit
f829cc0deb

+ 26 - 38
dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/api/IndexApiController.java

@@ -121,7 +121,7 @@ public class IndexApiController extends BaseController {
     @ResponseBody
     public AjaxResult bdNumDis() {
         // 获取索引的别名,字段,创建时间
-        Map[] seriesData = new HashMap[8];
+        Map<String, String>[] seriesData = new HashMap[0];
         try {
             logger.info("进保单件数时间:" + DateUtils.getTime());
             Map<String, String> paramMap = new HashMap<String, String>();
@@ -137,48 +137,36 @@ public class IndexApiController extends BaseController {
                 if (jsonObject != null) {
                     JSONArray hits = jsonObject.getJSONArray("hits");
                     if (hits != null && hits.size() > 0) {
+                        seriesData = new HashMap[hits.size()];
                         for (Object o : hits) {
-                            JSONObject object = JSONUtil.parseObj(o);
-                            if (object != null) {
-                                JSONObject source = object.getJSONObject("_source");
-                                String labelname = source.getStr("labelname").trim();
-                                Map m = new HashMap();
-                                String bdnum = source.getStr("bdnum");
-                                m.put("value", StringUtils.isEmpty(bdnum) ? "0" : bdnum);
-                                if (labelname.contains("无保单")) {
-                                    seriesData[0] = m;
-                                    m.put("name", "无保单");
-                                } else if (labelname.contains("1件")) {
-                                    seriesData[1] = m;
-                                    m.put("name", "1件");
-                                } else if (labelname.contains("2件")) {
-                                    seriesData[2] = m;
-                                    m.put("name", "2件");
-                                } else if (labelname.contains("3-5件")) {
-                                    seriesData[3] = m;
-                                    m.put("name", "3-5件");
-                                } else if (labelname.contains("6-10件")) {
-                                    seriesData[4] = m;
-                                    m.put("name", "6-10件");
-                                } else if (labelname.contains("11-20件")) {
-                                    seriesData[5] = m;
-                                    m.put("name", "11-20件");
-                                } else if (labelname.contains("21-50件")) {
-                                    seriesData[6] = m;
-                                    m.put("name", "21-50件");
-                                } else {
-                                    seriesData[7] = m;
-                                    m.put("name", "50件以上");
+                            try {
+                                JSONObject object = JSONUtil.parseObj(o);
+                                if (object != null) {
+                                    JSONObject source = object.getJSONObject("_source");
+                                    String id = object.getStr("_id");
+                                    String labelname = source.getStr("labelname").trim();
+                                    String bdnum = source.getStr("bdnum").trim();
+
+                                    Map<String, String> m = new HashMap();
+                                    m.put("name", labelname);
+                                    m.put("value", bdnum);
+                                    // 根据id值按顺序存入数据,保证返回给前端的数据是按id排序的
+                                    seriesData[Integer.valueOf(id) - 1] = m;
                                 }
+                            } catch (NullPointerException | NumberFormatException e) {
+                                logger.warn("保单件数计算异常,该条记录不返回,记录信息: "+ o, e);
                             }
-
                         }
-                        if (seriesData[7] == null) {
-                            Map map = new HashMap();
-                            map.put("name", "50件以上");
-                            map.put("value", "0");
-                            seriesData[7] = map;
+
+                        // 如果上面for循环中有异常数组中就会有null元素,下面把null元素删除掉只保留有内容的元素
+                        List<Map<String, String>> list = new ArrayList(seriesData.length);
+                        for (Map m : seriesData) {
+                            if (m != null) {
+                                list.add(m);
+                            }
                         }
+                        Map<String, String>[] newArray = new HashMap[0];
+                        seriesData = list.toArray(newArray);
                     }
                 }
             }

+ 180 - 0
dgtis-modules/dgtis-modules-data/src/test/java/com/dgtis/data/test/TestIndex.java

@@ -0,0 +1,180 @@
+package com.dgtis.data.test;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.dgtis.common.core.utils.StringUtils;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.util.*;
+
+public class TestIndex {
+    @Test
+    @Ignore
+    public void bdNumDisTest() {
+        String json = "{\n" +
+                "  \"took\" : 13,\n" +
+                "  \"timed_out\" : false,\n" +
+                "  \"_shards\" : {\n" +
+                "    \"total\" : 10,\n" +
+                "    \"successful\" : 10,\n" +
+                "    \"failed\" : 0\n" +
+                "  },\n" +
+                "  \"hits\" : {\n" +
+                "    \"total\" : 8,\n" +
+                "    \"max_score\" : 1.0,\n" +
+                "    \"hits\" : [\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][1]\",\n" +
+                "        \"_node\" : \"jPg-5qMaSQ6F581JWzjZlQ\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"5\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"6-10件\",\n" +
+                "          \"bdnum\" : \"9836\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][3]\",\n" +
+                "        \"_node\" : \"9BktOA9KQWaKz2xYh6BbeQ\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"1\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"无保单\",\n" +
+                "          \"bdnum\" : \"0\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][4]\",\n" +
+                "        \"_node\" : \"g-_7sP66Ra6Zq308Qb6n0A\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"3\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"2件\",\n" +
+                "          \"bdnum\" : \"175777\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][6]\",\n" +
+                "        \"_node\" : \"g-_7sP66Ra6Zq308Qb6n0A\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"8\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"50件以上\",\n" +
+                "          \"bdnum\" : \"9\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][7]\",\n" +
+                "        \"_node\" : \"jPg-5qMaSQ6F581JWzjZlQ\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"6\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"11-20件\",\n" +
+                "          \"bdnum\" : \"1538\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][7]\",\n" +
+                "        \"_node\" : \"jPg-5qMaSQ6F581JWzjZlQ\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"2\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"1件\",\n" +
+                "          \"bdnum\" : \"952489\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][7]\",\n" +
+                "        \"_node\" : \"jPg-5qMaSQ6F581JWzjZlQ\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"a4\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"3-5件\",\n" +
+                "          \"bdnum\" : \"64781\"\n" +
+                "        }\n" +
+                "      },\n" +
+                "      {\n" +
+                "        \"_shard\" : \"[shanglifeecif.bdnum_distribution_bak][8]\",\n" +
+                "        \"_node\" : \"jPg-5qMaSQ6F581JWzjZlQ\",\n" +
+                "        \"_index\" : \"shanglifeecif.bdnum_distribution_bak\",\n" +
+                "        \"_type\" : \"default_type_\",\n" +
+                "        \"_id\" : \"7\",\n" +
+                "        \"_score\" : 1.0,\n" +
+                "        \"_source\" : {\n" +
+                "          \"labelname\" : \"21-50件\",\n" +
+                "          \"bdnum\" : \"217\"\n" +
+                "        }\n" +
+                "      }\n" +
+                "    ]\n" +
+                "  }\n" +
+                "}";
+        Map<String, Map<String, Map[]>> rst = jieXi(json);
+        Map<String, Map[]> data = rst.get("data");
+        Map[] seriesData = data.get("seriesData");
+        System.out.println(Arrays.toString(seriesData));
+
+    }
+
+    private Map jieXi(String jsonStr) {
+        Map rst = new HashMap();
+        Map<String, String>[] seriesData = new HashMap[0];
+        if (StringUtils.isNotEmpty(jsonStr)) {
+            JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
+            jsonObject = jsonObject.getJSONObject("hits");
+            if (jsonObject != null) {
+                JSONArray hits = jsonObject.getJSONArray("hits");
+                if (hits != null && hits.size() > 0) {
+                    seriesData = new HashMap[hits.size()];
+                    for (Object o : hits) {
+                        try {
+                            JSONObject object = JSONUtil.parseObj(o);
+                            if (object != null) {
+                                JSONObject source = object.getJSONObject("_source");
+                                String id = object.getStr("_id");
+                                String labelname = source.getStr("labelname").trim();
+                                String bdnum = source.getStr("bdnum").trim();
+
+                                Map<String, String> m = new HashMap();
+                                m.put("name", labelname);
+                                m.put("value", bdnum);
+                                seriesData[Integer.valueOf(id) - 1] = m;
+                            }
+                        } catch (NullPointerException | NumberFormatException e) {
+                            e.printStackTrace();
+                            System.out.println("test --> o: "+ o);
+                        }
+                    }
+
+                    List<Map<String, String>> list = new ArrayList(seriesData.length);
+                    for (Map m : seriesData) {
+                        if (m != null) {
+                            list.add(m);
+                        }
+                    }
+                    Map<String, String>[] newArray = new HashMap[0];
+                    seriesData = list.toArray(newArray);
+                }
+            }
+        }
+        Map<String, Map<String, String>[]> mlm = new HashMap<>();
+        mlm.put("seriesData", seriesData);
+        rst.put("data", mlm);
+        return rst;
+    }
+}