server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java
@@ -22,6 +22,7 @@ int dealCustomerLogData(CustomerLog customerLog); String zbomEncode(String str); String getCrmGoUrl(String userName); CRMBaseResponse<List<CRMCustomerListResponse>> getCustomerList(CrmCustomerListRequest entity ); CRMBaseResponse<List<CRMDaogouBindListResponse>> getDaogouBindList(CrmDaogouBindListRequest entity ); server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
@@ -4,15 +4,14 @@ 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.*; 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.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; @@ -70,13 +69,23 @@ 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"); // æäº¤ç±»å 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.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(entity); CRMBaseResponse result = sendHttpRequest(CRMConstants.IntegerUrl.POST_CUS_DATA_URL,CRMConstants.IntegerName.POST_CUS_DATA_NAME,param); 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="æäº¤æå"; @@ -119,6 +128,36 @@ 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_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){ log.info("ã"+name+"ã================å¼å§===="+ JSONObject.toJSONString(param)); String appKey = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_KEY); @@ -130,7 +169,6 @@ try { url += "?timestamp=" + _t + "&sign=" + DigestUtils.md5Hex( _t + appKey); Map<String,String> 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<T>>(){}; @@ -199,4 +237,30 @@ } 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){ StringBuffer sb = new StringBuffer(); String result = null; try { // å建StringBufferå¯¹è±¡ç¨æ¥æä½å符串 int _t = (int)(System.currentTimeMillis()); String appkey = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_AUTH_API_KEY); String url = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL) +CRMConstants.IntegerUrl.GO_CRM_AUTH_URL + "?timestamp="+_t +"&agent_phone_number=" + URLEncoder.encode(userName, "UTF-8") + "&bindKey=mp&sign="+ DigestUtils.md5Hex( _t + appkey);; return url; }catch (Exception e){ e.printStackTrace(); } throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"è·å跳转å°å失败å¦ï¼"); } } server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java
@@ -16,6 +16,7 @@ String POST_CUS_DATA_URL ="/api/public/zbom/postCusData"; String CUS_BEFORE_PAGE_LIST_URL ="api/public/mini/program/cusOrBeforeList"; String DAOGOU_BIND_LIST_URL ="api/public/mini/program/list"; String GO_CRM_AUTH_URL ="oauth/authorize/jump"; } public interface IntegerName{ @@ -35,6 +36,8 @@ String SOURCE_ZBLDX = "ZBLDX";// å¿é¦è带æ°(ZBLDX) String SOURCE_ZBFGCS = "ZBFGCS";// å¿é¦é£æ ¼æµè¯(ZBFGCS) String SOURCE_ZBJX = "DSLX22";// å¿é¦å®¶é(ZBJX) String SOURCE_MP01 = "MP01";// é¶å 设计 String SOURCE_MP02 = "MP02";//æ¥ä»·è®¡ç®å¨ } server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java
@@ -17,9 +17,9 @@ private String phone; @ApiModelProperty(value = "è®¾è®¡å¸ææºå·") private String shopper; @ApiModelProperty(value = "æ¥æº") @ApiModelProperty(value = "æ¥æº MP01ãé¶å 设计ããMP02ãæ¥ä»·è®¡ç®å¨ã") private String source; @ApiModelProperty(value = "æ¸ é") @ApiModelProperty(value = "æ¸ éMP0100 ï¼MP0200 ") private String channel; @ApiModelProperty(value = "æ¥æ yyyy/MM/dd HH:mm") private String date; @@ -39,6 +39,6 @@ private String openid; @ApiModelProperty(value = "ç»ç«¯ä¿¡æ¯") private String terminal; @ApiModelProperty(value = "æ¥æºç±»å 3ç¬¬ä¸æ¹å¹³å° 12 å°ç¨åº)") private String lyType; @ApiModelProperty(value = "å°ç¨åºç¨æ·opneid)") private String openId; } server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerPostRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.doumee.biz.zbom.model.crm; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.util.List; @Data @ApiModel("å¿é¦CRM客æ·çèµæäº¤å¤å±åæ°") public class CrmCustomerPostRequest extends CRMBaseRequst implements Serializable { @JsonProperty("cus_info") @SerializedName("cus_info") private List< CrmCustomerInfoRequest > cusInfo; } server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -43,6 +43,7 @@ //被æè®¿äººä¿¡æ¯æ ¡éªæ¹å¼ï¼0ææºå·åç¬æ ¡éª 1ææºå·åå§åç»åæ ¡éªï¼ public static final String ZBOM_CRM_AUTH_API_KEY = "ZBOM_CRM_AUTH_API_KEY"; public static final String BEVISITED_USER_VALID = "BEVISITED_USER_VALID"; public static final String LW_BEVISITED_USER_VALID = "LW_BEVISITED_USER_VALID"; public static final String SELECT_DOORS_VISIT_REQUIRED = "SELECT_DOORS_VISIT_REQUIRED"; @@ -352,6 +353,7 @@ String IMPORTING_USERS ="IMPORTING_USERS"; String IAM_APPID ="IAM_APPID"; String ZBOM_CRM_API_KEY ="ZBOM_CRM_API_KEY"; String ZBOM_CRM_AUTH_API_KEY ="ZBOM_CRM_AUTH_API_KEY"; String ZBOM_CRM_API_URL ="ZBOM_CRM_API_URL"; String ZBOM_ENCODE_URL ="ZBOM_ENCODE_URL"; String ZBOM_SMS_API_KEY ="ZBOM_SMS_API_KEY"; server/service/src/main/java/com/doumee/service/business/InitService.java
@@ -36,6 +36,7 @@ redisTemplate.opsForValue().set(Constants.RedisKeys.IAM_APPKEY,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_IAM_APPKEY).getCode()); redisTemplate.opsForValue().set(Constants.RedisKeys.IAM_APPID,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_IAM_APPID).getCode()); redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_CRM_API_KEY,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_API_KEY).getCode()); redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_CRM_AUTH_API_KEY,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_AUTH_API_KEY).getCode()); redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_CRM_API_URL,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_CRM_API_URL).getCode()); redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_SMS_API_URL,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_SMS_API_URL).getCode()); redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_SMS_API_KEY,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_SMS_API_KEY).getCode()); server/web/src/main/java/com/doumee/api/web/CatalogApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package com.doumee.api.web; import com.doumee.config.annotation.UserLoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.SmsEmail; import com.doumee.dao.web.response.AccountResponse; import com.doumee.service.business.SmsEmailService; import com.doumee.service.business.UsersService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2024/7/10 18:06 */ @Api(tags = "åç±»åæ ç¾ç¸å ³æ¥å£") @Trace(exclude = true) @RestController @RequestMapping("/web/personnel") @Slf4j public class CatalogApi extends ApiController{ @Autowired public UsersService usersService; @Autowired public SmsEmailService smsEmailService; @ApiOperation(value = "å°ç¨åºç»é", notes = "å工端å°ç¨åº") @GetMapping("/loginByWx") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true), }) public ApiResponse<AccountResponse> loginByWx(@RequestParam String code) { return ApiResponse.success(usersService.wxLogin(code)); } @ApiOperation(value = "åéçä¿¡éªè¯ç ", notes = "å工端å°ç¨åº") @GetMapping("/sendSms") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "phone", value = "ææºå·", required = true), }) public ApiResponse sendSms(@RequestParam String phone) { SmsEmail smsEmail = new SmsEmail(); smsEmail.setPhone(phone); smsEmailService.sendSms(smsEmail); return ApiResponse.success("åéæå"); } @ApiOperation(value = "ææºå·éªè¯ç ç»é", notes = "å工端å°ç¨åº") @GetMapping("/loginByPhone") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "phone", value = "ææºå·", required = true), @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "çä¿¡éªè¯ç ", required = true), }) public ApiResponse<AccountResponse> loginByPhone(@RequestParam String phone,@RequestParam String code) { return ApiResponse.success(usersService.phoneLogin(phone,code)); } @UserLoginRequired @ApiOperation(value = "ç»å®openid", notes = "å工端å°ç¨åº") @GetMapping("/bindingOpenid") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true), }) public ApiResponse bindingOpenid(@RequestParam String code) { usersService.bindingOpenid(code,getMemberId()); return ApiResponse.success("æä½æå"); } } server/web/src/main/java/com/doumee/api/web/CustomerApi.java
@@ -32,7 +32,7 @@ * @Author : Rk * @create 2024/7/10 14:03 */ @Api(tags = "客æ·ç«¯å°ç¨åºç¨æ·ä¸å¡") @Api(tags = "ãC端å°ç¨åºãç¨æ·ä¸å¡") @Trace(exclude = true) @RestController @RequestMapping("/web/customer") server/web/src/main/java/com/doumee/api/web/PersonnelApi.java
@@ -26,7 +26,7 @@ * @Author : Rk * @create 2024/7/10 18:06 */ @Api(tags = "å工端å°ç¨åºç¨æ·ä¸å¡") @Api(tags = "ãB端å°ç¨åºãç¨æ·ä¸å¡") @Trace(exclude = true) @RestController @RequestMapping("/web/personnel")