|
@@ -0,0 +1,746 @@
|
|
|
+package com.muzhi.lingai.service.impl;
|
|
|
+
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.aliyun.dingtalkyida_1_0.models.CreateOrUpdateFormDataResponse;
|
|
|
+import com.aliyun.dingtalkyida_1_0.models.GetFormDataByIDResponse;
|
|
|
+import com.aliyun.tea.TeaException;
|
|
|
+import com.aliyun.teautil.models.RuntimeOptions;
|
|
|
+import com.muzhi.lingai.service.AccessTokenService;
|
|
|
+import com.muzhi.lingai.service.DingOaService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import okhttp3.*;
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class DingOaServiceImpl implements DingOaService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AccessTokenService accessTokenService;
|
|
|
+
|
|
|
+ //宜搭接口调用
|
|
|
+ public static com.aliyun.dingtalkyida_1_0.Client createClient() throws Exception {
|
|
|
+ com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
|
|
|
+ config.protocol = "https";
|
|
|
+ config.regionId = "central";
|
|
|
+ return new com.aliyun.dingtalkyida_1_0.Client(config);
|
|
|
+ }
|
|
|
+
|
|
|
+ //售后宝接口授权码接口
|
|
|
+ public JSONObject getToken(){
|
|
|
+
|
|
|
+ //MD5加密
|
|
|
+ /*明文
|
|
|
+ * timestamp毫秒级时间戳
|
|
|
+ * */
|
|
|
+ //当前时间的时间戳
|
|
|
+ long timeMillis = System.currentTimeMillis();
|
|
|
+ String timestamp = String.valueOf(timeMillis);
|
|
|
+ log.info("当前时间的时间戳(毫秒级):" + timestamp);
|
|
|
+
|
|
|
+ /*秘钥
|
|
|
+ * AppSecret应用秘钥
|
|
|
+ * */
|
|
|
+ String AppSecret = "f7585e1f2c4c25682f407af23b7ff7d5f21f4f9e3715c294";
|
|
|
+
|
|
|
+ //加密后的字符串
|
|
|
+ String encodeStr= DigestUtils.md5Hex(AppSecret + "_" + timestamp);
|
|
|
+ log.info("MD5加密后的字符串encodeStr:" + encodeStr);
|
|
|
+
|
|
|
+ Map mapMY = new HashMap();
|
|
|
+ mapMY.put("appKey","shbqv00tso4dg5kcjz");
|
|
|
+ mapMY.put("timestamp",timestamp);
|
|
|
+ mapMY.put("verifyCode",encodeStr);
|
|
|
+ String parmsStr = JSON.toJSONString(mapMY);
|
|
|
+ log.info("封装秘钥参数parmsStr:" + parmsStr);
|
|
|
+
|
|
|
+ //售后宝【接口授权】
|
|
|
+ //授权码
|
|
|
+ String access_token = null;
|
|
|
+ //失效时间
|
|
|
+ String expire_time = null;
|
|
|
+ try {
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, parmsStr);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/auth/get_access_token")
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .addHeader("Cookie", "acw_tc=0a45662a16728986832314856e80f39124201b89184960430078b3ebfda740")
|
|
|
+ .build();
|
|
|
+
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【接口授权】返回信息:" + responseBody);
|
|
|
+ String substring1 = responseBody.substring(1, responseBody.length() - 1);
|
|
|
+ log.info("去除首尾双引号后的返回信息:" + substring1);
|
|
|
+ String substring2 = substring1.replaceAll("\\\\", "");
|
|
|
+ log.info("去除转义字符后的返回信息:" + substring2);
|
|
|
+
|
|
|
+ JSONObject jsonObject = JSON.parseObject(substring2);
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ //授权码
|
|
|
+ access_token = data.getString("access_token");
|
|
|
+ //失效时间
|
|
|
+ expire_time = data.getString("expire_time");
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ long endLong = new Long(expire_time);
|
|
|
+ //将时间戳转换为时间
|
|
|
+ Date endDate = new Date(endLong);
|
|
|
+ System.out.println("授权码失效时间(时间型):" + endDate);
|
|
|
+ //将时间调整为yyyy-MM-dd HH:mm:ss时间样式
|
|
|
+ String endString = simpleDateFormat.format(endDate);
|
|
|
+ System.out.println("授权码失效时间(时间样式):" + endString);
|
|
|
+ log.info("【授权码】:" + access_token + "【失效时间】:" + endString);
|
|
|
+
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("token", access_token);
|
|
|
+ map.put("endTime", endString);
|
|
|
+ String jsonString = JSON.toJSONString(map);
|
|
|
+ JSONObject jsonObjectToken = JSON.parseObject(jsonString);
|
|
|
+ System.out.println("封装的售后宝接口返回的授权码和失效时间的Map对象:" + jsonObjectToken);
|
|
|
+
|
|
|
+ return jsonObjectToken;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取售后宝接口授权码
|
|
|
+ @Override
|
|
|
+ public String getShouhoubaoAccessToken(){
|
|
|
+
|
|
|
+ //查询表单实例详情
|
|
|
+ JSONObject jsonObject = null;
|
|
|
+ try {
|
|
|
+ com.aliyun.dingtalkyida_1_0.Client client = createClient();
|
|
|
+ com.aliyun.dingtalkyida_1_0.models.GetFormDataByIDHeaders getFormDataByIDHeaders = new com.aliyun.dingtalkyida_1_0.models.GetFormDataByIDHeaders();
|
|
|
+ getFormDataByIDHeaders.xAcsDingtalkAccessToken = accessTokenService.getAccessToken();
|
|
|
+ com.aliyun.dingtalkyida_1_0.models.GetFormDataByIDRequest getFormDataByIDRequest = new com.aliyun.dingtalkyida_1_0.models.GetFormDataByIDRequest()
|
|
|
+ .setSystemToken("RH766AC1Z0P6IBWRFIA885XCULUV275UHT5CLYF")
|
|
|
+ .setUserId("yida_pub_account")
|
|
|
+ .setAppType("APP_EXJ5WMWZ18FS1F2UFOHN");
|
|
|
+ //TODO 【勿动】审批实例ID
|
|
|
+ GetFormDataByIDResponse formDataByIDWithOptions = client.getFormDataByIDWithOptions("FINST-SD866HA1JEBAFL9O7EK0N5AY3RH32A27ZH8HLLH9", getFormDataByIDRequest, getFormDataByIDHeaders, new RuntimeOptions());
|
|
|
+ String s = JSON.toJSONString(formDataByIDWithOptions.getBody());
|
|
|
+ jsonObject = JSON.parseObject(s);
|
|
|
+ System.out.println("【售后宝授权码】表单object对象:" + jsonObject);
|
|
|
+ } catch (TeaException err) {
|
|
|
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
+ // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
+ }
|
|
|
+ } catch (Exception _err) {
|
|
|
+ TeaException err = new TeaException(_err.getMessage(), _err);
|
|
|
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
+ // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject formData = jsonObject.getJSONObject("formData");
|
|
|
+ //宜搭存储的授权码
|
|
|
+ String textField_lgstof07 = formData.getString("textField_lgstof07");
|
|
|
+ System.out.println("宜搭存储的授权码:" + textField_lgstof07);
|
|
|
+ //失效时间
|
|
|
+ long dateField_lgstof08 = formData.getLong("dateField_lgstof08");
|
|
|
+ System.out.println("失效时间:" + dateField_lgstof08);
|
|
|
+
|
|
|
+
|
|
|
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ //将时间戳转换为时间
|
|
|
+ Date shixiaoDate = new Date(dateField_lgstof08);
|
|
|
+ System.out.println("失效时间(时间型):" + shixiaoDate);
|
|
|
+ //将时间调整为yyyy-MM-dd HH:mm:ss时间样式
|
|
|
+ String shixiaoString = simpleDateFormat.format(shixiaoDate);
|
|
|
+ System.out.println("失效时间(时间样式):" + shixiaoString);
|
|
|
+
|
|
|
+ //当前时间
|
|
|
+ Date nowTime = new Date();
|
|
|
+ //比较两个时间,如果返回1说明shixiaoDate>nowTime -1说明小于 0说明等于
|
|
|
+ int sign = shixiaoDate.compareTo(nowTime);
|
|
|
+ System.out.println("时间比较结果(1失效时间大于当前时间,即为有效;-1失效时间小于当前时间,即为过期):" + sign);
|
|
|
+ if (sign > 0){
|
|
|
+ System.out.println("token在有效期~~~");
|
|
|
+
|
|
|
+ return textField_lgstof07;
|
|
|
+ }else {
|
|
|
+ System.out.println("token已过期!!!");
|
|
|
+
|
|
|
+ log.info("======开始执行调用售后宝授权码接口======");
|
|
|
+ JSONObject token = getToken();
|
|
|
+ String token1 = token.getString("token");
|
|
|
+ System.out.println("获取最新的售后宝授权码:" + token1);
|
|
|
+ String endTime = token.getString("endTime");
|
|
|
+
|
|
|
+ long time = 0;
|
|
|
+ try {
|
|
|
+ time = simpleDateFormat.parse(endTime).getTime();
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断宜搭授权码页面是否有当前有效的时间
|
|
|
+ /*同步至宜搭*/
|
|
|
+ Map map = new HashMap();
|
|
|
+ //最新授权码
|
|
|
+ map.put("textField_lgstof07", token1);
|
|
|
+ //失效时间
|
|
|
+ map.put("dateField_lgstof08", time);
|
|
|
+
|
|
|
+ String mapJson = JSON.toJSONString(map);
|
|
|
+ System.out.println("mapJson:" + mapJson);
|
|
|
+
|
|
|
+ //宜搭表单判断查询条件
|
|
|
+ Map map1 = new HashMap();
|
|
|
+ //字段编号
|
|
|
+ map1.put("key","textField_lh8hyihp");
|
|
|
+ //同步类型
|
|
|
+ map1.put("value", "系统同步");
|
|
|
+ //控件类型
|
|
|
+ map1.put("type","TEXT");
|
|
|
+ //逻辑判断符
|
|
|
+ map1.put("operator","eq");
|
|
|
+ //控件名称
|
|
|
+ map1.put("componentName","TextField");
|
|
|
+
|
|
|
+ List list11 = new ArrayList();
|
|
|
+ list11.add(map1);
|
|
|
+
|
|
|
+ String listJson = JSON.toJSONString(list11);
|
|
|
+ System.out.println("查询条件listJson:" + listJson);
|
|
|
+
|
|
|
+
|
|
|
+ //新增或更新表单实例【宜搭】
|
|
|
+ try {
|
|
|
+ com.aliyun.dingtalkyida_1_0.Client client11 = createClient();
|
|
|
+ com.aliyun.dingtalkyida_1_0.models.CreateOrUpdateFormDataHeaders createOrUpdateFormDataHeaders = new com.aliyun.dingtalkyida_1_0.models.CreateOrUpdateFormDataHeaders();
|
|
|
+ createOrUpdateFormDataHeaders.xAcsDingtalkAccessToken = accessTokenService.getAccessToken();
|
|
|
+ com.aliyun.dingtalkyida_1_0.models.CreateOrUpdateFormDataRequest createOrUpdateFormDataRequest = new com.aliyun.dingtalkyida_1_0.models.CreateOrUpdateFormDataRequest()
|
|
|
+ //应用秘钥
|
|
|
+ .setSystemToken("RH766AC1Z0P6IBWRFIA885XCULUV275UHT5CLYF")
|
|
|
+ //表单编码
|
|
|
+ .setFormUuid("FORM-NO766591UX3A9LC18PX8PB38WZB52I20OTSGL6")
|
|
|
+ .setUserId("yida_pub_account")
|
|
|
+ .setSearchCondition(listJson)
|
|
|
+ //应用编码
|
|
|
+ .setAppType("APP_EXJ5WMWZ18FS1F2UFOHN")
|
|
|
+ .setFormDataJson(mapJson);
|
|
|
+
|
|
|
+ CreateOrUpdateFormDataResponse orUpdateFormDataWithOptions = client11.createOrUpdateFormDataWithOptions(createOrUpdateFormDataRequest, createOrUpdateFormDataHeaders, new RuntimeOptions());
|
|
|
+ String s = JSON.toJSONString(orUpdateFormDataWithOptions.getBody());
|
|
|
+ jsonObject = JSON.parseObject(s);
|
|
|
+ System.out.println("【创建或更新】表单object对象:" + jsonObject);
|
|
|
+ } catch (TeaException err) {
|
|
|
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
+ // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception _err) {
|
|
|
+ TeaException err = new TeaException(_err.getMessage(), _err);
|
|
|
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
+ // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /*同步至宜搭*/
|
|
|
+
|
|
|
+ return token1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //根据姓名获取售后宝人员id
|
|
|
+ public String getSHBid(String userName){
|
|
|
+
|
|
|
+ //获取售后宝授权码
|
|
|
+ String shouhoubaoAccessToken = getShouhoubaoAccessToken();
|
|
|
+
|
|
|
+ int pageNum = 1;
|
|
|
+ int pageSize = 50;
|
|
|
+
|
|
|
+ //根据售人员姓名进行匹配查询售后宝人员id
|
|
|
+// String userName = "牧之";
|
|
|
+ List list = new ArrayList();
|
|
|
+ list.add(userName);
|
|
|
+
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("pageNum",pageNum);
|
|
|
+ map.put("pageSize",pageSize);
|
|
|
+ map.put("userNameList",list);
|
|
|
+
|
|
|
+ //根据售售后宝人员userid进行匹配查询售后宝人员信息
|
|
|
+// String userid = "f58e62b5-a843-11ed-bdbf-00163e179ed7";
|
|
|
+// List list = new ArrayList();
|
|
|
+// list.add(userid);
|
|
|
+//
|
|
|
+// Map map = new HashMap();
|
|
|
+// map.put("pageNum",pageNum);
|
|
|
+// map.put("pageSize",pageSize);
|
|
|
+// map.put("userIds",list);
|
|
|
+
|
|
|
+ String bodyStr = JSON.toJSONString(map);
|
|
|
+
|
|
|
+ String userId = null;
|
|
|
+
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, bodyStr);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/user/get_user_params?accessToken="+ shouhoubaoAccessToken)
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+
|
|
|
+ try {
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【人员列表】返回信息:" + responseBody);
|
|
|
+ String substring1 = responseBody.substring(1, responseBody.length() - 1);
|
|
|
+ log.info("去除首尾双引号后的返回信息:" + substring1);
|
|
|
+ String substring2 = substring1.replaceAll("\\\\", "");
|
|
|
+ log.info("去除转义字符后的返回信息:" + substring2);
|
|
|
+
|
|
|
+ JSONObject jsonObject = JSON.parseObject(substring2);
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+// System.out.println("data===" + data);
|
|
|
+
|
|
|
+ userId = data.getJSONArray("list").getJSONObject(0).getString("userId");
|
|
|
+ System.out.println("售后宝人员userId:" + userId);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return userId;
|
|
|
+ }
|
|
|
+
|
|
|
+ //根据客户编号查询售后宝客户是否存在
|
|
|
+ public Boolean getKehuBoolean(String khbh){
|
|
|
+
|
|
|
+ //获取售后宝授权码
|
|
|
+ String shouhoubaoAccessToken = getShouhoubaoAccessToken();
|
|
|
+
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/customer/get_customer_customerNo?accessToken="+shouhoubaoAccessToken+
|
|
|
+ "&customerNo="+khbh)
|
|
|
+ .method("GET", null)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ boolean flag = false;
|
|
|
+ try {
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【客户详情】返回信息:" + responseBody);
|
|
|
+ String substring1 = responseBody.substring(1, responseBody.length() - 1);
|
|
|
+ log.info("去除首尾双引号后的返回信息:" + substring1);
|
|
|
+ String substring2 = substring1.replaceAll("\\\\", "");
|
|
|
+ log.info("去除转义字符后的返回信息:" + substring2);
|
|
|
+
|
|
|
+ JSONObject jsonObject = JSON.parseObject(substring2);
|
|
|
+ Integer errorCode = jsonObject.getInteger("errorCode");
|
|
|
+ if (errorCode == 0){
|
|
|
+ System.out.println("当前客户在售后宝【已存在】!");
|
|
|
+ flag = true;
|
|
|
+ }else {
|
|
|
+ System.out.println("当前客户在售后宝【不存在】!");
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("根据客户编号查询售后宝客户是否存在(true存在;false不存在):" + flag);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ //同步客户信息至售后宝
|
|
|
+ @Override
|
|
|
+ public String tongbuKehu(String khbh,String khmc,String khlxrList,String khlxrdhList,String khlxrzwList,String khdz,
|
|
|
+ String userid,String khfzrxm,String htqydw){
|
|
|
+
|
|
|
+ System.out.println("【客户编号】" + khbh + "【客户名称】" + khmc
|
|
|
+ + "【客户联系人列表】" + khlxrList + "【客户联系人电话列表】" + khlxrdhList
|
|
|
+ + "【客户联系人职务列表】" + khlxrzwList + "【客户地址】" + khdz
|
|
|
+ + "【客户负责人(售后宝人员id)】" + userid + "【客户负责人姓名】" + khfzrxm + "【合同签约主体】" + htqydw);
|
|
|
+
|
|
|
+ //获取售后宝授权码
|
|
|
+ String shouhoubaoAccessToken = getShouhoubaoAccessToken();
|
|
|
+
|
|
|
+ /*客户负责人(售后宝人员id)通过人员姓名进行查询匹配*/
|
|
|
+ log.info("开始执行调用根据姓名获取售后宝人员id...");
|
|
|
+ String shBid = getSHBid(khfzrxm);
|
|
|
+
|
|
|
+ /*根据客户编号,调用售后宝接口查询客户是否存在*/
|
|
|
+ log.info("开始执行调用根据客户编号获取客户信息(判断是否存在)...");
|
|
|
+ Boolean kehuBoolean = getKehuBoolean(khbh);
|
|
|
+
|
|
|
+ /*处理客户联系人明细列表(获取第一条客户联系信息)*/
|
|
|
+ //客户联系人姓名
|
|
|
+ JSONArray khlxrArray = JSON.parseArray(khlxrList);
|
|
|
+ String khlxrStr = khlxrArray.getString(0);
|
|
|
+ System.out.println("获取明细列表第一条【客户联系人姓名】:" + khlxrStr);
|
|
|
+ //客户联系人电话
|
|
|
+ JSONArray khlxrdhArray = JSON.parseArray(khlxrdhList);
|
|
|
+ String khlxrdhStr = khlxrdhArray.getString(0);
|
|
|
+ System.out.println("获取明细列表第一条【客户联系人电话】:" + khlxrdhStr);
|
|
|
+ //客户联系人职务
|
|
|
+ JSONArray khlxrzwArray = JSON.parseArray(khlxrzwList);
|
|
|
+ String khlxrzwStr = khlxrzwArray.getString(0);
|
|
|
+ System.out.println("获取明细列表第一条【客户联系人职务】:" + khlxrzwStr);
|
|
|
+
|
|
|
+ if (kehuBoolean == false){
|
|
|
+ log.info("客户【不存在】,开始执行同步【创建】客户信息至售后宝!");
|
|
|
+ /*调用售后宝【客户新增】接口*/
|
|
|
+ //封装售后宝客户新增接口需要的参数
|
|
|
+ Map map2 = new HashMap();
|
|
|
+ map2.put("field_2L1hdL8o2Gz563tQ",htqydw);
|
|
|
+
|
|
|
+ Map map1 = new HashMap();
|
|
|
+ //客户编号
|
|
|
+ map1.put("serialNumber",khbh);
|
|
|
+ //客户名称
|
|
|
+ map1.put("name",khmc);
|
|
|
+ //客户联系人
|
|
|
+ map1.put("lmName",khlxrStr);
|
|
|
+ //客户联系电话
|
|
|
+ map1.put("lmPhone",khlxrdhStr);
|
|
|
+ //客户地址
|
|
|
+ map1.put("address",khdz);
|
|
|
+ //客户负责人(售后宝人员id)
|
|
|
+ map1.put("customerManager",shBid);
|
|
|
+ //客户负责人姓名
|
|
|
+ map1.put("customerManagerName",khfzrxm);
|
|
|
+ //合同签约单位(单选项匹配)
|
|
|
+ map1.put("attribute",map2);
|
|
|
+
|
|
|
+ String jsonString = JSON.toJSONString(map1);
|
|
|
+ System.out.println("封装售后宝客户新增接口需要的参数:" + jsonString);
|
|
|
+
|
|
|
+ //休眠1秒后,进行调用【客户新增】接口
|
|
|
+ try {
|
|
|
+ log.info("休眠中,时长为:1秒...");
|
|
|
+ Thread.sleep(1000);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ log.info("调用售后宝【客户新增】接口===>");
|
|
|
+ try {
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, jsonString);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/customer/createV2?accessToken=" + shouhoubaoAccessToken)
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【客户新增】接口返回信息:" + responseBody);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ /*调用售后宝【客户新增】接口*/
|
|
|
+
|
|
|
+ return "同步创建客户信息完成!";
|
|
|
+ }else {
|
|
|
+ log.info("客户【已存在】,开始执行同步【更新】客户信息至售后宝!");
|
|
|
+ /*调用售后宝【客户更新】接口*/
|
|
|
+ //封装售后宝客户更新接口需要的参数
|
|
|
+ Map map2 = new HashMap();
|
|
|
+ map2.put("field_2L1hdL8o2Gz563tQ",htqydw);
|
|
|
+
|
|
|
+// //封装客户地址
|
|
|
+// Map map3 = new HashMap();
|
|
|
+
|
|
|
+ Map map1 = new HashMap();
|
|
|
+ //客户编号
|
|
|
+ map1.put("customerNo",khbh);
|
|
|
+ //客户名称
|
|
|
+ map1.put("name",khmc);
|
|
|
+ //客户联系人
|
|
|
+ map1.put("lmName",khlxrStr);
|
|
|
+ //客户联系电话
|
|
|
+ map1.put("lmPhone",khlxrdhStr);
|
|
|
+ //客户地址
|
|
|
+// map1.put("address",khdz);
|
|
|
+ //客户负责人(售后宝人员id)
|
|
|
+ map1.put("customerManager",shBid);
|
|
|
+ //客户负责人姓名
|
|
|
+ map1.put("customerManagerName",khfzrxm);
|
|
|
+ //合同签约单位(单选项匹配)
|
|
|
+ map1.put("attribute",map2);
|
|
|
+
|
|
|
+ String jsonString = JSON.toJSONString(map1);
|
|
|
+ System.out.println("封装售后宝客户更新接口需要的参数:" + jsonString);
|
|
|
+
|
|
|
+ //休眠1秒后,进行调用【客户新增】接口
|
|
|
+ try {
|
|
|
+ log.info("休眠中,时长为:1秒...");
|
|
|
+ Thread.sleep(1000);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ log.info("调用售后宝【客户更新】接口===>");
|
|
|
+ try {
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, jsonString);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/customer/update_customer?accessToken=" + shouhoubaoAccessToken)
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【客户更新】接口返回信息:" + responseBody);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ /*调用售后宝【客户更新】接口*/
|
|
|
+
|
|
|
+ return "更新客户信息完成!";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //产品新增
|
|
|
+ public JSONArray saveChanpin(String jsonString){
|
|
|
+
|
|
|
+ //获取售后宝授权码
|
|
|
+ String shouhoubaoAccessToken = getShouhoubaoAccessToken();
|
|
|
+
|
|
|
+ System.out.println("传参【产品新增】接口封装的参数:" + jsonString);
|
|
|
+
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, jsonString);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/product/batch_save_product?accessToken=" + shouhoubaoAccessToken)
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+
|
|
|
+ JSONArray data = null;
|
|
|
+ try {
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【产品新增】返回信息:" + responseBody);
|
|
|
+ String substring1 = responseBody.substring(1, responseBody.length() - 1);
|
|
|
+ log.info("去除首尾双引号后的返回信息:" + substring1);
|
|
|
+ String substring2 = substring1.replaceAll("\\\\", "");
|
|
|
+ log.info("去除转义字符后的返回信息:" + substring2);
|
|
|
+
|
|
|
+ JSONObject jsonObject = JSON.parseObject(substring2);
|
|
|
+ data = jsonObject.getJSONArray("data");
|
|
|
+ System.out.println("售后宝【产品新增】返回的产品Id:" + data);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建售后宝工单
|
|
|
+ @Override
|
|
|
+ public String createGongdan(String khbh,String khmc,String khdz,String khlxr,String khlxrdh,String gdid,String gdmc,
|
|
|
+ String cpmcList,String cpppList,String cpxhList,String cpazwzList,
|
|
|
+ String sdqkList,String azrq){
|
|
|
+
|
|
|
+ System.out.println("客户编号:" + khbh + "客户名称:" + khmc
|
|
|
+ + "客户地址:" + khdz + "客户联系人:" + khlxr + "客户联系人电话:" + khlxrdh
|
|
|
+ + "工单id:" + gdid + "工单名称:" + gdmc
|
|
|
+ + "产品名称列表:" + cpmcList + "产品品牌列表:" + cpppList + "产品型号列表:" + cpxhList + "产品安装位置列表:" + cpazwzList
|
|
|
+ + "3米内水电情况列表:" + sdqkList + "最晚安装日期:" + azrq);
|
|
|
+
|
|
|
+// 客户编号:KH20230625120731011
|
|
|
+// 客户名称:上海市国家安全局松江分局
|
|
|
+// 客户地址:上海市松江区谷阳北路128号
|
|
|
+// 客户联系人:张主任
|
|
|
+// 客户联系人电话:13917912291
|
|
|
+// 工单id:279bb347-913e-4627-bffc-605317774885
|
|
|
+// 工单名称:安装工单
|
|
|
+// 产品名称列表:["直饮水机"]
|
|
|
+// 产品品牌列表:["史密斯"]
|
|
|
+// 产品型号列表:["BZR800-T6H"]
|
|
|
+// 产品安装位置列表:["底楼茶水间,具体几号楼没有标,靠马路那栋楼底楼"]
|
|
|
+// 3米内水电情况列表:["有排污","有水","有电"]
|
|
|
+// 最晚安装日期:1687708800000
|
|
|
+
|
|
|
+ khbh = "KH20230625120731011";
|
|
|
+ khmc = "上海市国家安全局松江分局";
|
|
|
+ khdz = "上海市松江区谷阳北路128号";
|
|
|
+ khlxr = "张主任";
|
|
|
+ khlxrdh = "13917912291";
|
|
|
+ gdid = "279bb347-913e-4627-bffc-605317774885";
|
|
|
+ gdmc = "安装工单";
|
|
|
+ cpmcList = "[\"直饮水机\"]";
|
|
|
+ cpppList = "[\"史密斯\"]";
|
|
|
+ cpxhList = "[\"BZR800-T6H\"]";
|
|
|
+ cpazwzList = "[\"底楼茶水间,具体几号楼没有标,靠马路那栋楼底楼\"]";
|
|
|
+ sdqkList = "[\"有排污\",\"有水\",\"有电\"]";
|
|
|
+ azrq = "1687708800000";
|
|
|
+
|
|
|
+ long azrqLong = Long.parseLong(azrq);
|
|
|
+
|
|
|
+ //获取售后宝授权码
|
|
|
+ String shouhoubaoAccessToken = getShouhoubaoAccessToken();
|
|
|
+
|
|
|
+ /*处理传参*/
|
|
|
+ //==============================================================================================
|
|
|
+ //最晚安装日期(计划日期)
|
|
|
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ //将时间戳转换为时间
|
|
|
+ Date azrqDate = new Date(azrqLong);
|
|
|
+ System.out.println("最晚安装日期(时间型):" + azrqDate);
|
|
|
+ //将时间调整为yyyy-MM-dd HH:mm:ss时间样式
|
|
|
+ String azrqDateString = simpleDateFormat.format(azrqDate);
|
|
|
+ System.out.println("最晚安装日期(时间样式):" + azrqDateString);
|
|
|
+
|
|
|
+ //==============================================================================================
|
|
|
+ //【***】通过产品名称这列,作为列表循环条数
|
|
|
+ JSONArray cpmcArray = JSON.parseArray(cpmcList);
|
|
|
+
|
|
|
+ JSONArray cpppArray = JSON.parseArray(cpppList);
|
|
|
+ JSONArray cpxhArray = JSON.parseArray(cpxhList);
|
|
|
+ JSONArray cpazwzArray = JSON.parseArray(cpazwzList);
|
|
|
+
|
|
|
+ //封装批量新增产品参数
|
|
|
+ List listAll = new ArrayList();
|
|
|
+
|
|
|
+ for (int i = 0; i < cpmcArray.size(); i++) {
|
|
|
+ Map map = new HashMap();
|
|
|
+ Map map1 = new HashMap();
|
|
|
+
|
|
|
+ //当前时间的时间戳(作为售后宝产品编号)
|
|
|
+ long timeMillis = System.currentTimeMillis();
|
|
|
+ String timestamp = String.valueOf(timeMillis);
|
|
|
+ log.info("当前时间的时间戳(毫秒级):" + timestamp);
|
|
|
+
|
|
|
+ //产品名称
|
|
|
+ String cpmc = cpmcArray.getString(i);
|
|
|
+ //产品品牌
|
|
|
+ String cppp = cpppArray.getString(i);
|
|
|
+ //产品型号
|
|
|
+ String cpxh = cpxhArray.getString(i);
|
|
|
+ //产品安装位置
|
|
|
+ String cpazwz = cpazwzArray.getString(i);
|
|
|
+
|
|
|
+ map1.put("field_WbLmDtP58EMzDzdf",cppp);
|
|
|
+ map1.put("field_peyKFqp3QwQptCFq",cpxh);
|
|
|
+ map1.put("field_EDhkN5owZL3T5KtM",cpazwz);
|
|
|
+ map1.put("field_HD3kiNGTA75UmqvV",azrqDateString);
|
|
|
+
|
|
|
+ map.put("serialNumber",timestamp);//产品编号
|
|
|
+ map.put("name",cpmc);//产品名称
|
|
|
+ map.put("customerSN",khbh);//客户编号
|
|
|
+ map.put("customerName",khmc);//客户名称
|
|
|
+ map.put("attribute",map1);//自定义字段
|
|
|
+
|
|
|
+ listAll.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ String jsonString = JSON.toJSONString(listAll);
|
|
|
+ System.out.println("封装的批量新增产品的参数:" + jsonString);
|
|
|
+
|
|
|
+ //调用批量新增产品
|
|
|
+ log.info("开始执行批量新增售后宝产品...");
|
|
|
+ JSONArray jsonArray = saveChanpin(jsonString);
|
|
|
+ List chanpinList = new ArrayList();
|
|
|
+ for (int i = 0; i < jsonArray.size(); i++) {
|
|
|
+ String string = jsonArray.getString(i);
|
|
|
+ chanpinList.add(string);
|
|
|
+ }
|
|
|
+
|
|
|
+ //==============================================================================================
|
|
|
+ //3米内水电情况列表
|
|
|
+ List SDQKlist = new ArrayList();
|
|
|
+ JSONArray sdqkArray = JSON.parseArray(sdqkList);
|
|
|
+ for (int i = 0; i < sdqkArray.size(); i++) {
|
|
|
+ String string = sdqkArray.getString(i);
|
|
|
+ SDQKlist.add(string);
|
|
|
+ }
|
|
|
+ /*处理传参*/
|
|
|
+
|
|
|
+ /*
|
|
|
+ 【创建工单json参数示例】
|
|
|
+ {
|
|
|
+ "cusNo":"KH000384",
|
|
|
+ "cusName":"上海松江区就业促进中心",
|
|
|
+ "address":"上海市-市辖区-松江区-荣乐东路2378号1/2/3/6楼",
|
|
|
+ "lmName":"闻老师",
|
|
|
+ "lmPhone":"15800656968",
|
|
|
+ "templateId":"279bb347-913e-4627-bffc-605317774885",
|
|
|
+ "templateName":"安装工单",
|
|
|
+ "planTime":"2023-03-19",
|
|
|
+ "productIds": ["a0a6c248-f5f5-11ed-ae93-00163e1537d3","4ef0ee3f-f619-11ed-996b-00163e17c56d"],
|
|
|
+ "attribute": {
|
|
|
+ "field_DfIX3Gg9ziTYZQpY": ["有水","有电"]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
+ Map map = new HashMap();
|
|
|
+ Map map1 = new HashMap();
|
|
|
+ map1.put("field_DfIX3Gg9ziTYZQpY",SDQKlist);
|
|
|
+ //客户编号
|
|
|
+ map.put("cusNo",khbh);
|
|
|
+ //客户名称
|
|
|
+ map.put("cusName",khmc);
|
|
|
+ //客户地址
|
|
|
+ map.put("address",khdz);
|
|
|
+ //客户联系人
|
|
|
+ map.put("lmName",khlxr);
|
|
|
+ //客户联系人电话
|
|
|
+ map.put("lmPhone",khlxrdh);
|
|
|
+ //工单id
|
|
|
+ map.put("templateId",gdid);
|
|
|
+ //工单名称
|
|
|
+ map.put("templateName",gdmc);
|
|
|
+ //计划时间(最晚安装日期)
|
|
|
+ map.put("planTime",azrqDateString);
|
|
|
+ //产品列表(传售后宝和客户绑定的产品id)
|
|
|
+ map.put("productIds",chanpinList);
|
|
|
+ //3米内水电情况列表(固定选项)
|
|
|
+ map.put("attribute",map1);
|
|
|
+
|
|
|
+ String jsonString1 = JSON.toJSONString(map);
|
|
|
+ System.out.println("封装售后宝【创建工单】接口需要的参数:" + jsonString1);
|
|
|
+
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, jsonString);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url("https://oapi.shb.ltd/service/task/create_task_v2?accessToken=" + shouhoubaoAccessToken)
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+
|
|
|
+ try {
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ String responseBody = response.body().string();
|
|
|
+ log.info("售后宝【创建工单】返回信息:" + responseBody);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return "创建售后宝工单完成!";
|
|
|
+ }
|
|
|
+
|
|
|
+}
|