Преглед изворни кода

内部CRM对接AI表格开发

CRK пре 2 недеља
родитељ
комит
63a08cdc9b

+ 71 - 9
mjava-cloudpure/src/main/java/com/malk/cloudpure/controller/H3yunController.java

@@ -1,6 +1,7 @@
 package com.malk.cloudpure.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.server.common.McException;
 import com.malk.server.common.McR;
 import com.malk.server.dingtalk.DDConf;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -53,6 +55,11 @@ public class H3yunController {
     /** 合同表SchemaCode */
     private static final String SCHEMA_CONTRACT = "D000867fhlpdb6a82f59spkf1vzac5p1";
 
+    /** 联系人表SchemaCode */
+    private static final String SCHEMA_CONTACT = "D00086789664a2a7c30475089f29b084d7bde44";
+
+    /** 商机跟进表SchemaCode */
+    private static final String SCHEMA_OPPORTUNITY_FOLLOW = "D00086709fe2ae8c5dd4ceaaa389f840f0efb2a";
 
 
     // ===================== 氚云用户表 =====================
@@ -73,7 +80,7 @@ public class H3yunController {
     /** 机会编号 */
     private static final String FIELD_OPP_CODE = "SeqNo";
 
-     /* 意向产品 */
+    /* 意向产品 */
     private static final String Desired_Product = "D000867F4941a772370545088cef9366ee01aaca";
 
     /** 成单信心 */
@@ -162,21 +169,76 @@ public class H3yunController {
         log.info("提交待审批数据到氚云, {}", data);
 
         String accessToken = ddClient.getAccessToken();
-        String opUserId ="";
-        if (data.get("CRNAME").toString()!=""){
-              opUserId =  _getCYUserIdByDingTalkUserId(data.get("CRNAME").toString());
+        String opUserId = "";
+        Object crname = data.get("CRNAME");
+        if (crname != null && !String.valueOf(crname).trim().isEmpty()) {
+            opUserId = _getCYUserIdByDingTalkUserId(String.valueOf(crname));
         }
 
 
         // 第一步:创建草稿数据(传入的JSON直接作为氚云表单数据)
-        Map extInfo = UtilMap.map("opUserId, bizObjectJson, isDraft", opUserId, JSON.toJSONString(data), true);
+        Map extInfo = UtilMap.map("opUserId, bizObjectJson, isDraft", opUserId, JSON.toJSONString(data), false);
         Map rsp = cyClient.operateData(accessToken, SCHEMA_CUSTOMER, extInfo);
 
         // 第二步:提交数据(发起审批流程)
-        String bizObjectId = String.valueOf(rsp.get("bizObjectId"));
-        cyClient.operateData(accessToken, SCHEMA_CUSTOMER, UtilMap.map("bizObjectId, opUserId", bizObjectId, opUserId));
+       String bizObjectId = String.valueOf(rsp.get("bizObjectId"));
+     // cyClient.operateData(accessToken, SCHEMA_CUSTOMER, UtilMap.map("bizObjectId, opUserId", bizObjectId, opUserId));
+
+        Object contactName = data.get("lxrmc");
+        Object contactPosition = data.get("gangwei");
+        Object contactPhone = data.get("lxdh");
+        boolean hasContactInfo = contactName != null || contactPosition != null || contactPhone != null;
+        if (hasContactInfo) {
+            Map<String, Object> contactData = new HashMap<>();
+            contactData.put("F0000001", bizObjectId);
+            if (contactName != null) {
+                contactData.put("F0000002", contactName);
+            }
+            if (contactPosition != null) {
+                contactData.put("F0000003", contactPosition);
+            }
+            if (contactPhone != null) {
+                contactData.put("F0000005", contactPhone);
+            }
+
+            try {
+                Map contactExtInfo = UtilMap.map("opUserId, bizObjectJson, isDraft", opUserId, JSON.toJSONString(contactData), false);
+                cyClient.operateData(accessToken, SCHEMA_CONTACT, contactExtInfo);
+            } catch (Exception e) {
+                log.warn("新增联系人数据失败, bizObjectId: {}, error: {}", bizObjectId, e.getMessage());
+            }
+        } else {
+            log.info("跳过新增联系人数据, bizObjectId: {}, 原因: 联系人字段为空", bizObjectId);
+        }
+
+        try {
+            Map<String, Object> followData = new HashMap<>();
+            followData.put("F0000001", bizObjectId);
+            followData.put("F0000002", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+            followData.put("F0000021", "SDR跟进");
+            followData.put("F0000004", data.get("F0000020"));
+
+            Map followExtInfo = UtilMap.map("opUserId, bizObjectJson, isDraft", opUserId, JSON.toJSONString(followData), false);
+            Map followRsp = cyClient.operateData(accessToken, SCHEMA_OPPORTUNITY_FOLLOW, followExtInfo);
+            String followBizObjectId = String.valueOf(followRsp.get("bizObjectId"));
+
+            if (followBizObjectId != "") {
+                //更改客户的商机跟进关联
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("F0000020", followBizObjectId);
+                cyClient.updatetForm(accessToken, SCHEMA_CUSTOMER, bizObjectId, jsonObject.toJSONString());
+
+            }
+
+
+        } catch (Exception e) {
+            log.warn("新增商机跟进或回写客户失败, bizObjectId: {}, error: {}", bizObjectId, e.getMessage());
+        }
+
 
         log.info("提交待审批数据成功, schemaCode: {}, bizObjectId: {}", SCHEMA_CUSTOMER, bizObjectId);
+
+
         return McR.success(UtilMap.map("bizObjectId", bizObjectId));
     }
 
@@ -223,7 +285,7 @@ public class H3yunController {
         extInfo.put("sortByFields", sortByFields);
 
         // 只返回需要的字段
-        extInfo.put("returnFields", Arrays.asList(FIELD_OPP_CODE, Desired_Product, Order_Placement_Confidence,Estimated_Closing_Date,Estimated_GMV,Estimated_CASH, Opportunity_Stage,Reasons_Loss,FIELD_CREATED_TIME));
+        extInfo.put("returnFields", Arrays.asList(FIELD_OPP_CODE, Desired_Product, Order_Placement_Confidence, Estimated_Closing_Date, Estimated_GMV, Estimated_CASH, Opportunity_Stage, Reasons_Loss, FIELD_CREATED_TIME));
 
         List<Map> result = cyClient.queryData(accessToken, SCHEMA_CUSTOMER_OPPORTUNITY, extInfo);
 
@@ -303,7 +365,7 @@ public class H3yunController {
         Map<String, Object> response = new HashMap<>();
         response.put("contractCode", UtilMap.getString(latest, FIELD_CONTRACT_CODE));
         response.put("actualGMV", latest.get(FIELD_CONTRACT_ACTUAL_GMV));
-     //   response.put("cash", latest.get(FIELD_CONTRACT_CASH));
+        //   response.put("cash", latest.get(FIELD_CONTRACT_CASH));
         response.put("Payment_Collection_Time", latest.get(Payment_Collection_Time));
 
         log.info("查询客户最新合同结果, customerCode: {}, result: {}", customerCode, response);