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