Przeglądaj źródła

二期,分渠道展示标签

luGuangChen 2 lat temu
rodzic
commit
75f9bb897f

+ 87 - 46
dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/api/CustomerApiController.java

@@ -1674,54 +1674,19 @@ public class CustomerApiController {
         mpInfo.put("id",indid);
 
 
-        String salecom = source.getString("salecom");
-        //多渠道不显示标签  最高级全部显示  , 渠道不一样 不显示
-        if(StringUtils.isEmpty(deptCode)||deptCode.equals(salecom)){
-            //单渠道显示所有标签
-            mpInfo.putAll(JSON.parseObject(jsonObject.getString("_source"),Map.class));
-        } else{
-            logger.info(jsonObject.toJSONString());
-            Map<String, Object>  maps = JSON.parseObject(jsonObject.getString("_source"),Map.class);
-
-            List<String>  publicLabels = new ArrayList<>();
-            publicLabels.add("label1");
-            publicLabels.add("label2");
-            publicLabels.add("label3");
-            publicLabels.add("label4");
-            publicLabels.add("label9");
-            publicLabels.add("label10");
-            publicLabels.add("label21");
-            publicLabels.add("Label67");
-            publicLabels.add("Label69");
-            publicLabels.add("Label70");
-            publicLabels.add("Label71");
-            publicLabels.add("Label74");
-            publicLabels.add("label77");
-            publicLabels.add("Label80");
-            publicLabels.add("Label96");
-            publicLabels.add("Label97");
-            publicLabels.add("Label100");
-            publicLabels.add("Label101");
-            publicLabels.add("Label103");
-            publicLabels.add("Label104");
-            publicLabels.add("Label105");
-            publicLabels.add("Label106");
-
-            for (Map.Entry<String, Object> entry : maps.entrySet()){
-                String key = entry.getKey();
-                if(key.startsWith("label")){
-                    if(publicLabels.contains(key)){
-                        //公用标签显示
-                        mpInfo.put(key,entry.getValue());
-                    }
-
-                }else{
-                    mpInfo.put(key,entry.getValue());
-                }
-            }
+        String salecom = source.getString("salecom");   // 可能会得到用逗号分割的多个标签
+        String[] salecoms = salecom.split(",");
+        Arrays.sort(salecoms);
+        Map<String, Object> sourceMap = JSON.parseObject(jsonObject.getString("_source"), Map.class);
+        if (StringUtils.isEmpty(deptCode)) {
+            // 根渠道,也就是上海人寿,也是admin用户所属的渠道,返回jsonObject中的所有标签(公共标签 + 渠道标签)
+            mpInfo.putAll(sourceMap);
+        } else if (Arrays.binarySearch(salecoms, deptCode) >= 0) {
+            // 登录用户的渠道与客户渠道一致,返回jsonObject中的公共标签 + shanglifeecif.customerno_salecom_relation表中的渠道标签
+            mpInfo.putAll(getPublicLabels(sourceMap));
+            mpInfo.putAll(getSalecomLabels(source.getString("scustid"), deptCode));
         }
 
-
         if(mpInfo.containsKey("birthday")){
             mpInfo.put("birthday", source.getString("birthday"));
             mpInfo.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,source.getString("birthday"))));
@@ -1734,4 +1699,80 @@ public class CustomerApiController {
 
     }
 
+    /**
+     * 只返回公共标签(以label开头和不以label开头的公共标签都会返回)
+     * @param source 包含所有标签的map
+     * @return 只包含公共标签的map
+     */
+    private Map<String, Object> getPublicLabels(Map<String, Object> source) {
+        Map<String, Object> rst = new HashMap<>();
+        // 一般公共标签的key不以label开头,但也有一部分公共标签是以label开头的,将以label开头的公共标签Key存入list后续使用
+        List<String>  publicLabels = new ArrayList<>(); // 存放以label开头的公共标签key
+        publicLabels.add("label1");
+        publicLabels.add("label2");
+        publicLabels.add("label3");
+        publicLabels.add("label4");
+        publicLabels.add("label9");
+        publicLabels.add("label10");
+        publicLabels.add("label21");
+        publicLabels.add("Label67");
+        publicLabels.add("Label69");
+        publicLabels.add("Label70");
+        publicLabels.add("Label71");
+        publicLabels.add("Label74");
+        publicLabels.add("label77");
+        publicLabels.add("Label80");
+        publicLabels.add("Label96");
+        publicLabels.add("Label97");
+        publicLabels.add("Label100");
+        publicLabels.add("Label101");
+        publicLabels.add("Label103");
+        publicLabels.add("Label104");
+        publicLabels.add("Label105");
+        publicLabels.add("Label106");
+
+        for (Map.Entry<String, Object> entry : source.entrySet()){
+            String key = entry.getKey();
+            if(key.startsWith("label")){
+                if(publicLabels.contains(key)){
+                    // 以label开头的公共标签
+                    rst.put(key,entry.getValue());
+                }
+
+            }else{
+                // 不以label开头的公共标签
+                rst.put(key,entry.getValue());
+            }
+        }
+        return rst;
+    }
+
+    /**
+     * 从ES表shanglifeecif.customerno_salecom_relation中获得指定客户指定渠道的渠道标签
+     * @param customerno 客户号
+     * @param salecom 渠道号
+     * @return 指定客户指定渠道的所有渠道标签
+     */
+    public Map<String, Object> getSalecomLabels(String customerno, String salecom) throws IOException {
+        Map<String, Object> rst = new HashMap<>();
+        String q = String.format("customerno:%s%20AND%20salecom:%s", customerno, salecom);
+        Request scriptRequest = new Request("GET", "/shanglifeecif.customerno_salecom_relation/_search?pretty=true&q="+ q);
+        Response response = restClient.performRequest(scriptRequest);
+        String result = EntityUtils.toString(response.getEntity());
+        JSONObject jsonObject = JSON.parseObject(result);
+        JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
+        JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
+        for (int i = 0; i <array.size() ; i++) {
+            JSONObject json = (JSONObject)array.get(i);
+            Map<String, Object> source = JSON.parseObject(json.getString("_source"), Map.class);
+            for (Map.Entry<String, Object> entry : source.entrySet()){
+                String key = entry.getKey();
+                if(key.startsWith("label")){
+                        rst.put(key, entry.getValue());
+                }
+            }
+        }
+        return rst;
+    }
+
 }