Pārlūkot izejas kodu

同步客户数据,更新“测试使用”标识

lvjs 3 nedēļas atpakaļ
vecāks
revīzija
6eb57cee16

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

@@ -18,6 +18,7 @@ public class EastarParam {
 
     public static String TB_PROJECT_TEMP="68d49cdbd17a8ab739a424ce";
 
+    public static String YD_FORMUUID_CUSTOMER = "FORM-9261FABA687B4D1D917617F53B4A5DB7UN16";    //客户,add by Jason 20260414
     public static String YD_FORMUUID_BUSINESS_USER = "FORM-C940C08329AA47A5814001E52F1665F3XV4P";    //业务小组档案,add by Jason 20260414
 
     static {

+ 98 - 24
src/main/java/com/malk/eastar/schedule/ScheduleTaskNew.java

@@ -1,6 +1,7 @@
 package com.malk.eastar.schedule;
 
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.eastar.service.AitableService;
 import com.malk.eastar.service.DDCoreClient;
 import com.malk.eastar.service.YidaService;
@@ -37,32 +38,31 @@ public class ScheduleTaskNew {
     /**
      * 更新员工在职情况
      */
-    @Scheduled(cron = "0 0 8 * * ?")
+    @Scheduled(cron = "0 0 6 * * ?")
     public void updateEmployeeStatus() {
         log.info("更新员工在职情况");
+        /*
+            查询业务小组档案中的成员信息
+         */
+        List<Map> ltcBusinessUserData = new ArrayList<>();
         try {
-            /*
-                查询业务小组档案中的成员信息
-             */
-            List<Map> ltcBusinessUserData = new ArrayList<>();
-            try {
-                ltcBusinessUserData = yidaService.queryLtcBusinessUserData();
-            } catch (Exception e) {
-                log.error("查询业务小组档案中的成员信息异常",e);
-            }
-
-            /*
-                查询最近一周的离职人员
-             */
-            List<Map<String, String>> leaveEmployeeData = new ArrayList<>();
-            try {
-                Date startTime = DateUtil.lastWeek();
-                Date endTime = DateUtil.yesterday();
-                leaveEmployeeData = ddCoreClient.getLeaveEmployeeData(startTime, endTime);
-            } catch (Exception e) {
-                log.error("查询业务小组档案中的成员信息异常",e);
-            }
+            ltcBusinessUserData = yidaService.queryLtcAllBusinessUserData();
+        } catch (Exception e) {
+            log.error("查询业务小组档案中的成员信息异常",e);
+        }
 
+        /*
+            查询最近一周的离职人员
+         */
+        List<Map<String, String>> leaveEmployeeData = new ArrayList<>();
+        try {
+            Date startTime = DateUtil.lastWeek();
+            Date endTime = DateUtil.yesterday();
+            leaveEmployeeData = ddCoreClient.getLeaveEmployeeData(startTime, endTime);
+        } catch (Exception e) {
+            log.error("查询业务小组档案中的成员信息异常",e);
+        }
+        try {
             /*
                 业务员已离职,更新状态
              */
@@ -76,8 +76,6 @@ public class ScheduleTaskNew {
                     }
                 }
             }
-
-
         } catch (Exception e) {
             log.error("更新员工在职情况异常",e);
         }
@@ -295,4 +293,80 @@ public class ScheduleTaskNew {
         log.info("客户数据清洗完成");
     }
 
+    /**
+     * 同步客户数据
+     */
+//    @Scheduled(cron = "0 35 10 * * ?")
+    public void syncCustomerData() {
+        /*
+            查询所有已离职的员工
+         */
+//        List<Map<String, String>> leaveEmployeeData = new ArrayList<>();
+//        try {
+//            leaveEmployeeData = ddCoreClient.getAllLeaveEmployeeData();
+//        } catch (Exception e) {
+//            log.error("查询所有已离职的员工异常",e);
+//        }
+
+        /*
+            查询(客户数据清洗)客户名册all所有记录
+         */
+        log.info("查询(客户数据清洗)客户名册all所有记录");
+        List<Map> sys1Sys2CustomerData = new ArrayList<>();
+        try {
+            sys1Sys2CustomerData = yidaService.querySys1Sys2CustomerAllData();
+        } catch (Exception e) {
+            log.error("查询(客户数据清洗)客户名册all所有记录异常",e);
+        }
+
+        /*
+            查询(易思达)客户名册所有记录
+         */
+        log.info("查询(易思达)客户名册所有记录");
+        List<Map> ltcCustomerData = new ArrayList<>();
+        try {
+            ltcCustomerData = yidaService.queryLtcAllCustomerData();
+        } catch (Exception e) {
+            log.error("查询(客户数据清洗)客户名册all所有记录异常",e);
+        }
+
+        /*
+            对比后更新“测试使用”标识
+         */
+//        log.info("对比后更新“测试使用”标识");
+//        List<Map> testLtcCustomers = new ArrayList<>();
+//        String customerName;
+//        boolean isTest;
+//        for (Map ltcCustomerRecord : ltcCustomerData) {
+//            isTest = true;
+//            customerName = UtilMap.getString(ltcCustomerRecord, "customerName");
+//            if (customerName != null && !customerName.isEmpty()) {
+//                customerName = customerName.trim();
+//                for (int i = 0; i < sys1Sys2CustomerData.size(); i++) {
+//                    if(customerName.equals(UtilMap.getString(sys1Sys2CustomerData.get(i), "customerName"))){
+//                        isTest = false;
+//                        break;
+//                    }
+//                }
+//                if(isTest){
+//                    testLtcCustomers.add(ltcCustomerRecord);
+//                }
+//            }
+//        }
+//        log.info("测试使用客户数量: {}", testLtcCustomers.size());
+//        int updateTestFlagCount = 0;
+//        for (Map testLtcCustomer : testLtcCustomers){
+//            try {
+//                yidaService.updateLtcCustomerTestFlag(UtilMap.getString(testLtcCustomer, "formInstId"));
+//                updateTestFlagCount++;
+//                System.out.println("更新测试使用标识成功:"+updateTestFlagCount);
+//                Thread.sleep(3000);
+//            } catch (Exception e) {
+//                log.error("更新测试使用标识异常",e);
+//            }
+//        }
+
+        log.info("同步客户数据完成");
+    }
+
 }

+ 6 - 0
src/main/java/com/malk/eastar/service/DDCoreClient.java

@@ -23,4 +23,10 @@ public interface DDCoreClient {
      * @return
      */
     List<Map<String, String>> getLeaveEmployeeData(Date startTime, Date endTime) throws Exception;
+
+    /**
+     * 查询所有离职员工数据
+     * @return
+     */
+    List<Map<String, String>> getAllLeaveEmployeeData() throws Exception;
 }

+ 17 - 2
src/main/java/com/malk/eastar/service/YidaService.java

@@ -25,16 +25,26 @@ public interface YidaService {
 
 
     /**
-     * 获取易思达中的多行记录(业务小组档案)
+     * 获取易思达系统中的所有记录(业务小组档案)
      * @return
      */
-    List<Map> queryLtcBusinessUserData() throws Exception;
+    List<Map> queryLtcAllBusinessUserData() throws Exception;
 
     /**
      * 更新业务人员在职状态为已离职(业务小组档案)
      */
     void setLtcBusinessUserLeave(String formInstId) throws Exception;
 
+    /**
+     * 获取易思达系统中的所有记录(客户名册)
+     */
+    List<Map> queryLtcAllCustomerData() throws Exception;
+
+    /**
+     * 更新易思达系统客户测试使用标识(客户名册)
+     */
+    void updateLtcCustomerTestFlag(String formInstId) throws Exception;
+
     /**
      * 获取EASTAR业务数字化中的多行记录(客户名册)
      * @return
@@ -51,5 +61,10 @@ public interface YidaService {
      */
     void insertSys1Sys2CustomerAllData(List<Map> sys1Sys2CustomerData) throws Exception;
 
+    /**
+     * 获取客户数据清洗中的多行记录(客户名册all)
+     */
+    List<Map> querySys1Sys2CustomerAllData() throws Exception;
+
 
 }

+ 20 - 0
src/main/java/com/malk/eastar/service/impl/DDCoreClientImpl.java

@@ -1,5 +1,6 @@
 package com.malk.eastar.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.eastar.service.DDCoreClient;
 import com.malk.server.dingtalk.DDR;
@@ -44,4 +45,23 @@ public class DDCoreClientImpl implements DDCoreClient {
         List<Map<String, String>> leaveEmployeeRecords = ddClientContacts.getLeaveEmployeeRecords(ddClient.getAccessToken(), startTime, extInfo);
         return leaveEmployeeRecords;
     }
+
+    @Override
+    public List<Map<String, String>> getAllLeaveEmployeeData() throws Exception {
+        List<Map<String, String>> leaveEmployeeData = new ArrayList<>();
+        Date startTime;
+        Date endTime;
+        Map extInfo;
+        List<Map<String, String>> leaveEmployeeRecords;
+        String[] years = new String[]{"2025", "2026"};
+        for(String year:years){
+            startTime = DateUtil.parse(year+"-01-01");
+            extInfo = new HashMap();
+            endTime = DateUtil.parse(year+"-12-31");
+            extInfo.put("endTime", endTime);
+            leaveEmployeeRecords = ddClientContacts.getLeaveEmployeeRecords(ddClient.getAccessToken(), startTime, extInfo);
+            leaveEmployeeData.addAll(leaveEmployeeRecords);
+        }
+        return leaveEmployeeData;
+    }
 }

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

