소스 검색

定时任务和接口调整

lvjs 1 개월 전
부모
커밋
e0d307b207

+ 2 - 0
src/main/java/com/malk/eastar/conf/EastarParam.java

@@ -31,6 +31,8 @@ public class EastarParam {
 
     public static String YD_FORMUUID_NEW_BUSINESS_USER = "FORM-CF878D21E36542DB91C3A9E7289D9752RCXP";    //新业务员培养,add by Jason 20260722
 
+    public static String YD_FORMUUID_CONFIRMED_RECEIPT = "FORM-A5503F1E250D49D781C3CA0FE9072BCBSOO5";    //确认收款,add by Jason 20260811
+
     static {
         CUSTFIELD_ACCE.put("配件名","textField_me2f7tvo");
         CUSTFIELD_ACCE.put("系列名称","selectField_me2f7tw4");

+ 13 - 1
src/main/java/com/malk/eastar/controller/AitableController.java

@@ -154,7 +154,10 @@ public class AitableController {
      */
     @PostMapping("/changeCustomer")
     McR changeCustomerBasicInfo(@RequestBody JSONObject data) {
-        log.info("客户变更, {}", data);
+//        log.info("客户变更, {}", data);
+        McException.assertParamException_Null(data, "syncLogId");
+        String syncLogId = UtilMap.getString(data, "syncLogId");
+        log.info("数据同步日志ID:{}", syncLogId);
         McException.assertParamException_Null(data, "aitableId");
         String aitableId = UtilMap.getString(data, "aitableId");
         String yidaCustomerName = UtilMap.getString(data, "yidaCustomerName");  //客户公司名(英文名)
@@ -172,6 +175,15 @@ public class AitableController {
                 fields.put("3Y796Wb",yidaNewOrOld);   //新老客户?【客户】
             }
             aitableService.updateSys1CustomerData(aitableId,fields);
+
+            /*
+                更新数据同步时间
+             */
+            yidaService.updateSyncLogTime(syncLogId);
+
+            /*
+                返回成功标识
+             */
             return McR.success();
         } catch (Exception e) {
             return McR.error("400",e.getMessage());

+ 66 - 0
src/main/java/com/malk/eastar/schedule/ScheduleTask1.java

@@ -54,6 +54,72 @@ public class ScheduleTask1 {
     private YidaService yidaService;
     //add by Jason 20260522 end
 
+    /**
+     * 更新前跟进人信息
+     */
+//    @Scheduled(cron = "0 30 15 * * ?")
+    public void updatePreviousFollower() {
+        log.info("更新前跟进人信息开始");
+
+        /*
+            查询(易思达)客户名册所有记录
+         */
+        log.info("查询(易思达)客户名册所有记录");
+        List<Map> ltcCustomerData = new ArrayList<>();
+        try {
+            ltcCustomerData = yidaService.queryLtcAllCustomerData();
+            log.info("客户名册记录数量="+ltcCustomerData.size());
+        } catch (Exception e) {
+            log.error("查询(易思达)客户名册异常",e);
+        }
+
+        /*
+            筛选前跟进人字段不为空的记录
+         */
+        List<Map> previousFollowerNotNullData = new ArrayList<>();
+        List<String> previousFollowerUserIdList; //前跟进人userId列表
+        for (Map record : ltcCustomerData) {
+            previousFollowerUserIdList = UtilMap.getList(record, "previousFollowerUserIdList");
+            if (previousFollowerUserIdList != null && !previousFollowerUserIdList.isEmpty()) {
+                previousFollowerNotNullData.add(record);
+            }
+        }
+
+        log.info("前跟进人字段不为空的记录数量="+previousFollowerNotNullData.size());
+
+        /*
+            清空前跟进人信息
+         */
+        log.info("清空前跟进人信息开始");
+        String formInstId;
+        List<String> previousFollowerUserIdListForUpdate = new ArrayList<>();
+        List<String> previousFollowerGroupListForUpdate = new ArrayList<>();
+        for (Map record : previousFollowerNotNullData){
+            formInstId = UtilMap.getString(record, "formInstId");
+//            if("FINST-M8H66CD1YR06PNI3IOIB8B57GZQH3LIUZENPM282".equals(formInstId)){    //Eastar IT Demo
+//                if(!previousFollowerUserIdListForUpdate.contains("036437162650-02322511193621446331")){
+//                    previousFollowerUserIdListForUpdate.add("02322511193621446331"); //吕家胜
+//                }
+//                previousFollowerUserIdListForUpdate.add("036437162650-776086134"); //信息部测试账号-Test
+//                previousFollowerUserIdListForUpdate.add("02661213420826111159"); //李匡迪
+//                if(!previousFollowerGroupListForUpdate.contains("Jason Test")){
+//                    previousFollowerGroupListForUpdate.add("Jason Test");
+//                }
+//                previousFollowerGroupListForUpdate.add("Lily TEST");
+//            }else{
+//                continue;
+//            }
+            try {
+                yidaService.updateLtcCustomerPreviousFollower(formInstId, previousFollowerUserIdListForUpdate, previousFollowerGroupListForUpdate);
+                Thread.sleep(3000);
+            } catch (Exception e) {
+                log.error("清空前跟进人信息异常,formInstId="+formInstId, e);
+            }
+        }
+
+        log.info("更新前跟进人信息结束");
+    }
+
 
     /**
      * 私海客户流出

+ 79 - 0
src/main/java/com/malk/eastar/schedule/ScheduleTask6.java

@@ -30,6 +30,85 @@ public class ScheduleTask6 {
     @Autowired
     private DDCoreClient ddCoreClient;
 
+    /**
+     * 计算下过单客户
+     */
+    @Scheduled(cron = "0 30 6 * * ?")
+    public void calculatePurchasedCustomers() {
+        log.info("计算下过单客户开始");
+
+        /*
+            查询确认收款数据
+         */
+        log.info("查询确认收款数据");
+        List<Map> confirmedReceiptData = new ArrayList<>();
+        try {
+            confirmedReceiptData = yidaService.queryConfirmedReceiptData();
+            log.info("确认收款记录数量="+confirmedReceiptData.size());
+        } catch (Exception e) {
+            log.error("查询确认收款数据异常",e);
+            return;
+        }
+
+        /*
+            查询(易思达)客户名册所有记录
+         */
+        log.info("查询(易思达)客户名册所有记录");
+        List<Map> ltcCustomerData = new ArrayList<>();
+        try {
+            ltcCustomerData = yidaService.queryLtcAllCustomerData();
+        } catch (Exception e) {
+            log.error("查询(易思达)客户名册异常",e);
+            return;
+        }
+
+        /*
+            更新下过单客户
+         */
+        Long receiptDate;   //收款日期
+        String customerCode;    //客户编号
+        String orderedStatus; //下过单客户
+        String formInstId;
+        int count = 0;
+        Set<String> updatedCustomerCodes = new HashSet<>(); //已更新的客户编号集合
+        for (Map confirmedReceiptRecord : confirmedReceiptData){
+            receiptDate = (Long) confirmedReceiptRecord.get("receiptDate");
+            if(receiptDate < 1785513600000L){ //2026-08-01 00:00:00之前确认收款的
+                continue;
+            }
+            try {
+                customerCode = (String) confirmedReceiptRecord.get("customerCode");
+                if(updatedCustomerCodes.contains(customerCode)){
+                    continue;
+                }
+                for (Map ltcCustomerRecord : ltcCustomerData){
+                    if(customerCode.equals(ltcCustomerRecord.get("customerCode"))){
+                        orderedStatus = ltcCustomerRecord.get("orderedStatus").toString();
+                        if("否".equals(orderedStatus)){
+                            formInstId = ltcCustomerRecord.get("formInstId").toString();
+                            log.info("更新下过单客户:"+ltcCustomerRecord.get("customerName").toString());
+                            yidaService.updateCustomerWithOrders(formInstId);
+                            Thread.sleep(3000);
+                            updatedCustomerCodes.add(customerCode);
+                            count++;
+                        }
+                        //已找到确认收款客户
+                        break;
+                    }
+                }
+            } catch (Exception e) {
+                log.error("更新下过单客户异常",e);
+            }
+        }
+
+        if (count == 0){
+            log.info("没有需要更新的下过单客户");
+        }
+
+        log.info("计算下过单客户结束");
+    }
+
+
     /**
      * 纠正销售项目的业务员,使其与客户的业务员保持一致
      */

+ 172 - 4
src/main/java/com/malk/eastar/schedule/ScheduleTask9.java

@@ -12,10 +12,8 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * 多系统数据计算定时任务
@@ -35,6 +33,176 @@ public class ScheduleTask9 {
     @Autowired
     private DDCoreClient ddCoreClient;
 
+    /**
+     * 计算新老客户
+     */
+    @Scheduled(cron = "0 45 6 * * ?")
+    public void calculateNewOrOldCustomers() {
+        log.info("计算新老客户开始");
+
+        /*
+            查询确认收款数据
+         */
+        log.info("查询确认收款数据");
+        List<Map> confirmedReceiptData = new ArrayList<>();
+        try {
+            confirmedReceiptData = yidaService.queryConfirmedReceiptData();
+            log.info("确认收款记录数量="+confirmedReceiptData.size());
+        } catch (Exception e) {
+            log.error("查询确认收款数据异常",e);
+            return;
+        }
+
+        /*
+            最近一年打款客户为老客户
+         */
+        Set<String> oldCustomerCodes = new HashSet<>();
+        String customerCode;
+        for (Map confirmedReceiptRecord : confirmedReceiptData){
+            customerCode = (String) confirmedReceiptRecord.get("customerCode");
+            oldCustomerCodes.add(customerCode);
+        }
+        log.info("最近一年打款客户数量="+oldCustomerCodes.size());
+
+        /*
+            查询(易思达)客户名册所有记录
+         */
+        log.info("查询(易思达)客户名册所有记录");
+        List<Map> ltcCustomerData = new ArrayList<>();
+        try {
+            ltcCustomerData = yidaService.queryLtcAllCustomerData();
+        } catch (Exception e) {
+            log.error("查询(易思达)客户名册异常",e);
+            return;
+        }
+
+        /*
+            更新老客户
+         */
+        String newOrOldFlag; //新老客户
+        String formInstId;
+        int count = 0;
+        for (String oldCustomerCode : oldCustomerCodes){
+            try {
+                for (Map ltcCustomerRecord : ltcCustomerData){
+                    if(oldCustomerCode.equals(ltcCustomerRecord.get("customerCode"))){
+                        newOrOldFlag = ltcCustomerRecord.get("newOrOld").toString();
+                        if("新".equals(newOrOldFlag)){
+                            formInstId = ltcCustomerRecord.get("formInstId").toString();
+                            log.info("修改为老客户:"+ltcCustomerRecord.get("customerName").toString());
+                            yidaService.updateLtcCustomerNewOrOld(formInstId, "老");
+                            Thread.sleep(3000);
+                            count++;
+                        }
+                        //已找到该客户
+                        break;
+                    }
+                }
+            } catch (Exception e) {
+                log.error("修改为老客户异常",e);
+            }
+        }
+
+        if (count == 0){
+            log.info("没有需要修改为老客户的记录");
+        }
+
+        /*
+            筛选老客户标签的客户记录
+         */
+        log.info("筛选老客户标签的客户记录");
+        List<Map> ltcCustomerDataFilter = new ArrayList<>();
+        for (Map ltcCustomerRecord : ltcCustomerData){
+            newOrOldFlag = ltcCustomerRecord.get("newOrOld").toString();
+            if("老".equals(newOrOldFlag)){
+                ltcCustomerDataFilter.add(ltcCustomerRecord);
+            }
+        }
+
+        /*
+            查询项目总表售前台账数据
+         */
+        log.info("查询项目总表售前台账数据");
+        List<Map> sys1SaleData = new ArrayList<>();
+        try {
+            sys1SaleData = aitableService.querySys1AllSaleData();
+            log.info("项目总表售前台账记录数量="+sys1SaleData.size());
+        } catch (Exception e) {
+            log.error("查询所有项目总表售前台账数据异常",e);
+            return;
+        }
+
+        /*
+            筛选实际成单日期在最近1年的记录
+         */
+        List<Map> sys1SaleDataFilter = new ArrayList<>();
+        Long actualCloseDate;   //实际成单日期
+        Long beginTime = System.currentTimeMillis() - 31536000000L;   //起始时间(一年前)
+        Long endTime = System.currentTimeMillis();   //结束时间(当前时间)
+        for (Map sys1SaleRecord : sys1SaleData){
+            if(sys1SaleRecord.get("actualCloseDate") == null){
+                continue;
+            }
+            actualCloseDate = Long.parseLong(sys1SaleRecord.get("actualCloseDate").toString());
+            if(actualCloseDate >= beginTime && actualCloseDate < endTime){
+                sys1SaleDataFilter.add(sys1SaleRecord);
+            }
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        log.info("实际成单日期在"+sdf.format(new Date(beginTime))+"至"+sdf.format(new Date(endTime))+"的记录数量="+sys1SaleDataFilter.size());
+
+        /*
+            最近1年有实际成单日期项目的关联客户以及有打款记录的客户保留老客户标识,其他客户更新为新客户标识
+         */
+        String customerAiTableId;
+        boolean isOrdered;
+        count = 0;
+        for (Map ltcCustomerRecord : ltcCustomerDataFilter){ //遍历老客户
+            System.out.println("老客户:" + ltcCustomerRecord.get("customerName").toString());
+            customerCode = ltcCustomerRecord.get("customerCode").toString();
+            if(oldCustomerCodes.contains(customerCode)){
+                //有打款记录,保留老客户标识
+                continue;
+            }
+            if(ltcCustomerRecord.get("aiTableId") == null){
+                continue;
+            }
+            customerAiTableId = ltcCustomerRecord.get("aiTableId").toString();
+            isOrdered = false;
+            for (Map sys1SaleRecord : sys1SaleDataFilter){
+                if(sys1SaleRecord.get("customerId") == null){
+                    continue;
+                }
+                if(customerAiTableId.equals(sys1SaleRecord.get("customerId"))){
+                    actualCloseDate = Long.parseLong(sys1SaleRecord.get("actualCloseDate").toString());
+                    System.out.println("实际成单日期:" + sdf.format(new Date(actualCloseDate)));
+                    //有实际成单日期项目,保留老客户标识
+                    isOrdered = true;
+                    break;
+                }
+            }
+            if(!isOrdered){
+                try {
+                    formInstId = ltcCustomerRecord.get("formInstId").toString();
+                    //最近1年无实际成单日期项目,修改为新客户
+                    log.info("修改为新客户:" + ltcCustomerRecord.get("customerName").toString());
+                    yidaService.updateLtcCustomerNewOrOld(formInstId, "新");
+                    Thread.sleep(3000);
+                    count++;
+                } catch (Exception e) {
+                    log.error("修改为新客户异常",e);
+                }
+            }
+        }
+
+        if(count == 0){
+            log.info("没有需要修改为新客户的记录");
+        }
+
+
+        log.info("计算新老客户结束");
+    }
+
     /**
      * 计算业务员私海客户数量
      */

+ 2 - 0
src/main/java/com/malk/eastar/schedule/package-info.java

@@ -11,6 +11,8 @@ package com.malk.eastar.schedule;
     05:30    同步售前台账数据到新系统(AI表格映射ID)   ScheduleTask7
     06:00    更新员工在职情况   ScheduleTask6
     06:15    在职和考核剩余天数更新    宜搭
+    06:30    计算下过单客户    ScheduleTask6
+    06:45    计算新老客户     ScheduleTask9
     07:11    纠正销售项目的业务员,使其与客户的业务员保持一致  ScheduleTask6
     07:46    同步售前台账数据到新系统(是否计算为通关项目)  ScheduleTask7
     08:18    计算试用期业务员RFQ数量和成单额  ScheduleTask6

+ 11 - 0
src/main/java/com/malk/eastar/service/YidaService.java

@@ -45,6 +45,12 @@ public interface YidaService {
      */
     List<Map> queryEmployedBusinessUserData() throws Exception;
 
+    /**
+     * 获取确认收款已完成记录
+     * @return
+     */
+    List<Map> queryConfirmedReceiptData() throws Exception;
+
     /**
      * 更新业务人员在职状态为已离职(业务员档案)
      */
@@ -169,6 +175,11 @@ public interface YidaService {
      */
     void updateLtcCustomerBackToPublicSea(String formInstId) throws Exception;
 
+    /**
+     * 更新前跟进人
+     */
+    void updateLtcCustomerPreviousFollower(String formInstId, List<String> previousFollowerUserIdList, List<String> previousFollowerGroupList) throws Exception;
+
     /**
      * 更新易思达系统客户基本信息(客户当前分级)
      */

+ 163 - 1
src/main/java/com/malk/eastar/service/impl/YidaServiceImpl.java

@@ -1143,6 +1143,105 @@ public class YidaServiceImpl implements YidaService {
         return businessUserData;
     }
 
+    @Override
+    public List<Map> queryConfirmedReceiptData() throws Exception {
+        /*
+            参数定义
+         */
+        List<Map> confirmedReceiptData = new ArrayList<>(); // 确认收款数据
+        Map confirmedReceiptRecord;  //确认收款记录
+        YDSearch ydSearch; //检索条件(单个)
+        List<YDSearch> ydSearchList = new ArrayList<>(); //检索条件(多个)
+        String searchCondition; //检索条件
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        DDR_New yidaResult; //请求返回内容
+        List<Map> records;  //每页记录数据
+        List<Map> allRecords = new ArrayList<>();  //所有记录数据
+        boolean hasMore; //是否还有下一页
+        int pageNo; //当前页码
+        int pageSize;   //每页获取的数据量(上限100)
+        String formInstId;  //表单实例ID
+        JSONObject fields;  //字段数据
+        Long receiptDate;   //收款日期
+        String customerCode;    //客户编号
+
+        /*
+            初始化参数值
+         */
+        ydSearch = new YDSearch(
+                "radioField_mqri33bx",
+                "否",
+                "测试使用",
+                YDSearch.Type.RADIO_FIELD,
+                YDSearch.Operator.EQ
+        );
+        ydSearchList.add(ydSearch);
+        searchCondition = JSONObject.toJSONString(ydSearchList);
+        hasMore = true; //第一页默认有数据
+        pageNo = 1;
+        pageSize = 100;
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formUuid(EastarParam.YD_FORMUUID_CONFIRMED_RECEIPT);
+        ydParamBuilder = ydParamBuilder.instanceStatus("COMPLETED");
+        ydParamBuilder = ydParamBuilder.approvedResult("agree");
+        ydParamBuilder = ydParamBuilder.searchFieldJson(searchCondition);
+
+        /*
+            翻页获取数据
+         */
+        while(hasMore){
+            ydParamBuilder = ydParamBuilder.pageNumber(pageNo);
+            ydParamBuilder = ydParamBuilder.pageSize(pageSize);
+            yidaParam = ydParamBuilder.build();
+            yidaResult = ydClient.queryData(yidaParam,YDConf.FORM_QUERY.retrieve_search_process);
+            log.info("当前第"+pageNo+"页");
+            records = (List<Map>) yidaResult.getData();
+            log.info("记录数="+records.size());
+            for (Map record : records){
+                allRecords.add(record);
+            }
+            if((pageNo*pageSize) < yidaResult.getTotalCount()){
+                pageNo++;
+            }else{
+                hasMore = false;
+            }
+            log.info("是否有更多数据:"+hasMore);
+        }
+
+        /*
+            请求记录数据处理
+         */
+        log.info("所有记录数量="+allRecords.size());
+        for (Map record : allRecords){
+
+            receiptDate = null;
+            customerCode = null;
+            confirmedReceiptRecord = new HashMap<>();
+
+            //获取表单实例ID
+            formInstId = String.valueOf(record.get("formInstanceId"));
+
+            //解析字段数据
+            fields = JSONObject.parseObject(JSONObject.toJSONString(record.get("data")));
+
+            if(fields.get("dateField_mff079qz") != null){ //收款日期
+                receiptDate = Long.parseLong(fields.getString("dateField_mff079qz"));
+            }
+
+            if(fields.get("textField_mff079ra") != null){ //客户编号(主表)
+                customerCode = String.valueOf(fields.get("textField_mff079ra"));
+            }
+
+            confirmedReceiptRecord.put("receiptDate",receiptDate);
+            confirmedReceiptRecord.put("customerCode",customerCode);
+            confirmedReceiptData.add(confirmedReceiptRecord);
+        }
+
+
+        return confirmedReceiptData;
+    }
+
     @Override
     public void setLtcBusinessUserLeave(String formInstId) throws Exception {
         /*
@@ -1239,6 +1338,11 @@ public class YidaServiceImpl implements YidaService {
         String userIdText;
         String establishStatus; //建联状态
         String countryOrRegion; //国家或地区
+        JSONArray previousFollowerJSONArray;  //前跟进人
+        List<String> previousFollowerUserIdList; //前跟进人userId列表
+        JSONArray previousFollowerGroupJSONArray;  //前跟进团队
+        List<String> previousFollowerGroupList; //前跟进团队列表
+        String orderedStatus; //下过单客户
 
         /*
             初始化参数值
@@ -1283,6 +1387,7 @@ public class YidaServiceImpl implements YidaService {
             customerCode = "";
             establishStatus = null;
             countryOrRegion = null;
+            orderedStatus = null;
 
             //获取表单实例ID
             formInstId = String.valueOf(ltcCustomerRecord.get("formInstanceId"));
@@ -1326,9 +1431,33 @@ public class YidaServiceImpl implements YidaService {
                 countryOrRegion = "尚不明确";
             }
 
+            previousFollowerJSONArray = null;
+            previousFollowerUserIdList = new ArrayList<>();
+            if(fields.get("employeeField_mdo82twa_id") != null){
+                previousFollowerJSONArray = fields.getJSONArray("employeeField_mdo82twa_id");
+                if(!previousFollowerJSONArray.isEmpty()){
+                    previousFollowerUserIdList = previousFollowerJSONArray.toJavaList(String.class);
+                }
+            }
+
+            previousFollowerGroupJSONArray = null;
+            previousFollowerGroupList = new ArrayList<>();
+            if(fields.get("multiSelectField_msfo18mb") != null){
+                previousFollowerGroupJSONArray = fields.getJSONArray("multiSelectField_msfo18mb");
+                if(!previousFollowerGroupJSONArray.isEmpty()){
+                    System.out.println(previousFollowerGroupJSONArray);
+                    previousFollowerGroupList = previousFollowerGroupJSONArray.toJavaList(String.class);
+                }
+            }
+
+            //下过单客户
+            if(fields.get("radioField_ms43zj2s") != null){
+                orderedStatus = fields.get("radioField_ms43zj2s").toString();
+            }
+
             //生成客户数据
             customerRecord = UtilMap.map(
-                    "formInstId, customerName, customerNameUnique, customerCode, userId, userIdText, customerLevel, customerPotentialLevel, newOrOld, seaType, establishStatus, countryOrRegion, productTypes, testUseFlag, aiTableId",
+                    "formInstId, customerName, customerNameUnique, customerCode, userId, userIdText, customerLevel, customerPotentialLevel, newOrOld, seaType, establishStatus, countryOrRegion, productTypes, previousFollowerUserIdList, previousFollowerGroupList, orderedStatus, testUseFlag, aiTableId",
                     formInstId, //表单实例ID
                     customerName, //客户公司名(英文名)
                     fields.getString("textField_meks6pjp"),    //客户验重
@@ -1342,6 +1471,9 @@ public class YidaServiceImpl implements YidaService {
                     establishStatus, //建联状态
                     countryOrRegion, //国家或地区
                     fields.get("multiSelectField_md6q7ox7"), //主要品类
+                    previousFollowerUserIdList, //前跟进人userId列表
+                    previousFollowerGroupList, //前跟进团队列表
+                    orderedStatus, //下过单客户
                     fields.getString("radioField_mnpdkss9"),    //测试使用
                     fields.getString("textField_mno9nwip")  //AI表格映射ID
             );
@@ -2484,6 +2616,36 @@ public class YidaServiceImpl implements YidaService {
         ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public void updateLtcCustomerPreviousFollower(String formInstId, List<String> previousFollowerUserIdList, List<String> previousFollowerGroupList) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        Map updateFormData = UtilMap.map(
+                "employeeField_mdo82twa, multiSelectField_msfo18mb",
+                previousFollowerUserIdList.toArray(new String[]{}),
+                previousFollowerGroupList.toArray(new String[]{})
+        );
+        updateFormDataJson = JSONObject.toJSONString(updateFormData);
+        System.out.println(updateFormDataJson);
+
+        /*
+            更新数据
+         */
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formInstId(formInstId);
+        ydParamBuilder = ydParamBuilder.updateFormDataJson(updateFormDataJson);
+        yidaParam = ydParamBuilder.build();
+        ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
+    }
+
     @Override
     public void updateCustomerCurrentLevel(String formInstId, String customerCurrentLevel) throws Exception {
         /*