From b2d360d9113b6955287108ca9e90d76a1f3c1419 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期日, 29 九月 2024 15:05:11 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/zbomyoujia

---
 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java |  346 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 265 insertions(+), 81 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
index f6d1d27..b214562 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
@@ -1,10 +1,16 @@
 package com.doumee.biz.zbom.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.biz.zbom.ZbomCRMService;
-import com.doumee.biz.zbom.model.CrmCustomerInfoModel;
-import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel;
+import com.doumee.biz.zbom.model.crm.*;
+import com.doumee.biz.zbom.model.crm.response.CRMBaseResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMCustomerListResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMDaogouBindListResponse;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.HttpsUtil;
@@ -12,13 +18,23 @@
 import com.doumee.dao.business.CustomerLogMapper;
 import com.doumee.dao.business.model.CrmInterfaceLog;
 import com.doumee.dao.business.model.CustomerLog;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Users;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.util.Base64Util;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.util.Base64Utils;
 
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.*;
 
 /**
@@ -27,104 +43,177 @@
  * @date 2023/11/30 15:33
  */
 @Service
+@Slf4j
 public class ZbomCRMServiceImpl implements ZbomCRMService {
 
     @Autowired
     private CustomerLogMapper customerLogMapper;
     @Autowired
     private CrmInterfaceLogMapper crmInterfaceLogMapper;
-
     @Autowired
     private RedisTemplate<String, Object> redisTemplate;
-
-
-    @Override
-    @Async
-    public void dealCustomerLogData(CustomerLog customerLog){
-        CrmCustomerSubmmitModel entity = new CrmCustomerSubmmitModel();
-        List<CrmCustomerInfoModel> cusInfo = new ArrayList();
-        CrmCustomerInfoModel crmCustomerInfoModel = new CrmCustomerInfoModel();
-        crmCustomerInfoModel.setId(customerLog.getId());
-        crmCustomerInfoModel.setName(customerLog.getName());
-        crmCustomerInfoModel.setPhone(customerLog.getPhone());
-        crmCustomerInfoModel.setAreaname(customerLog.getAreaName());
-        crmCustomerInfoModel.setAreacode(customerLog.getAreaCode());
-        crmCustomerInfoModel.setOpenid(customerLog.getOpenid());
-        crmCustomerInfoModel.setSource(Constants.CrmSources.SOURCE_ZBJX);
-        crmCustomerInfoModel.setChannel(crmCustomerInfoModel.getSource()+"00");
-        crmCustomerInfoModel.setDate(DateUtil.dateToString(customerLog.getCreateDate(),"yyyy/MM/dd HH:mm"));
-        cusInfo.add(crmCustomerInfoModel);
-        entity.setCusInfo(cusInfo);
-        this.postDataToCrm(entity);
-
-    }
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
 
 
     /**
      * 蹇楅偊瀹㈡埛淇℃伅鎻愪氦鎺ュ彛
+     * @param customerLog
+     * @return
+     */
+    @Override
+    @Async
+    public void dealCustomerLogData(CustomerLog customerLog){
+        if(StringUtils.isBlank(customerLog.getPhone())){
+            return;
+        }
+        CrmCustomerInfoRequest entity = new CrmCustomerInfoRequest();
+        entity.setId(customerLog.getId());
+        entity.setName(customerLog.getName());
+        entity.setPhone(zbomEncode(customerLog.getPhone()));
+        entity.setAreaname(customerLog.getAreaName());
+        entity.setAreacode(customerLog.getAreaCode());
+        entity.setOpenid(customerLog.getOpenid());
+        entity.setUserData(new ArrayList<>());
+        if(StringUtils.isNotBlank(customerLog.getUsernames())){
+            String[] names = customerLog.getUsernames().split(",");
+            for(String str:names){
+                CrmCustomerUsernameRequest usernameRequest = new CrmCustomerUsernameRequest();
+                usernameRequest.setUserName(str);
+                entity.getUserData().add(usernameRequest);//瀵艰喘鐧婚檰璐﹀彿闆嗗悎
+            }
+        }
+//        鎻愪氦绫诲瀷 0-娴嬭瘯瑁呬慨椋庢牸锛�1-0鍏冨畾鍒讹紱2瑁呬慨璁$畻鍣�
+        if(Constants.equalsInteger(customerLog.getType(),Constants.ONE)){
+            entity.setSource(CRMConstants.CRM_SOURCE.SOURCE_MP01);
+            entity.setChannel(CRMConstants.CRM_SOURCE.SOURCE_MP01+"00");
+        }else{
+            entity.setSource(CRMConstants.CRM_SOURCE.SOURCE_MP02);
+            entity.setChannel(CRMConstants.CRM_SOURCE.SOURCE_MP02+"00");
+        }
+//        entity.setOpenId(customerLog.getOpenid());
+        entity.setOpenid(customerLog.getOpenid());
+        entity.setDate(DateUtil.dateToString(customerLog.getCreateDate(),"yyyy/MM/dd HH:mm"));
+        CrmCustomerPostRequest obj = new CrmCustomerPostRequest();
+        obj.setCusInfo(new ArrayList<>());
+        obj.getCusInfo().add(entity);
+        int status ;
+        String crmInfo;
+        String param = JSONObject.toJSONString(obj);
+        CRMBaseResponse result = sendCusHttpRequest(CRMConstants.IntegerUrl.POST_CUS_DATA_URL,CRMConstants.IntegerName.POST_CUS_DATA_NAME,param);
+        if (result != null && (StringUtils.equalsIgnoreCase(result.getCode(), CRMConstants.CODE_SUCCESS))) {
+            status = 1;
+            crmInfo="鎻愪氦鎴愬姛";
+        }else{
+            status = 2;
+            crmInfo="鎻愪氦澶辫触["+ result!=null?result.getMsg():"鎺ュ彛璇锋眰澶辫触锛�"+"]";
+        }
+        customerLogMapper.update(null,new UpdateWrapper<CustomerLog>().lambda()
+                .eq(CustomerLog::getId,entity.getId())
+                .set(CustomerLog::getCrmStatus,Constants.ONE )
+                .set(CustomerLog::getCrmInfo,crmInfo )
+                .set(CustomerLog::getCrmDate,new Date() ));// 鏇存柊鐘舵��
+    }
+    /**
+     * 鑾峰彇瀵艰喘缁戝畾鍒楄〃
      * @param entity
      * @return
      */
     @Override
-    public int postDataToCrm(CrmCustomerSubmmitModel entity )  {
-        // TODO Auto-generated method stub
-        int status = 2;
-        if(entity==null || entity.getCusInfo()==null || entity.getCusInfo().size() ==0){
-            return status;
-        }
-        String type = "postCusData";
-        String appid = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_KEY);
-        String urlStr =  (String)redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL) ;
-        long _t = System.currentTimeMillis();
-        String crmInfo="鎻愪氦澶辫触";
-        if (StringUtils.isNotBlank(appid)||StringUtils.isNotBlank(urlStr)) {
-            String param = JSONObject.toJSONString(entity);
-            String result = null;
-            int success =1;
-            String url = urlStr;
-            try {
-                String token = DigestUtils.md5Hex(type + _t + appid);
-                  url = urlStr + "?type=" + type + "&_t=" + _t + "&token=" + token;// 鎻愪氦CRM鍦板潃
-                  result = HttpsUtil.postJson(url,param);
-                if (StringUtils.isNotBlank(result)) {
-                    JSONObject r = JSONObject.parseObject(result.replace("(", "").replace(")", ""));
-                    if (r != null && (StringUtils.equalsIgnoreCase(r.getString("code"), "1")
-                            || StringUtils.equalsIgnoreCase(r.getString("code"), "2"))) {
-                          status = 1;
-                          crmInfo="鎻愪氦鎴愬姛";
-                        success =0;
-                    }else{
-                        status = 2;
-                        crmInfo="鎻愪氦澶辫触["+ result+"]";
-                    }
-                }
-            }catch (Exception e){
-                e.printStackTrace();
-                crmInfo+= e.getMessage();
-            }finally {
-                saveInterfaceLog(url,"蹇楅偊CRM瀹㈡埛鐣欒祫淇℃伅鎻愪氦",param,success,result);
-            }
-        }else{
-            status = 2;
-            crmInfo="鎻愪氦澶辫触crm閰嶇疆鏈夎锛宎ppid:["+ appid+"]"+"url:["+ urlStr+"]";
-        }
-        List<Long> idList = new ArrayList<>();
-        for(CrmCustomerInfoModel info : entity.getCusInfo()){
-            idList.add(info.getId());
-        }
-        // 濡傛灉鎻愪氦鎴愬姛
-        CustomerLog d = new CustomerLog();
-        d.setId(entity.getCusInfo().get(0).getId());
-        d.setCrmStatus(Constants.ONE);
-        customerLogMapper.update(null,new UpdateWrapper<CustomerLog>().lambda()
-                .in(CustomerLog::getId,idList)
-                .set(CustomerLog::getCrmStatus,Constants.ONE )
-                .set(CustomerLog::getCrmInfo,crmInfo )
-                .set(CustomerLog::getCrmDate,new Date() ));// 鏇存柊鐘舵��
-        return status;// 榛樿澶辫触
+    public  CRMBaseResponse<List<CRMDaogouBindListResponse>> getDaogouBindList(CrmDaogouBindListRequest entity ){
+        int status ;
+        String crmInfo;
+        String param = JSONObject.toJSONString(entity);
+        CRMBaseResponse<List<CRMDaogouBindListResponse>> result = sendHttpRequest(CRMConstants.IntegerUrl.DAOGOU_BIND_LIST_URL,
+                CRMConstants.IntegerName.DAOGOU_BIND_LIST_NAME,
+                param,
+                new TypeReference<CRMBaseResponse<List<CRMDaogouBindListResponse>>>(){});
+        return result;// 榛樿澶辫触
     }
 