@@ -698,7 +698,7 @@ public class YidaServiceImpl implements YidaService {
     }
 
     @Override
-    public List<Map> queryLtcBusinessUserData() throws Exception {
+    public List<Map> queryLtcAllBusinessUserData() throws Exception {
         /*
             参数定义
          */
@@ -813,6 +813,114 @@ public class YidaServiceImpl implements YidaService {
         ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public List<Map> queryLtcAllCustomerData() throws Exception {
+        /*
+            参数定义
+         */
+        List<Map> ltcCustomerData = new ArrayList<>();
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        DDR_New yidaResult; //请求返回内容
+        List<Map> records;  //每页记录数据
+        List<Map> allRecords = new ArrayList<>();  //所有记录数据
+        boolean hasMore; //是否还有下一页
+        int pageNo; //当前页码
+        int pageSize;   //每页获取的数据量(上限100)
+        JSONObject fields;  //字段数据
+        String formInstId;  //表单实例ID
+        Map customerRecord;  //客户记录
+        JSONArray businessUserIdJSONArray;  //业务员userId
+        String userId;  //用户userId
+
+        /*
+            初始化参数值
+         */
+        hasMore = true; //第一页默认有数据
+        pageNo = 1;
+        pageSize = 100;
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formUuid(EastarParam.YD_FORMUUID_CUSTOMER);
+
+        /*
+            翻页获取数据
+         */
+        while(hasMore){
+            ydParamBuilder = ydParamBuilder.pageNumber(pageNo);
+            ydParamBuilder = ydParamBuilder.pageSize(pageSize);
+            yidaParam = ydParamBuilder.build();
+            yidaResult = ydClient.queryData(yidaParam,YDConf.FORM_QUERY.retrieve_list);
+            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);
+            Thread.sleep(3000);
+        }
+
+        /*
+            请求记录数据处理
+         */
+        log.info("所有记录数量="+allRecords.size());
+        userId = "";
+        for (Map ltcCustomerRecord : allRecords){
+            //获取表单实例ID
+            formInstId = String.valueOf(ltcCustomerRecord.get("formInstanceId"));
+            //解析字段数据
+            fields = JSONObject.parseObject(JSONObject.toJSONString(ltcCustomerRecord.get("formData")));
+            /*
+                获取成员数据
+             */
+            if(fields.get("employeeField_lqanqe6n_id") != null){
+                businessUserIdJSONArray = fields.getJSONArray("employeeField_lqanqe6n_id");
+                if(!businessUserIdJSONArray.isEmpty()){
+                    userId = String.valueOf(businessUserIdJSONArray.get(0));
+                }
+            }
+            //生成客户数据
+            customerRecord = UtilMap.map(
+                    "formInstId, customerName, userId",
+                    formInstId, //表单实例ID
+                    fields.getString("textField_lqanqe6j"), //客户公司名(英文名)
+                    userId  //业务
+            );
+            ltcCustomerData.add(customerRecord);
+        }
+
+        return ltcCustomerData;
+    }
+
+    @Override
+    public void updateLtcCustomerTestFlag(String formInstId) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        updateFormDataJson = JSONObject.toJSONString(UtilMap.map("radioField_mnpdkss9","是"));  //测试使用
+
+        /*
+            更新数据
+         */
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formInstId(formInstId);
+        ydParamBuilder = ydParamBuilder.updateFormDataJson(updateFormDataJson);
+        yidaParam = ydParamBuilder.build();
+        ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
+    }
+
     @Override
     public List<Map> querySys2CustomerData() throws Exception {
         /*
@@ -1221,7 +1329,89 @@ public class YidaServiceImpl implements YidaService {
         System.out.println("新增客户名册完成");
     }
 
+    @Override
+    public List<Map> querySys1Sys2CustomerAllData() throws Exception {
+        /*
+            参数定义
+         */
+        List<Map> sys1Sys2CustomerData = new ArrayList<>();
+        String appType; //宜搭应用编码
+        String formUuid;    //表单编码
+        String systemToken; //宜搭应用密钥
+        String userId;  //用户userId
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        DDR_New yidaResult; //请求返回内容
+        List<Map> records;  //每页记录数据
+        List<Map> allRecords = new ArrayList<>();  //所有记录数据
+        boolean hasMore; //是否还有下一页
+        int pageNo; //当前页码
+        int pageSize;   //每页获取的数据量(上限100)
+        JSONObject fields;  //字段数据
+        String customerName;    //客户名称
+        Map customerRecord;  //客户记录
+
+        /*
+            客户数据清洗
+         */
+        appType = "APP_IL6UN1IETFL3GATLFU0Z";
+        systemToken = "2MA66S71ZRH4FN2FJKW985LDOEBT30F3D7INMGMT";
+        formUuid = "FORM-300D7134EEB446AE82A6FDF330FAD006Q4HO"; //客户名册all
 
+        /*
+            初始化参数值
+         */
+        userId = "02322511193621446331";    //操作人(Jason)的userId
+        hasMore = true; //第一页默认有数据
+        pageNo = 1;
+        pageSize = 100;
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.appType(appType);
+        ydParamBuilder = ydParamBuilder.systemToken(systemToken);
+        ydParamBuilder = ydParamBuilder.formUuid(formUuid);
+        ydParamBuilder = ydParamBuilder.userId(userId);
+
+        /*
+            翻页获取数据
+         */
+        while(hasMore){
+            ydParamBuilder = ydParamBuilder.pageNumber(pageNo);
+            ydParamBuilder = ydParamBuilder.pageSize(pageSize);
+            yidaParam = ydParamBuilder.build();
+            yidaResult = ydClient.queryData(yidaParam,YDConf.FORM_QUERY.retrieve_list);
+            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);
+            Thread.sleep(3000);
+        }
+
+        /*
+            请求记录数据处理
+         */
+        log.info("所有记录数量="+allRecords.size());
+        for (Map sys1Sys2CustomerRecord : allRecords){
+            //解析字段数据
+            fields = JSONObject.parseObject(JSONObject.toJSONString(sys1Sys2CustomerRecord.get("formData")));
+            //生成客户数据
+            customerRecord = UtilMap.map(
+                    "customerName, source",
+                    fields.getString("textField_mnwhxldz"), //客户名称
+                    fields.getString("selectField_mnx00f7g")  //数据来源标记
+            );
+            sys1Sys2CustomerData.add(customerRecord);
+        }
+
+        return sys1Sys2CustomerData;
+    }
 
 
 }