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.zbom.ZbomCRMService; import com.doumee.biz.zbom.model.crm.CRMConstants; import com.doumee.biz.zbom.model.crm.CrmCustomerInfoRequest; import com.doumee.biz.zbom.model.crm.CrmCustomerListRequest; import com.doumee.biz.zbom.model.crm.CrmDaogouBindListRequest; 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.biz.zbom.model.zhongtai.ZTConstants; import com.doumee.biz.zbom.model.zhongtai.response.ZTBaseResponse; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.HttpsUtil; import com.doumee.dao.business.CrmInterfaceLogMapper; import com.doumee.dao.business.CustomerLogMapper; import com.doumee.dao.business.model.CrmInterfaceLog; import com.doumee.dao.business.model.CustomerLog; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; 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 java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.*; /** * 志邦CRM客户信息提交接口 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service @Slf4j public class ZbomCRMServiceImpl implements ZbomCRMService { @Autowired private CustomerLogMapper customerLogMapper; @Autowired private CrmInterfaceLogMapper crmInterfaceLogMapper; @Autowired private RedisTemplate redisTemplate; /** * 志邦客户信息提交接口 * @param customerLog * @return */ @Override @Async public int dealCustomerLogData(CustomerLog customerLog){ 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.setSource(CRMConstants.CRM_SOURCE.SOURCE_ZBJX); entity.setChannel(CRMConstants.CRM_SOURCE.SOURCE_ZBJX+"00"); entity.setDate(DateUtil.dateToString(customerLog.getCreateDate(),"yyyy/MM/dd HH:mm")); int status ; String crmInfo; String param = JSONObject.toJSONString(entity); CRMBaseResponse result = sendHttpRequest(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().lambda() .eq(CustomerLog::getId,entity.getId()) .set(CustomerLog::getCrmStatus,Constants.ONE ) .set(CustomerLog::getCrmInfo,crmInfo ) .set(CustomerLog::getCrmDate,new Date() ));// 更新状态 return status;// 默认失败 } /** * 获取导购绑定列表 * @param entity * @return */ @Override public CRMBaseResponse> getDaogouBindList(CrmDaogouBindListRequest entity ){ int status ; String crmInfo; String param = JSONObject.toJSONString(entity); CRMBaseResponse> result = sendHttpRequest(CRMConstants.IntegerUrl.DAOGOU_BIND_LIST_URL,CRMConstants.IntegerName.DAOGOU_BIND_LIST_NAME,param); return result;// 默认失败 } /** * 获取客户列表 * @param entity * @return */ @Override public CRMBaseResponse> getCustomerList(CrmCustomerListRequest entity ){ int status ; String crmInfo; String param = JSONObject.toJSONString(entity); CRMBaseResponse> result = sendHttpRequest(CRMConstants.IntegerUrl.CUS_BEFORE_PAGE_LIST_URL,CRMConstants.IntegerName.CUS_BEFORE_PAGE_LIST_NAME,param); return result;// 默认失败 } public CRMBaseResponse sendHttpRequest(String interfaceUrl, String name, String param){ 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 headers = new HashMap<>(); String index = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_ZHONGTAI_API_URL); res = HttpsUtil.postJson(url,param); TypeReference typeReference = new TypeReference>(){}; CRMBaseResponse 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("【CRM接口:"+name+"】================成功====\n"+res); }else{ log.error("【CRM接口:"+name+"】================失败====:\n"+ res); } } public void saveInterfaceLog(String url,String name,String param,Integer success,String respone){ if(crmInterfaceLogMapper ==null){ return; } CrmInterfaceLog log = new CrmInterfaceLog(); log.setCreateDate(new Date()); log.setUrl(url); log.setEditDate(log.getCreateDate()); log.setPlat(Constants.ZERO); log.setName(name); log.setIsdeleted(Constants.ZERO); log.setRequest(param); log.setType(Constants.ONE); log.setSuccess(success); 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; } }