+    /**
+     * 鑾峰彇瀹㈡埛鍒楄〃
+     * @param entity
+     * @return
+     */
+    @Override
+    public CRMBaseResponse<List<CRMCustomerListResponse>> getCustomerList(CrmCustomerListRequest entity ){
+        int status ;
+        String crmInfo;
+        String param = JSONObject.toJSONString(entity);
+        CRMBaseResponse<List<CRMCustomerListResponse>> result = sendHttpRequest(CRMConstants.IntegerUrl.CUS_BEFORE_PAGE_LIST_URL
+                ,CRMConstants.IntegerName.CUS_BEFORE_PAGE_LIST_NAME
+                ,param
+                ,new TypeReference<CRMBaseResponse<List<CRMCustomerListResponse>>>(){});
+        return result;// 榛樿澶辫触
+    }
+
+    public   <T> CRMBaseResponse<T> sendCusHttpRequest(String interfaceUrl,  String name,  String param){
+        log.info("銆�"+name+"銆�================寮�濮�===="+ JSONObject.toJSONString(param));
+        String appKey = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_POSTCUS_API_KEY);
+        String url = redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL) + interfaceUrl ;
+        long _t = System.currentTimeMillis();
+        if (StringUtils.isNotBlank(appKey)||StringUtils.isNotBlank(url)) {
+            String res = null;
+            int success = 0;
+            try {
+                url += "?type=postCusData&_t=" + _t + "&token=" + DigestUtils.md5Hex( "postCusData" + _t + appKey);
+                Map<String,String> headers = new HashMap<>();
+                res = HttpsUtil.postJson(url,param);
+                TypeReference typeReference =
+                        new TypeReference<CRMBaseResponse<T>>(){};
+                CRMBaseResponse<T>  result = JSONObject.parseObject(res, typeReference.getType());
+                logResult(result,name);
+                if(StringUtils.equals(result.getCode(),CRMConstants.CODE_SUCCESS)){
+                    return  result;
+                }else{
+                    success =1;
+                }
+            }catch (Exception e){
+                success = 1;
+                log.error("銆�"+name+"銆�================澶辫触===="+ JSONObject.toJSONString(param));
+            }finally {
+                saveInterfaceLog(url,name,param,success,res);
+            }
+        }
+        return  null;
+    }
+    public   <T> CRMBaseResponse<T> sendHttpRequest(String interfaceUrl,  String name,  String param,TypeReference<CRMBaseResponse<T>> typeReference){
+        log.info("銆�"+name+"銆�================寮�濮�===="+ JSONObject.toJSONString(param));
+        String appKey = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_KEY);
+        String url = redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL) + interfaceUrl ;
+        long _t = System.currentTimeMillis();
+        if (StringUtils.isNotBlank(appKey)||StringUtils.isNotBlank(url)) {
+            String res = null;
+            int success = 0;
+            try {
+                url += "?timestamp=" + _t + "&sign=" + DigestUtils.md5Hex( _t + appKey);
+                Map<String,String> headers = new HashMap<>();
+                res = HttpsUtil.postJson(url,param);
+                CRMBaseResponse<T>  result = JSONObject.parseObject(res, typeReference.getType());
+                logResult(result,name);
+                if(StringUtils.equals(result.getCode(),CRMConstants.CODE_SUCCESS)){
+                    return  result;
+                }else{
+                    success =1;
+                }
+            }catch (Exception e){
+                success = 1;
+                log.error("銆�"+name+"銆�================澶辫触===="+ JSONObject.toJSONString(param));
+            }finally {
+                saveInterfaceLog(url,name,param,success,res);
+            }
+        }
+        return  null;
+    }
+    private static void logResult(CRMBaseResponse res,String name) {
+        if(StringUtils.equals(res.getCode(), CRMConstants.CODE_SUCCESS)){
+            log.info("銆怌RM鎺ュ彛锛�"+name+"銆�================鎴愬姛====\n"+res);
+        }else{
+            log.error("銆怌RM鎺ュ彛锛�"+name+"銆�================澶辫触====锛歕n"+ res);
+        }
+    }
     public  void  saveInterfaceLog(String url,String name,String  param,Integer success,String respone){
             if(crmInterfaceLogMapper ==null){
                 return;
@@ -142,4 +231,99 @@
             log.setRepose(respone);
             crmInterfaceLogMapper.insert(log);
     }
+
+    /**
+     * 蹇楅偊瀛楃涓插姞瀵�
+     * @param str
+     * @return
+     */
+
+    @Override
+    public   String zbomEncode(String str)  {
+        StringBuffer sb = new StringBuffer();
+        String result = null;
+        try {
+            // 鍒涘缓StringBuffer瀵硅薄鐢ㄦ潵鎿嶄綔瀛楃涓�
+            String  urlStr =  (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_ENCODE_URL);
+            sb = new StringBuffer(
+                    urlStr + "?code=" + URLEncoder.encode(str, "UTF-8") + "&type=0&numstr=wy?");
+            result = HttpsUtil.sendGet(sb.toString());
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            saveInterfaceLog(sb.toString(),"蹇楅偊瀛楃涓插姞瀵嗘帴鍙�",str, result==null?1:0,result );
+        }
+        return  result;
+    }
+
+    /**
+     * 璺宠浆crm鍔熻兘 鑾峰彇鎺堟潈鍦板潃
+     * http://localhost:8080/core/oauth/authorize/jump?timestamp=1719998741&sign=41fbeb13965c43916876db7b5799e8ac&agent_phone_number=199077&bindKey=mp
+     * @param userName
+     * @return
+     */
+    @Override
+    public    String getCrmGoUrl(String userName,Integer type,String iamId){
+        try {
+            // 鍒涘缓StringBuffer瀵硅薄鐢ㄦ潵鎿嶄綔瀛楃涓�
+            int _t = (int)(System.currentTimeMillis());
+            String pageKey ="mp";//瀹㈡埛鍒楄〃椤甸潰鐮�
+            String fileUrl = systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_API_URL_MP).getCode();
+            if(Constants.equalsInteger(type,Constants.ONE)){
+                pageKey = "mpAddIntention";//鏂板鎰忓悜椤甸潰鐮�
+                fileUrl = systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_API_URL_MP_ADDINTENTION).getCode();
+            }
+            String  url =   redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL)
+                    + CRMConstants.IntegerUrl.GO_CRM_AUTH_URL
+                    + "?bindKey="+pageKey
+                    + "&tick=" + this.getTick(iamId, fileUrl);
+            return url;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+       throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鑾峰彇璺宠浆鍦板潃澶辫触鍝︼紒");
+    }
+
+    public String getTick(String iamId, String fileUrL) throws UnsupportedEncodingException {
+        Map<String,Object> map = new HashMap<>();
+        //鐢ㄦ埛IAM涓婚敭
+        map.put("ssouserid",iamId);
+        //鍞墠灏忕▼搴廰ppid
+        map.put("appid",systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_IAM_BUSINESS_APPID).getCode());
+        //璺宠浆鍦板潃
+        map.put("rediUrl",fileUrL);
+        //鏃堕棿鎴�
+        map.put("timestamp",System.currentTimeMillis()/1000+"");
+        //C绔皬绋嬪簭appid
+        map.put("sourceappid",systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_IAM_CUSTOMER_APPID).getCode());
+        System.out.println(JSONObject.toJSONString(map));
+        //鑾峰彇tick
+        String tick = ZbomCRMServiceImpl.encrypt(
+                systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_API_URL_PRIVATE_KEY).getCode()
+                ,JSONObject.toJSONString(map)
+                ,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_API_URL_INIT_VECTOR).getCode());
+
+        String tickEncoder = URLEncoder.encode(tick,"UTF-8");
+
+        return tickEncoder;
+    }
+
+
+    public static String encrypt(String key, String value,String initVector) {
+        try {
+            IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
+            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
+            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
+            byte[] encrypted = cipher.doFinal(value.getBytes());
+            return Base64Utils.encodeToString(encrypted);
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return null;
+    }
+
+
 }

--
Gitblit v1.9.3