Просмотр исходного кода

定时任务分类(task1是原有定时任务,task2-4用于数据清洗,task5用于项目总表计算,task6用于易思达系统计算,task7用于项目总表同步数据到易思达系统,task8用于易思达系统同步到项目总表)

lvjs 1 неделя назад
Родитель
Сommit
2bb9ef42c4

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

@@ -19,7 +19,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
+    public static String YD_FORMUUID_BUSINESS_USER = "FORM-C940C08329AA47A5814001E52F1665F3XV4P";    //业务档案,add by Jason 20260414
     public static String YD_FORMUUID_CUSTOMER_CONTACT = "FORM-F2217E70844B4836833AB97C56C27BDFRI4Y";    //客户跟进,add by Jason 20260522
     public static String YD_FORMUUID_ALERT_LOG = "FORM-49E10E54526E42B0925D0C809F4BF5DA8W4S";    //私海客户流出告警日志,add by Jason 20260522
     public static String YD_FORMUUID_ALERT_DETAIL = "FORM-AAA9AD76E53246B89356B09DEE5262552ZA0";    //私海客户流出风险提示,add by Jason 20260522

+ 1 - 197
src/main/java/com/malk/eastar/schedule/ScheduleTask1.java

@@ -29,7 +29,7 @@ import java.time.LocalTime;
 import java.util.*;
 
 /**
- * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ * 原有的定时任务
  */
 @Slf4j
 @Configuration
@@ -210,202 +210,6 @@ public class ScheduleTask1 {
         }
     }
 
-    /**
-     * 项目总表表2未填写完成统计
-     * 每日9点55
-     */
-    @Scheduled(cron = "0 55 9 * * ?")
-    public void table2IncompleteStatistics() {
-        log.info("定时更新项目台账填写情况表");
-        /*
-            查询【表2】项目台账所有项目状态为Pending、Done、Closed的记录
-         */
-        JSONArray table2RecordsFilter = new JSONArray();
-        String baseId = "G53mjyd80pEr5grBfpjmMX6586zbX04v";
-        String sheetIdOrName = "pl6sz00";
-        Map<String,Object> param = new HashMap<>();
-        param.put("operatorId","aj1wcWqKLXITiPDwbMIjUbAiEiE");  //操作人(Jason)的unionId
-        AITableParam aiTableParam = new AITableParam();
-        aiTableParam.setMaxResults(100);
-        JSONObject filter = new JSONObject();
-        filter.put("combination","and");
-        JSONArray conditions = new JSONArray();
-        JSONObject condition = new JSONObject();
-        condition.put("field","项目状态");
-        condition.put("operator","notContain");
-        condition.put("value",new String[]{"Pending","Done","Closed"});
-        conditions.add(condition);
-        filter.put("conditions",conditions);
-        aiTableParam.setFilter(filter);
-        AITableResult aiTableResult;
-        boolean hasMore = true;
-        int pageNo = 1;
-        JSONArray records;
-        log.info("查询【表2】项目台账所有项目状态为Pending、Done、Closed的记录");
-        while(hasMore){
-            aiTableResult = mdTableClient.queryMultiRecords(baseId,sheetIdOrName,param,aiTableParam);
-            hasMore = aiTableResult.getHasMore();
-            log.info("当前第"+pageNo+"页");
-            log.info("记录数="+aiTableResult.getRecords().size());
-            records = aiTableResult.getRecords();
-            for(int i=0;i<records.size();i++){
-                table2RecordsFilter.add(records.getJSONObject(i));
-            }
-            log.info("是否有更多数据:"+hasMore);
-            pageNo++;
-            aiTableParam.setNextToken(aiTableResult.getNextToken());
-        }
-        /*
-            统计计划开始时间和计划结束时间未填的
-         */
-        List<String> checkEmptyRecordList = new ArrayList<>();
-        String[] checkEmptyFieldArr = new String[]{
-                "计划:开始白样【交付进度】",
-                "计划:结束白样【交付进度】",
-                "计划:开始制版【交付进度】",
-                "计划:结束制版【交付进度】",
-                "计划:开始产前样【交付进度】",
-                "计划:结束产前样【交付进度】",
-                "计划:开始大货【交付进度】",
-                "计划:结束大货【交付进度】",
-                "计划:开始包装【交付进度】",
-                "计划:结束包装【交付进度】",
-                "计划:开始出货【交付进度】",
-                "计划:结束出货时间【交付进度】"
-        };
-        JSONObject table2Record;
-        JSONObject fields;
-        String unionIdPM;
-        String checkFailureStr;
-        JSONArray pmJSONArray;
-//        System.out.println("表2PM:");
-        for(int i=0;i<table2RecordsFilter.size();i++){
-            table2Record = table2RecordsFilter.getJSONObject(i);
-            fields = table2Record.getJSONObject("fields");
-            pmJSONArray = fields.getJSONArray("PM(Owner)【人事】");
-            if(pmJSONArray == null){
-                continue;
-            }
-            unionIdPM = pmJSONArray.getJSONObject(0).getString("unionId");
-            for(String checkEmptyField : checkEmptyFieldArr){
-                if(StringUtils.isEmpty(fields.getString(checkEmptyField))){
-                    checkFailureStr = unionIdPM + "_" + checkEmptyField+"未填写";
-//                    System.out.println(checkFailureStr);
-                    checkEmptyRecordList.add(checkFailureStr);
-                }
-            }
-        }
-//        System.out.println("checkEmptyRecordList:");
-//        System.out.println(JSON.toJSONString(checkEmptyRecordList));
-        /*
-            查询【参数表-人事】部门为销售部、客服部的记录
-         */
-        JSONArray empRecordsFilter = new JSONArray();
-        sheetIdOrName = "rtOAveM";
-        aiTableParam = new AITableParam();
-        aiTableParam.setMaxResults(100);
-        filter = new JSONObject();
-        filter.put("combination","and");
-        conditions = new JSONArray();
-        condition = new JSONObject();
-        condition.put("field","部门");
-        condition.put("operator","contain");
-        condition.put("value",new String[]{"销售部","客服部"});
-        conditions.add(condition);
-        filter.put("conditions",conditions);
-        aiTableParam.setFilter(filter);
-        log.info("查询【参数表-人事】部门为销售部、客服部的记录");
-        aiTableResult = mdTableClient.queryMultiRecords(baseId,sheetIdOrName,param,aiTableParam);
-        hasMore = aiTableResult.getHasMore();
-        log.info("是否有更多数据:"+hasMore);
-        log.info("销售和PM人员记录数="+aiTableResult.getRecords().size());
-        records = aiTableResult.getRecords();
-        for(int i=0;i<records.size();i++){
-            empRecordsFilter.add(records.getJSONObject(i));
-        }
-        JSONObject empRecord;
-        String deptId;
-        String unionIdPMLeader;
-//        System.out.println("人员列表:");
-        Map<String,Object> unionIdMap = new HashMap<>();
-        for(int i=0; i<empRecordsFilter.size(); i++){
-            fields = empRecordsFilter.getJSONObject(i).getJSONObject("fields");
-            unionIdPM = fields.getJSONArray("人员").getJSONObject(0).getString("unionId");
-            deptId = fields.getJSONObject("部门").getString("id");
-            if(fields.getJSONArray("销售组长") != null){
-                unionIdPMLeader = fields.getJSONArray("销售组长").getJSONObject(0).getString("unionId");
-            }else{
-                unionIdPMLeader = "U2puyufsTtwvfTXmWQoG0wiEiE";
-            }
-//            System.out.println("unionIdPM="+unionIdPM+",deptId="+deptId+",unionIdPMLeader="+unionIdPMLeader);
-            empRecord = new JSONObject();
-            empRecord.put("deptId",deptId);
-            empRecord.put("unionIdPMLeader",unionIdPMLeader);
-            unionIdMap.put(unionIdPM,empRecord);
-        }
-        /*
-            新增项目台账填写情况表记录
-         */
-        JSONObject insertData = new JSONObject();
-        JSONArray insertRecords = new JSONArray();
-        JSONObject insertRecord;
-        JSONArray pmLeaderJSONArray;
-        JSONObject unionIdJSONObject;
-        for(String str : checkEmptyRecordList){
-            unionIdPM = str.split("_")[0];
-            empRecord = (JSONObject) unionIdMap.get(unionIdPM);
-            fields = new JSONObject();
-            fields.put("日期", DateUtil.today());
-            unionIdJSONObject = new JSONObject();
-            unionIdJSONObject.put("unionId",unionIdPM);
-            pmJSONArray = new JSONArray();
-            pmJSONArray.add(unionIdJSONObject);
-            fields.put("负责人",pmJSONArray);
-            unionIdJSONObject = new JSONObject();
-            unionIdJSONObject.put("unionId",empRecord.getString("unionIdPMLeader"));
-            pmLeaderJSONArray = new JSONArray();
-            pmLeaderJSONArray.add(unionIdJSONObject);
-            fields.put("组长",pmLeaderJSONArray);
-            fields.put("填写情况", str.split("_")[1]);
-            insertRecord = new JSONObject();
-            insertRecord.put("fields",fields);
-//            log.info(JSON.toJSONString(insertRecord));
-            insertRecords.add(insertRecord);
-        }
-        String result;
-        JSONArray newInsertRecords;
-        sheetIdOrName = "OTgxt4G";
-        if(insertRecords.size() > 100){
-            pageNo = 1;
-            while(insertRecords.size() > 100){
-                newInsertRecords = new JSONArray();
-                records = new JSONArray();
-                for (int i = 0; i < insertRecords.size(); i++) {
-                    if(i<100){
-                        newInsertRecords.add(insertRecords.getJSONObject(i));
-                    }else{
-                        records.add(insertRecords.getJSONObject(i));
-                    }
-                }
-                insertData.put("records",newInsertRecords);
-//                log.info(JSON.toJSONString(insertData));
-                result = mdTableClient.createMultiRecords(baseId,sheetIdOrName,param,insertData);
-                log.info("新增项目台账填写情况表记录结果,第"+pageNo+"页:");
-                log.info(result);
-                insertRecords = records;
-                pageNo++;
-            }
-        }
-        if(insertRecords.size() > 0){
-            insertData.put("records",insertRecords);
-//            log.info(JSON.toJSONString(insertData));
-            sheetIdOrName = "OTgxt4G";
-            result = mdTableClient.createMultiRecords(baseId,sheetIdOrName,param,insertData);
-            log.info("新增项目台账填写情况表记录结果,第"+pageNo+"页:");
-            log.info(result);
-        }
 
 
-    }
-
 }

+ 1 - 52
src/main/java/com/malk/eastar/schedule/ScheduleTask2.java

@@ -16,7 +16,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import java.util.*;
 
 /**
- * 新的定时任务
+ * 易思达系统数据清洗定时任务
  */
 @Slf4j
 @Configuration
@@ -35,58 +35,7 @@ public class ScheduleTask2 {
 
 
 
-    /**
-     * 更新员工在职情况
-     */
-    @Scheduled(cron = "0 0 6 * * ?")
-    public void updateEmployeeStatus() {
-        log.info("更新员工在职情况");
-        /*
-            查询业务小组档案中的成员信息
-         */
-        List<Map> ltcBusinessUserData = new ArrayList<>();
-        try {
-            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);
-            if(leaveEmployeeData.isEmpty()){
-                log.info("最近一周没有人员离职");
-            }else{
-                log.info("最近一周有离职人员");
-                log.info(JSONObject.toJSONString(leaveEmployeeData));
-            }
-        } catch (Exception e) {
-            log.error("查询最近一周的离职人员异常",e);
-        }
-        try {
-            /*
-                业务员已离职,更新状态
-             */
-            if(!leaveEmployeeData.isEmpty()){
-                for (Map bu : ltcBusinessUserData){
-                    for (int i = 0; i < leaveEmployeeData.size(); i++) {
-                        if(UtilMap.getString(bu, "userId").equals(UtilMap.getString(leaveEmployeeData.get(i), "userId"))){
-                            yidaService.setLtcBusinessUserLeave(UtilMap.getString(bu, "formInstId"));
-                            log.info("更新业务小组档案[userId={}]记录在职情况为已离职",UtilMap.getString(bu, "userId"));
-                            break;
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            log.error("更新员工在职情况异常",e);
-        }
-    }
 
     /**
      * 客户数据清洗

+ 1 - 149
src/main/java/com/malk/eastar/schedule/ScheduleTask3.java

@@ -19,7 +19,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 新的定时任务
+ * 易思达系统数据清洗定时任务
  */
 @Slf4j
 @Configuration
@@ -269,154 +269,6 @@ public class ScheduleTask3 {
 
     }
 
-    /**
-     * 同步销售项目整体阶段
-     */
-    @Scheduled(cron = "0 0 5 * * ?")
-    public void syncOppotunityStage() {
-        //查询所有销售项目
-        Map params = null;
-        List<Map> ltcSaleProjectData = new ArrayList<>();
-        try {
-            log.info("查询销售台账记录");
-            params = new HashMap<>();
-            ltcSaleProjectData = yidaService.queryLtcSaleProjectData(params);
-        } catch (Exception e) {
-            log.error("查询销售台账记录异常",e);
-        }
-        //获取所有AI表格映射ID不为空的销售项目
-        String aitableId;
-        String projectName;
-        String projectStage;
-        List<Map<String,String>> yidaProjectData = new ArrayList<>();
-        Map<String,String> yidaProjectRecord;
-        if(ltcSaleProjectData != null && !ltcSaleProjectData.isEmpty()){
-            for(Map saleProjectRecord : ltcSaleProjectData){
-                if(saleProjectRecord.get("aiTableId")!=null){
-                    aitableId = saleProjectRecord.get("aiTableId").toString();
-                    projectName = saleProjectRecord.get("projectName").toString();
-                    projectStage = saleProjectRecord.get("projectStage").toString();
-                    if("S1:线索".equals(projectStage)){
-                        projectStage = "未来预测";
-                    }else if("S2:商机".equals(projectStage)){
-                        projectStage = "RFQ";
-                    }else if("S3:已签单".equals(projectStage)){
-                        projectStage = "已成单";
-                    }else if("特殊:已丢单".equals(projectStage)){
-                        projectStage = "已丢单";
-                    }
-//                    System.out.println(aitableId+" "+projectName+" "+projectStage);
-                    yidaProjectRecord = new HashMap<>();
-                    yidaProjectRecord.put("aiTableId",aitableId);
-                    yidaProjectRecord.put("projectName",projectName);
-                    yidaProjectRecord.put("projectStage",projectStage);
-                    yidaProjectData.add(yidaProjectRecord);
-                }
-
-            }
-        }
-
-        //查询所有AI表格已成单【表1】售前台账数据
-        List<Map> saleData = new ArrayList<>();
-        try {
-            log.info("查询【表1】售前台账记录");
-            params = new HashMap<>();
-            saleData = aitableService.querySys1SaleData(params);
-        } catch (Exception e) {
-            log.error("查询售前台账数据异常",e);
-        }
-
-
-        //更新与宜搭不一致的AI表格数据
-        Map<String,Object> fields;
-        boolean isUpdate;
-        for(Map<String,String> ydMap : yidaProjectData){
-            for (int i = 0; i < saleData.size(); i++) {
-                if(ydMap.get("aiTableId").equals(saleData.get(i).get("aiTableId"))){
-                    isUpdate = false;
-                    if(!ydMap.get("projectStage").equals(saleData.get(i).get("projectStage"))){
-                        if(StringUtils.isEmpty(saleData.get(i).get("projectStage").toString())){
-                            isUpdate = true;
-                            log.info("更新AI表格数据,项目名称="+ydMap.get("projectName")+",整体项目阶段:"+saleData.get(i).get("projectStage")+" -> "+ydMap.get("projectStage"));
-                        }
-                        if("未来预测".equals(saleData.get(i).get("projectStage").toString()) && "RFQ".equals(ydMap.get("projectStage"))){
-                            isUpdate = true;
-                            log.info("更新AI表格数据,项目名称="+ydMap.get("projectName")+",整体项目阶段:"+saleData.get(i).get("projectStage")+" -> "+ydMap.get("projectStage"));
-                        }
-                        if("RFQ".equals(saleData.get(i).get("projectStage").toString()) && "已成单".equals(ydMap.get("projectStage"))){
-                            isUpdate = true;
-                            log.info("更新AI表格数据,项目名称="+ydMap.get("projectName")+",整体项目阶段:"+saleData.get(i).get("projectStage")+" -> "+ydMap.get("projectStage"));
-                        }
-                    }
-                    if(isUpdate){
-                        aitableId = ydMap.get("aiTableId");
-                        fields = new HashMap<>();
-                        fields.put("LQF6OWD",ydMap.get("projectStage"));   //原PI号
-                        try {
-                            log.info("更新销售台账记录");
-                            log.info("aitableId="+aitableId);
-                            log.info(JSONObject.toJSONString(fields));
-                            aitableService.updateSys1SaleData(aitableId,fields);
-                            Thread.sleep(3000);
-                        } catch (Exception e) {
-                            log.error("更新销售台账记录异常",e);
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-
-        log.info("同步销售项目整体阶段完成");
-
-    }
-
-    /**
-     * 同步销售项目AI表格映射ID
-     */
-    @Scheduled(cron = "0 30 5 * * ?")
-    public void syncOppotunityAiTableId() {
-        //查询所有销售项目
-        Map params = null;
-        List<Map> ltcSaleProjectData = new ArrayList<>();
-        try {
-            log.info("查询销售台账记录");
-            params = new HashMap<>();
-            ltcSaleProjectData = yidaService.queryLtcSaleProjectData(params);
-        } catch (Exception e) {
-            log.error("查询销售台账记录异常",e);
-        }
-        //查询所有AI表格已成单【表1】售前台账数据
-        List<Map> saleData = new ArrayList<>();
-        try {
-            log.info("查询【表1】售前台账记录");
-            params = new HashMap<>();
-            saleData = aitableService.querySys1SaleData(params);
-        } catch (Exception e) {
-            log.error("查询售前台账数据异常",e);
-        }
-
-        //对比找出不一致的
-        for(Map<String,String> ydMap : ltcSaleProjectData){
-            for (int i = 0; i < saleData.size(); i++) {
-                if(ydMap.get("projectCode").equals(saleData.get(i).get("projectCode"))){
-                    if(!ydMap.get("aiTableId").equals(saleData.get(i).get("aiTableId"))){
-                        log.info("不一致:"+ydMap.get("projectCode")+" "+ydMap.get("projectName")+" "+ydMap.get("aiTableId")+" "+saleData.get(i).get("aiTableId"));
-                        try {
-                            log.info("更新销售台账记录");
-                            yidaService.updateSaleProjectRelatedAitableId(ydMap.get("formInstId"), saleData.get(i).get("aiTableId").toString());
-                            Thread.sleep(3000);
-                        } catch (Exception e) {
-                            log.error("更新销售台账记录异常",e);
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-
-    }
-
 
 
     /**

Разница между файлами не показана из-за своего большого размера
+ 235 - 2638
src/main/java/com/malk/eastar/schedule/ScheduleTask4.java


Разница между файлами не показана из-за своего большого размера
+ 3596 - 40
src/main/java/com/malk/eastar/schedule/ScheduleTask5.java


+ 143 - 16
src/main/java/com/malk/eastar/schedule/ScheduleTask6.java

@@ -1,8 +1,10 @@
 package com.malk.eastar.schedule;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.eastar.service.DDCoreClient;
 import com.malk.eastar.service.YidaService;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -10,10 +12,7 @@ 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.util.*;
 
 /**
  * 易思达系统数据计算定时任务
@@ -31,14 +30,18 @@ public class ScheduleTask6 {
     private DDCoreClient ddCoreClient;
 
     /**
-     * 计算试用期业务员前3个月RFQ数量
+     * 计算试用期业务员RFQ数量和成单额
      * ABC级客户的RFQ量+DE级客户3W美金以上的RFQ量≥6个,自主开发,不含公司分配
+     * 试用期成单额,下单额≥5W美金
      */
-//    @Scheduled(cron = "0 46 17 * * ?")
+    @Scheduled(cron = "0 18 8 1/1 * ?")
     public void calculateNumOfRFQ() {
+        log.info("计算试用期业务员RFQ数量和成单额开始");
+
         /*
             查询新业务员培养记录
          */
+        log.info("查询新业务员培养记录");
         List<Map> newBusinessUserData = new ArrayList<>();
         try {
             newBusinessUserData = yidaService.queryLtcNewBusinessUserData();
@@ -47,42 +50,166 @@ public class ScheduleTask6 {
             log.error("查询新业务员培养记录异常",e);
         }
 
+        /*
+            查询(易思达)客户名册所有记录
+         */
+        log.info("查询(易思达)客户名册所有记录");
+        List<Map> ltcCustomerData = new ArrayList<>();
+        try {
+            ltcCustomerData = yidaService.queryLtcAllCustomerData();
+            log.info("客户名册记录数量="+ltcCustomerData.size());
+        } catch (Exception e) {
+            log.error("查询(易思达)客户名册异常",e);
+        }
+
         //筛选销售项目数据
         Map params = new HashMap<>();
         String formInstId = "";
         String newBusinessUserId = "";
+        String customerCode; //客户编号
+        String customerLevel;  //客户当前分级
+        String customerPotentialLevel; //客户潜在等级
+        Double projectAmount; //项目金额
+        Double projectAmountTotal; //项目金额(总计)
         List<Map> ltcSaleProjectData = new ArrayList<>();
         int numOfRFQ = 0;
         for(Map newBusinessUserRecord : newBusinessUserData){
             try {
                 formInstId = newBusinessUserRecord.get("formInstId").toString();
                 newBusinessUserId = newBusinessUserRecord.get("newBusinessUserId").toString();
+                log.info("新业务员ID:"+newBusinessUserId);
+                log.info("新业务员姓名:"+ddCoreClient.getNameByUserId(newBusinessUserId));
+                log.info("入职日期:"+newBusinessUserRecord.get("employmentDate"));
+                log.info("3个月考核截止日期:"+newBusinessUserRecord.get("deadline"));
                 params = new HashMap<>();
                 params.put("businessUserId",newBusinessUserId);
                 params.put("rfqDateAfter",newBusinessUserRecord.get("employmentDate"));
                 params.put("deadline",newBusinessUserRecord.get("deadline"));
                 params.put("testUse","否");
                 params.put("rfqFrom","自主开发");
-                log.info("筛选销售项目数据");
+                log.info("筛选销售项目数据(RFQ)");
+                numOfRFQ = 0;
+                ltcSaleProjectData = yidaService.queryLtcSaleProjectData(params);
+                if(ltcSaleProjectData.size()>0){
+                    System.out.println(JSONObject.toJSONString(ltcSaleProjectData));
+                    for(Map ltcSaleProjectRecord : ltcSaleProjectData){
+                        customerCode = ltcSaleProjectRecord.get("customerCode").toString();
+                        projectAmount = null;
+                        if(ltcSaleProjectRecord.get("projectAmount") != null){
+                            projectAmount = Double.parseDouble(ltcSaleProjectRecord.get("projectAmount").toString());
+                        }
+                        for(int i=0;i<ltcCustomerData.size();i++){
+                            if (customerCode.equals(ltcCustomerData.get(i).get("customerCode"))){
+                                customerLevel = ltcCustomerData.get(i).get("customerLevel").toString();
+                                customerPotentialLevel = ltcCustomerData.get(i).get("customerPotentialLevel").toString();
+                                if(customerLevel.contains("A") || customerLevel.contains("B") || customerLevel.contains("C")
+                                    || customerPotentialLevel.contains("潜A") || customerPotentialLevel.contains("潜B") || customerPotentialLevel.contains("潜C")){
+                                    numOfRFQ++;
+                                }else if(projectAmount!=null && projectAmount>=30000){
+                                    numOfRFQ++;
+                                }
+                                break;
+                            }
+                        }
+                    }
+                    Thread.sleep(3000);
+                }else{
+                    log.info("无符合条件的销售项目数据");
+                }
+                log.info("RFQ数量="+numOfRFQ);
+
+                log.info("试用期结束日期:"+newBusinessUserRecord.get("confirmationDate"));
+                params = new HashMap<>();
+                params.put("businessUserId",newBusinessUserId);
+                params.put("actualOrderBeginDate",newBusinessUserRecord.get("employmentDate"));
+                params.put("actualOrderEndDate",newBusinessUserRecord.get("confirmationDate"));
+                params.put("testUse","否");
+                log.info("筛选销售项目数据(成单)");
+                projectAmountTotal = 0.0;
                 ltcSaleProjectData = yidaService.queryLtcSaleProjectData(params);
                 if(ltcSaleProjectData.size()>0){
                     System.out.println(JSONObject.toJSONString(ltcSaleProjectData));
-                    numOfRFQ = ltcSaleProjectData.size();
-                    log.info("新业务员ID:"+newBusinessUserId);
-                    log.info("新业务员姓名:"+ddCoreClient.getNameByUserId(newBusinessUserId));
-                    log.info("入职日期:"+newBusinessUserRecord.get("employmentDate"));
-                    log.info("3个月考核截止日期:"+newBusinessUserRecord.get("deadline"));
-                    log.info("RFQ数量="+numOfRFQ);
-                    log.info("更新前3个月RFQ数量");
-                    yidaService.updateLtcNewBusinessUserRecord(formInstId,numOfRFQ);
+                    for(Map ltcSaleProjectRecord : ltcSaleProjectData){
+                        projectAmount = null;
+                        if(ltcSaleProjectRecord.get("projectAmount") != null){
+                            projectAmount = Double.parseDouble(ltcSaleProjectRecord.get("projectAmount").toString());
+                            if("是".equals(ltcSaleProjectRecord.get("clearLevelFlag"))){ //是计算为通关项目
+                                projectAmountTotal += projectAmount;
+                            }else{
+                                System.out.println("非通关项目,不计算在内:"+projectAmount);
+                            }
+
+                        }
+                    }
                     Thread.sleep(3000);
+                }else{
+                    log.info("无符合条件的销售项目数据");
                 }
+                projectAmountTotal = projectAmountTotal/10000; //单位:万美元
+                log.info("试用期成单额="+projectAmountTotal);
+                log.info("更新前3个月RFQ数量和试用期成单额");
+                yidaService.updateLtcNewBusinessUserRecord(formInstId,numOfRFQ,projectAmountTotal);
+
             } catch (Exception e) {
                 log.error("计算RFQ数量异常",e);
             }
         }
 
-        log.info("计算试用期业务员前3个月RFQ数量完成");
+        log.info("计算试用期业务员RFQ数量和成单额完成");
+    }
+
+    /**
+     * 更新员工在职情况
+     */
+    @Scheduled(cron = "0 0 6 * * ?")
+    public void updateEmployeeStatus() {
+        log.info("更新员工在职情况开始");
+        /*
+            查询业务小组档案中的成员信息
+         */
+        List<Map> ltcBusinessUserData = new ArrayList<>();
+        try {
+            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);
+            if(leaveEmployeeData.isEmpty()){
+                log.info("最近一周没有人员离职");
+            }else{
+                log.info("最近一周有离职人员");
+                log.info(JSONObject.toJSONString(leaveEmployeeData));
+            }
+        } catch (Exception e) {
+            log.error("查询最近一周的离职人员异常",e);
+        }
+        try {
+            /*
+                业务员已离职,更新状态
+             */
+            if(!leaveEmployeeData.isEmpty()){
+                for (Map bu : ltcBusinessUserData){
+                    for (int i = 0; i < leaveEmployeeData.size(); i++) {
+                        if(UtilMap.getString(bu, "userId").equals(UtilMap.getString(leaveEmployeeData.get(i), "userId"))){
+                            yidaService.setLtcBusinessUserLeave(UtilMap.getString(bu, "formInstId"));
+                            log.info("更新业务小组档案[userId={}]记录在职情况为已离职",UtilMap.getString(bu, "userId"));
+                            break;
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("更新员工在职情况异常",e);
+        }
+        log.info("更新员工在职情况完成");
     }
 
 }

+ 354 - 0
src/main/java/com/malk/eastar/schedule/ScheduleTask7.java

@@ -0,0 +1,354 @@
+package com.malk.eastar.schedule;
+
+import com.malk.eastar.service.AitableService;
+import com.malk.eastar.service.YidaService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+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;
+
+/**
+ * 易思达系统数据同步定时任务(项目总表 → 易思达系统)
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class ScheduleTask7 {
+
+    @Autowired
+    private YidaService yidaService;
+
+    @Autowired
+    private AitableService aitableService;
+
+
+    /**
+     * 同步售前台账数据到新系统
+     * 订单金额、预计成单日期、实际成单日期
+     */
+    @Scheduled(cron = "0 18 9-22 * * ?")
+    public void syncSaleProjectOrderData() {
+        log.info("同步售前台账数据到新系统(订单金额、预计成单日期、实际成单日期)开始");
+
+        /*
+            查询易思达系统销售项目数据
+         */
+        log.info("查询易思达系统销售项目数据");
+        List<Map> ltcSaleProjectList = new ArrayList<>();
+        try {
+            ltcSaleProjectList = yidaService.queryLtcAllSaleProjectData();
+            log.info("易思达系统销售项目记录数量="+ltcSaleProjectList.size());
+        } catch (Exception e) {
+            log.error("查询易思达系统销售项目数据异常",e);
+        }
+
+        /*
+            查询项目总表售前台账数据
+         */
+        log.info("查询项目总表售前台账数据");
+        List<Map> sys1SaleData = new ArrayList<>();
+        try {
+            sys1SaleData = aitableService.querySys1AllSaleData();
+            log.info("项目总表售前台账记录数量="+sys1SaleData.size());
+        } catch (Exception e) {
+            log.error("查询所有项目总表售前台账数据异常",e);
+        }
+
+        /*
+            筛选订单金额、预计成单日期、实际成单日期不为空的数据
+         */
+        List<Map> sys1SaleDataFilter = new ArrayList<>();
+        for (Map sys1SaleDataItem : sys1SaleData) {
+            if (sys1SaleDataItem.get("projectAmount") != null
+                    || sys1SaleDataItem.get("expectedCloseDate") != null
+                    || sys1SaleDataItem.get("actualCloseDate") != null) {
+                sys1SaleDataFilter.add(sys1SaleDataItem);
+            }
+        }
+        log.info("项目总表售前台账筛选后的记录数量="+sys1SaleDataFilter.size());
+
+        /*
+            比较两边的差异
+         */
+        boolean isDifferent;
+        int count = 0;
+        String formInstId;
+        String projectCode;
+        String projectName;
+        String aiTableId;
+        Double projectAmount1;
+        Double projectAmount2;
+        Long estimatedOrderDate1;
+        Long estimatedOrderDate2;
+        Long actualOrderDate1;
+        Long actualOrderDate2;
+        log.info("开始比较数据差异");
+        for (Map ltcSaleProjectRecord : ltcSaleProjectList){
+            isDifferent = false;
+            if("否".equals(ltcSaleProjectRecord.get("testFlag"))){ //非测试使用
+                formInstId = ltcSaleProjectRecord.get("formInstId").toString();
+                projectCode = ltcSaleProjectRecord.get("projectCode").toString();
+                projectName = ltcSaleProjectRecord.get("projectName").toString();
+                aiTableId = ltcSaleProjectRecord.get("aiTableId").toString();
+                for (int i = 0; i < sys1SaleDataFilter.size(); i++) {
+                    if(aiTableId.equals(sys1SaleDataFilter.get(i).get("aiTableId"))){
+                        projectAmount1 = null;
+                        projectAmount2 = null;
+                        estimatedOrderDate1 = null;
+                        estimatedOrderDate2 = null;
+                        actualOrderDate1 = null;
+                        actualOrderDate2 = null;
+                        //比较订单金额
+                        if(ltcSaleProjectRecord.get("projectAmount") != null){
+                            projectAmount1 = Double.parseDouble(ltcSaleProjectRecord.get("projectAmount").toString());
+                            if(sys1SaleDataFilter.get(i).get("projectAmount") != null){
+                                projectAmount2 = Double.parseDouble(sys1SaleDataFilter.get(i).get("projectAmount").toString());
+                                if(!projectAmount1.equals(projectAmount2)){
+                                    isDifferent = true;
+                                }
+                            }else{
+                                isDifferent = true;
+                            }
+                        }else{
+                            if(sys1SaleDataFilter.get(i).get("projectAmount") != null){
+                                projectAmount2 = Double.parseDouble(sys1SaleDataFilter.get(i).get("projectAmount").toString());
+                                isDifferent = true;
+                            }
+                        }
+
+                        //比较预计成单日期
+                        if(ltcSaleProjectRecord.get("yidaEstimatedOrderDate") != null){
+                            estimatedOrderDate1 = Long.parseLong(ltcSaleProjectRecord.get("yidaEstimatedOrderDate").toString());
+                            if(sys1SaleDataFilter.get(i).get("expectedCloseDate") != null){
+                                estimatedOrderDate2 = Long.parseLong(sys1SaleDataFilter.get(i).get("expectedCloseDate").toString());
+                                if(!estimatedOrderDate1.equals(estimatedOrderDate2)){
+                                    isDifferent = true;
+                                }
+                            }else{
+                                isDifferent = true;
+                            }
+                        }else{
+                            if(sys1SaleDataFilter.get(i).get("expectedCloseDate") != null){
+                                estimatedOrderDate2 = Long.parseLong(sys1SaleDataFilter.get(i).get("expectedCloseDate").toString());
+                                isDifferent = true;
+                            }
+                        }
+
+                        //比较实际成单日期
+                        if(ltcSaleProjectRecord.get("yidaActualOrderDate") != null){
+                            actualOrderDate1 = Long.parseLong(ltcSaleProjectRecord.get("yidaActualOrderDate").toString());
+                            if(sys1SaleDataFilter.get(i).get("actualCloseDate") != null){
+                                actualOrderDate2 = Long.parseLong(sys1SaleDataFilter.get(i).get("actualCloseDate").toString());
+                                if(!actualOrderDate1.equals(actualOrderDate2)){
+                                    isDifferent = true;
+                                }
+                            }else{
+                                isDifferent = true;
+                            }
+                        }else{
+                            if(sys1SaleDataFilter.get(i).get("actualCloseDate") != null){
+                                actualOrderDate2 = Long.parseLong(sys1SaleDataFilter.get(i).get("actualCloseDate").toString());
+                                isDifferent = true;
+                            }
+                        }
+
+                        if(isDifferent){
+                            log.info("projectCode="+projectCode+" projectName="+projectName);
+                            log.info("projectAmount:"+projectAmount1+"->"+projectAmount2);
+                            log.info("estimatedOrderDate:"+estimatedOrderDate1+"->"+estimatedOrderDate2);
+                            log.info("actualOrderDate:"+actualOrderDate1+"->"+actualOrderDate2);
+                            log.info("更新易思达系统销售项目订单信息");
+                            try {
+                                yidaService.updateLtcSaleProjectOrderInfo(formInstId,projectAmount2,estimatedOrderDate2,actualOrderDate2,"是");
+                                log.info("更新成功,暂停10秒钟后更新从项目总表同步标识为否(标识为是时不会触发宜搭自动化)");
+                                Thread.sleep(10000);
+                                yidaService.updateLtcSaleProjectOrderInfo(formInstId,null,null,null,"否");
+                            } catch (Exception e) {
+                                log.error("更新易思达系统销售项目数据异常",e);
+                            }
+                            count++;
+                        }
+
+                        break;
+                    }
+                }
+            }
+
+        }
+
+        log.info("差异数量="+count);
+
+        log.info("同步售前台账数据到新系统(订单金额、预计成单日期、实际成单日期)完成");
+    }
+
+
+    /**
+     * 同步售前台账数据到新系统
+     * 是否计算为通关项目
+     */
+    @Scheduled(cron = "0 46 7 1/1 * ?")
+    public void syncSaleProjectClearLevelData() {
+        log.info("同步售前台账数据到新系统(是否计算为通关项目)开始");
+
+        /*
+            查询易思达系统销售项目数据
+         */
+        log.info("查询易思达系统销售项目数据");
+        List<Map> ltcSaleProjectList = new ArrayList<>();
+        try {
+            ltcSaleProjectList = yidaService.queryLtcAllSaleProjectData();
+            log.info("易思达系统销售项目记录数量="+ltcSaleProjectList.size());
+        } catch (Exception e) {
+            log.error("查询易思达系统销售项目数据异常",e);
+        }
+
+        /*
+            查询项目总表售前台账数据
+         */
+        log.info("查询项目总表售前台账数据");
+        List<Map> sys1SaleData = new ArrayList<>();
+        try {
+            sys1SaleData = aitableService.querySys1AllSaleData();
+            log.info("项目总表售前台账记录数量="+sys1SaleData.size());
+        } catch (Exception e) {
+            log.error("查询所有项目总表售前台账数据异常",e);
+        }
+
+        /*
+            筛选是否计算为通关项目不为空的数据
+         */
+        List<Map> sys1SaleDataFilter = new ArrayList<>();
+        for (Map sys1SaleDataItem : sys1SaleData) {
+            if (sys1SaleDataItem.get("clearLevelFlag") != null) {
+                sys1SaleDataFilter.add(sys1SaleDataItem);
+            }
+        }
+        log.info("项目总表售前台账筛选后的记录数量="+sys1SaleDataFilter.size());
+
+        /*
+            比较两边的差异
+         */
+        boolean isDifferent;
+        int count = 0;
+        String formInstId;
+        String projectCode;
+        String projectName;
+        String aiTableId;
+        String flag1;
+        String flag2;
+        log.info("开始比较数据差异");
+        for (Map ltcSaleProjectRecord : ltcSaleProjectList){
+            isDifferent = false;
+            if("否".equals(ltcSaleProjectRecord.get("testFlag"))){ //非测试使用
+                formInstId = ltcSaleProjectRecord.get("formInstId").toString();
+                projectCode = ltcSaleProjectRecord.get("projectCode").toString();
+                projectName = ltcSaleProjectRecord.get("projectName").toString();
+                aiTableId = ltcSaleProjectRecord.get("aiTableId").toString();
+                for (int i = 0; i < sys1SaleDataFilter.size(); i++) {
+                    if(aiTableId.equals(sys1SaleDataFilter.get(i).get("aiTableId"))){
+                        flag1 = null;
+                        flag2 = null;
+
+                        //比较是否计算为通关项目
+                        if(ltcSaleProjectRecord.get("clearLevelFlag") != null){
+                            flag1 = ltcSaleProjectRecord.get("clearLevelFlag").toString();
+                            if(sys1SaleDataFilter.get(i).get("clearLevelFlag") != null){
+                                flag2 = sys1SaleDataFilter.get(i).get("clearLevelFlag").toString();
+                                if(!flag1.equals(flag2)){
+                                    isDifferent = true;
+                                }
+                            }else{
+                                isDifferent = true;
+                            }
+                        }else{
+                            if(sys1SaleDataFilter.get(i).get("clearLevelFlag") != null){
+                                flag2 = sys1SaleDataFilter.get(i).get("clearLevelFlag").toString();
+                                isDifferent = true;
+                            }
+                        }
+
+                        if(isDifferent){
+                            log.info("projectCode="+projectCode+" projectName="+projectName);
+                            log.info("clearLevelFlag:"+flag1+"->"+flag2);
+                            if(flag2 != null){
+                                log.info("更新易思达系统销售项目数据");
+                                try {
+                                    yidaService.updateLtcSaleProjectClearLevel(formInstId,flag2);
+                                    Thread.sleep(3000);
+                                } catch (Exception e) {
+                                    log.error("更新易思达系统销售项目数据异常",e);
+                                }
+                            }
+                            count++;
+                        }
+
+                        break;
+                    }
+                }
+            }
+
+        }
+
+        log.info("差异数量="+count);
+
+        log.info("同步售前台账数据到新系统(是否计算为通关项目)完成");
+    }
+
+
+    /**
+     * 同步售前台账数据到新系统
+     * AI表格映射ID
+     */
+    @Scheduled(cron = "0 30 5 * * ?")
+    public void syncOppotunityAiTableId() {
+        log.info("同步售前台账数据到新系统(AI表格映射ID)开始");
+        //查询所有销售项目
+        Map params = null;
+        List<Map> ltcSaleProjectData = new ArrayList<>();
+        try {
+            log.info("查询销售台账记录");
+            params = new HashMap<>();
+            ltcSaleProjectData = yidaService.queryLtcSaleProjectData(params);
+        } catch (Exception e) {
+            log.error("查询销售台账记录异常",e);
+        }
+        //查询所有AI表格已成单【表1】售前台账数据
+        List<Map> saleData = new ArrayList<>();
+        try {
+            log.info("查询【表1】售前台账记录");
+            params = new HashMap<>();
+            saleData = aitableService.querySys1SaleData(params);
+        } catch (Exception e) {
+            log.error("查询售前台账数据异常",e);
+        }
+
+        //对比找出不一致的
+        for(Map<String,String> ydMap : ltcSaleProjectData){
+            for (int i = 0; i < saleData.size(); i++) {
+                if(ydMap.get("projectCode").equals(saleData.get(i).get("projectCode"))){
+                    if(!ydMap.get("aiTableId").equals(saleData.get(i).get("aiTableId"))){
+                        log.info("不一致:"+ydMap.get("projectCode")+" "+ydMap.get("projectName")+" "+ydMap.get("aiTableId")+" "+saleData.get(i).get("aiTableId"));
+                        try {
+                            log.info("更新销售台账记录");
+                            yidaService.updateSaleProjectRelatedAitableId(ydMap.get("formInstId"), saleData.get(i).get("aiTableId").toString());
+                            Thread.sleep(3000);
+                        } catch (Exception e) {
+                            log.error("更新销售台账记录异常",e);
+                        }
+                    }
+                    break;
+                }
+            }
+        }
+        log.info("同步售前台账数据到新系统(AI表格映射ID)结束");
+    }
+
+}

+ 142 - 0
src/main/java/com/malk/eastar/schedule/ScheduleTask8.java

@@ -0,0 +1,142 @@
+package com.malk.eastar.schedule;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.eastar.service.AitableService;
+import com.malk.eastar.service.YidaService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+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;
+
+/**
+ * 易思达系统数据同步定时任务(易思达系统 → 项目总表)
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class ScheduleTask8 {
+
+    @Autowired
+    private YidaService yidaService;
+
+    @Autowired
+    private AitableService aitableService;
+
+
+    /**
+     * 同步销售项目数据到项目总表
+     * 销售项目整体阶段
+     */
+    @Scheduled(cron = "0 0 5 * * ?")
+    public void syncOppotunityStage() {
+        log.info("同步销售项目数据到项目总表(销售项目整体阶段)开始");
+
+        //查询所有销售项目
+        Map params = null;
+        List<Map> ltcSaleProjectData = new ArrayList<>();
+        try {
+            log.info("查询销售台账记录");
+            params = new HashMap<>();
+            ltcSaleProjectData = yidaService.queryLtcSaleProjectData(params);
+        } catch (Exception e) {
+            log.error("查询销售台账记录异常",e);
+        }
+        //获取所有AI表格映射ID不为空的销售项目
+        String aitableId;
+        String projectName;
+        String projectStage;
+        List<Map<String,String>> yidaProjectData = new ArrayList<>();
+        Map<String,String> yidaProjectRecord;
+        if(ltcSaleProjectData != null && !ltcSaleProjectData.isEmpty()){
+            for(Map saleProjectRecord : ltcSaleProjectData){
+                if(saleProjectRecord.get("aiTableId")!=null){
+                    aitableId = saleProjectRecord.get("aiTableId").toString();
+                    projectName = saleProjectRecord.get("projectName").toString();
+                    projectStage = saleProjectRecord.get("projectStage").toString();
+                    if("S1:线索".equals(projectStage)){
+                        projectStage = "未来预测";
+                    }else if("S2:商机".equals(projectStage)){
+                        projectStage = "RFQ";
+                    }else if("S3:已签单".equals(projectStage)){
+                        projectStage = "已成单";
+                    }else if("特殊:已丢单".equals(projectStage)){
+                        projectStage = "已丢单";
+                    }
+//                    System.out.println(aitableId+" "+projectName+" "+projectStage);
+                    yidaProjectRecord = new HashMap<>();
+                    yidaProjectRecord.put("aiTableId",aitableId);
+                    yidaProjectRecord.put("projectName",projectName);
+                    yidaProjectRecord.put("projectStage",projectStage);
+                    yidaProjectData.add(yidaProjectRecord);
+                }
+
+            }
+        }
+
+        //查询所有AI表格已成单【表1】售前台账数据
+        List<Map> saleData = new ArrayList<>();
+        try {
+            log.info("查询【表1】售前台账记录");
+            params = new HashMap<>();
+            saleData = aitableService.querySys1SaleData(params);
+        } catch (Exception e) {
+            log.error("查询售前台账数据异常",e);
+        }
+
+
+        //更新与宜搭不一致的AI表格数据
+        Map<String,Object> fields;
+        boolean isUpdate;
+        for(Map<String,String> ydMap : yidaProjectData){
+            for (int i = 0; i < saleData.size(); i++) {
+                if(ydMap.get("aiTableId").equals(saleData.get(i).get("aiTableId"))){
+                    isUpdate = false;
+                    if(!ydMap.get("projectStage").equals(saleData.get(i).get("projectStage"))){
+                        if(StringUtils.isEmpty(saleData.get(i).get("projectStage").toString())){
+                            isUpdate = true;
+                            log.info("更新AI表格数据,项目名称="+ydMap.get("projectName")+",整体项目阶段:"+saleData.get(i).get("projectStage")+" -> "+ydMap.get("projectStage"));
+                        }
+                        if("未来预测".equals(saleData.get(i).get("projectStage").toString()) && "RFQ".equals(ydMap.get("projectStage"))){
+                            isUpdate = true;
+                            log.info("更新AI表格数据,项目名称="+ydMap.get("projectName")+",整体项目阶段:"+saleData.get(i).get("projectStage")+" -> "+ydMap.get("projectStage"));
+                        }
+                        if("RFQ".equals(saleData.get(i).get("projectStage").toString()) && "已成单".equals(ydMap.get("projectStage"))){
+                            isUpdate = true;
+                            log.info("更新AI表格数据,项目名称="+ydMap.get("projectName")+",整体项目阶段:"+saleData.get(i).get("projectStage")+" -> "+ydMap.get("projectStage"));
+                        }
+                    }
+                    if(isUpdate){
+                        aitableId = ydMap.get("aiTableId");
+                        fields = new HashMap<>();
+                        fields.put("LQF6OWD",ydMap.get("projectStage"));   //原PI号
+                        try {
+                            log.info("更新销售台账记录");
+                            log.info("aitableId="+aitableId);
+                            log.info(JSONObject.toJSONString(fields));
+                            aitableService.updateSys1SaleData(aitableId,fields);
+                            Thread.sleep(3000);
+                        } catch (Exception e) {
+                            log.error("更新销售台账记录异常",e);
+                        }
+                    }
+                    break;
+                }
+            }
+        }
+
+        log.info("同步销售项目数据到项目总表(销售项目整体阶段)完成");
+    }
+
+
+
+
+}

+ 18 - 3
src/main/java/com/malk/eastar/service/YidaService.java

@@ -27,16 +27,21 @@ public interface YidaService {
 
 
     /**
-     * 获取易思达系统中的所有记录(业务小组档案)
+     * 获取易思达系统中的所有记录(业务档案)
      * @return
      */
     List<Map> queryLtcAllBusinessUserData() throws Exception;
 
     /**
-     * 更新业务人员在职状态为已离职(业务小组档案)
+     * 更新业务人员在职状态为已离职(业务档案)
      */
     void setLtcBusinessUserLeave(String formInstId) throws Exception;
 
+    /**
+     * 更新业务员私海客户数量(业务员档案)
+     */
+    void updateLtcBusinessUserPrivateCustomerNum(String formInstId, int numOfPrivateCustomer) throws Exception;
+
     /**
      * 获取易思达系统中的所有记录(客户名册)
      */
@@ -76,7 +81,7 @@ public interface YidaService {
     /**
      * 更新易思达系统中的新业务员培养记录
      */
-    void updateLtcNewBusinessUserRecord(String formInstId, int numOfRFQ) throws Exception;
+    void updateLtcNewBusinessUserRecord(String formInstId, int numOfRFQ, Double projectAmountTotal) throws Exception;
 
     /**
      * 获取易思达系统中的项目编号
@@ -171,6 +176,16 @@ public interface YidaService {
      */
     void updateLtcSaleProjectRfqDate(String formInstId, Long rfqDate) throws Exception;
 
+    /**
+     * 更新易思达系统销售项目订单信息
+     */
+    void updateLtcSaleProjectOrderInfo(String formInstId, Double projectAmount, Long estimatedOrderDate, Long actualOrderDate, String syncFlag) throws Exception;
+
+    /**
+     * 更新易思达系统销售项目是否计算为通关项目
+     */
+    void updateLtcSaleProjectClearLevel(String formInstId, String clearLevelFlag) throws Exception;
+
     /**
      * 插入易思达系统中的一行记录(客户名册)
      */

+ 26 - 4
src/main/java/com/malk/eastar/service/impl/AitableServiceImpl.java

@@ -295,8 +295,10 @@ public class AitableServiceImpl implements AitableService {
         Long actualCloseDate;   //实际成单日期
         JSONArray unionIdJSONArray;  //业务 - S1【人事】
         String unionId;  //业务员ID
-
-
+        String clearLevelFlag;  //是否计算为通关项目
+        String dealStatus;  //成单状态
+        String orderStatus;  //订单状态
+        String opportunityStatus;  //商机阶段
 
         /*
             项目总表 - 【表1】售前台账
@@ -349,11 +351,15 @@ public class AitableServiceImpl implements AitableService {
             projectName = "";
             projectEnName = "";
             pName = "";
-            projectAmount = null;
             customerId = "";
+            unionId = "";
+            projectAmount = null;
             expectedCloseDate = null;
             actualCloseDate = null;
-            unionId = "";
+            clearLevelFlag = null;
+            dealStatus = null;
+            orderStatus = null;
+            opportunityStatus = null;
 
             //获取AI表格ID
             aiTableId = allRecords.getJSONObject(i).getString("id");
@@ -407,6 +413,18 @@ public class AitableServiceImpl implements AitableService {
                     unionId = unionIdJSONArray.getJSONObject(0).getString("unionId");
                 }
             }
+            if(fields.get("是否计算为通关项目") != null){
+                clearLevelFlag = fields.getJSONObject("是否计算为通关项目").getString("name");
+            }
+            if(fields.get("成单情况【商机进度】") != null){
+                dealStatus = fields.getJSONObject("成单情况【商机进度】").getString("name");
+            }
+            if(fields.get("订单状态 - S1~3【商机进度】") != null){
+                orderStatus = fields.getJSONObject("订单状态 - S1~3【商机进度】").getString("name");
+            }
+            if(fields.get("商机阶段 - S1~3【商机进度】") != null){
+                opportunityStatus = fields.getJSONObject("商机阶段 - S1~3【商机进度】").getString("name");
+            }
 
             saleRecord = new HashMap<>();
             saleRecord.put("aiTableId",aiTableId);
@@ -419,6 +437,10 @@ public class AitableServiceImpl implements AitableService {
             saleRecord.put("expectedCloseDate",expectedCloseDate);
             saleRecord.put("actualCloseDate",actualCloseDate);
             saleRecord.put("unionId",unionId);
+            saleRecord.put("clearLevelFlag",clearLevelFlag);
+            saleRecord.put("dealStatus",dealStatus);
+            saleRecord.put("orderStatus",orderStatus);
+            saleRecord.put("opportunityStatus",opportunityStatus);
             saleData.add(saleRecord);
         }
 

+ 190 - 15
src/main/java/com/malk/eastar/service/impl/YidaServiceImpl.java

@@ -843,24 +843,25 @@ public class YidaServiceImpl implements YidaService {
         String userId;  //用户userId
         JSONArray businessLeaderUserIdJSONArray;  //业务组长userId(未解析)
         String businessLeaderUserId;  //业务组长userId
+        String testUse; //测试使用
 
         /*
             初始化参数值
          */
-        ydSearch = new YDSearch(
-                "radioField_mn48qynm",
-                "在职",
-                "在职情况",
-                YDSearch.Type.RADIO_FIELD,
-                YDSearch.Operator.EQ
-        );
-        searchCondition = JSONObject.toJSONString(Arrays.asList(ydSearch));
+//        ydSearch = new YDSearch(
+//                "radioField_mn48qynm",
+//                "在职",
+//                "在职情况",
+//                YDSearch.Type.RADIO_FIELD,
+//                YDSearch.Operator.EQ
+//        );
+//        searchCondition = JSONObject.toJSONString(Arrays.asList(ydSearch));
         hasMore = true; //第一页默认有数据
         pageNo = 1;
         pageSize = 100;
         ydParamBuilder = YDParam.builder();
         ydParamBuilder = ydParamBuilder.formUuid(EastarParam.YD_FORMUUID_BUSINESS_USER);
-        ydParamBuilder = ydParamBuilder.searchCondition(searchCondition);
+//        ydParamBuilder = ydParamBuilder.searchCondition(searchCondition);
 
         /*
             翻页获取数据
@@ -891,11 +892,16 @@ public class YidaServiceImpl implements YidaService {
         userId = "";
         businessLeaderUserId = "";
         for (Map record : allRecords){
+            testUse = null;
+
             businessUserRecord = new HashMap<>();
+
             //获取表单实例ID
             formInstId = String.valueOf(record.get("formInstanceId"));
+
             //解析字段数据
             fields = JSONObject.parseObject(JSONObject.toJSONString(record.get("formData")));
+
             /*
                 获取成员数据
              */
@@ -905,6 +911,7 @@ public class YidaServiceImpl implements YidaService {
                     userId = String.valueOf(businessUserIdJSONArray.get(0));
                 }
             }
+
             /*
                 获取业务组长数据
              */
@@ -914,10 +921,19 @@ public class YidaServiceImpl implements YidaService {
                     businessLeaderUserId = String.valueOf(businessLeaderUserIdJSONArray.get(0));
                 }
             }
+
+            /*
+                获取测试使用
+             */
+            if(fields.get("radioField_mnxyjnou") != null){
+                testUse = String.valueOf(fields.get("radioField_mnxyjnou"));
+            }
+
             if(!formInstId.isEmpty() && !userId.isEmpty()){
                 businessUserRecord.put("formInstId",formInstId);
                 businessUserRecord.put("userId",userId);
                 businessUserRecord.put("businessLeaderUserId",businessLeaderUserId);
+                businessUserRecord.put("testUse",testUse);
                 businessUserData.add(businessUserRecord);
             }
         }
@@ -949,6 +965,30 @@ public class YidaServiceImpl implements YidaService {
         ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public void updateLtcBusinessUserPrivateCustomerNum(String formInstId, int numOfPrivateCustomer) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        updateFormDataJson = JSONObject.toJSONString(UtilMap.map("numberField_ms43nslj",numOfPrivateCustomer));  //私海客户数量
+
+        /*
+            更新数据
+         */
+        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> queryLtcAllCustomerData() throws Exception {
         /*
@@ -1069,6 +1109,10 @@ public class YidaServiceImpl implements YidaService {
         JSONObject fields;  //字段数据
         String formInstId;  //表单实例ID
         Map saleProjectRecord;  //销售项目记录
+        Double projectAmount; //预计销售项目金额(美元)
+        Long yidaEstimatedOrderDate; //预计成单日期
+        Long yidaActualOrderDate; //实际成单日期
+        String clearLevelFlag;  //是否计算为通关项目
 
         /*
             初始化参数值
@@ -1107,16 +1151,42 @@ public class YidaServiceImpl implements YidaService {
          */
         log.info("所有记录数量="+allRecords.size());
         for (Map ltcSaleProjectRecord : allRecords){
+            projectAmount = null;
+            yidaEstimatedOrderDate = null;
+            yidaActualOrderDate = null;
+            clearLevelFlag = null;
+
             //获取表单实例ID
             formInstId = String.valueOf(ltcSaleProjectRecord.get("formInstanceId"));
+
             //解析字段数据
             fields = JSONObject.parseObject(JSONObject.toJSONString(ltcSaleProjectRecord.get("formData")));
 
+            if(fields.get("numberField_mdf997x6") != null){ //预计销售项目金额(美元)
+                projectAmount = Double.parseDouble(fields.getString("numberField_mdf997x6"));
+            }
+
+            if(fields.get("dateField_mdf997x7") != null){ //预计成单日期
+                yidaEstimatedOrderDate = Long.parseLong(fields.getString("dateField_mdf997x7"));
+            }
+
+            if(fields.get("dateField_mfm5x6cl") != null){ //实际成单日期
+                yidaActualOrderDate = Long.parseLong(fields.getString("dateField_mfm5x6cl"));
+            }
+
+            if(fields.get("radioField_ms2v43hf") != null){ //是否计算为通关项目
+                clearLevelFlag = fields.getString("radioField_ms2v43hf");
+            }
+
             saleProjectRecord = UtilMap.map(
-                    "formInstId, projectCode, projectName, piCode, testFlag, aiTableId",
+                    "formInstId, projectCode, projectName, projectAmount, yidaEstimatedOrderDate, yidaActualOrderDate, clearLevelFlag, piCode, testFlag, aiTableId",
                     formInstId, //表单实例ID
                     fields.getString("serialNumberField_mdf997w0"), //项目编号
                     fields.getString("textField_mdf997vz"), //项目名称
+                    projectAmount, //预计销售项目金额(美元)
+                    yidaEstimatedOrderDate, //预计成单日期
+                    yidaActualOrderDate, //实际成单日期
+                    clearLevelFlag, //是否计算为通关项目
                     fields.getString("textField_mhlrjdz2"), //原系统PI号
                     fields.getString("radioField_mnppbub6"), //测试使用
                     fields.getString("textField_mno9p0lf")  //AI表格映射ID
@@ -1152,6 +1222,7 @@ public class YidaServiceImpl implements YidaService {
         JSONArray businessUserIdJSONArray;  //业务员字段值
         String businessUserId; //业务员userId
         Double projectAmount; //预计销售项目金额(美元)
+        String clearLevelFlag; //是否计算为通关项目
 
         /*
             初始化参数值
@@ -1200,6 +1271,28 @@ public class YidaServiceImpl implements YidaService {
             ydSearchList.add(ydSearch);
         }
 
+        if(params.containsKey("actualOrderBeginDate")){
+            ydSearch = new YDSearch(
+                    "dateField_mfm5x6cl",
+                    Long.parseLong(params.get("actualOrderBeginDate").toString()),
+                    "实际成单日期",
+                    YDSearch.Type.DATE_FIELD,
+                    YDSearch.Operator.GE
+            );
+            ydSearchList.add(ydSearch);
+        }
+
+        if(params.containsKey("actualOrderEndDate")){
+            ydSearch = new YDSearch(
+                    "dateField_mfm5x6cl",
+                    Long.parseLong(params.get("actualOrderEndDate").toString()),
+                    "实际成单日期",
+                    YDSearch.Type.DATE_FIELD,
+                    YDSearch.Operator.LE
+            );
+            ydSearchList.add(ydSearch);
+        }
+
         if(params.containsKey("rfqFrom")){
             ydSearch = new YDSearch(
                     "radioField_mrle8vw0",
@@ -1223,6 +1316,8 @@ public class YidaServiceImpl implements YidaService {
         }
 
         searchCondition = JSONObject.toJSONString(ydSearchList);
+        log.info("筛选条件:");
+        log.info(searchCondition);
 
         hasMore = true; //第一页默认有数据
         pageNo = 1;
@@ -1266,6 +1361,7 @@ public class YidaServiceImpl implements YidaService {
         for (Map ltcSaleProjectRecord : allRecords){
             businessUserId = "";
             projectAmount = 0.0;
+            clearLevelFlag = null;
 
             //获取表单实例ID
             formInstId = String.valueOf(ltcSaleProjectRecord.get("formInstanceId"));
@@ -1287,8 +1383,12 @@ public class YidaServiceImpl implements YidaService {
                 projectAmount = Double.parseDouble(fields.getString("numberField_mdf997x6"));
             }
 
+            if(fields.get("radioField_ms2v43hf") != null){ //是否计算为通关项目
+                clearLevelFlag = fields.getString("radioField_ms2v43hf");
+            }
+
             saleProjectRecord = UtilMap.map(
-                    "formInstId, projectCode, projectName, projectStage, projectAmount, customer, customerCode, businessUserId, piCode, rfqFrom, testUse, aiTableId",
+                    "formInstId, projectCode, projectName, projectStage, projectAmount, customer, customerCode, businessUserId, piCode, rfqFrom, testUse, clearLevelFlag, aiTableId",
                     formInstId, //表单实例ID
                     fields.getString("serialNumberField_mdf997w0"), //项目编号
                     fields.getString("textField_mdf997vz"), //项目名称
@@ -1300,6 +1400,7 @@ public class YidaServiceImpl implements YidaService {
                     fields.getString("textField_mhlrjdz2"), //原系统PI号
                     fields.getString("radioField_mrle8vw0"), //RFQ来源
                     fields.getString("radioField_mnppbub6"), //测试使用
+                    clearLevelFlag, //是否计算为通关项目
                     fields.getString("textField_mno9p0lf")  //AI表格映射ID
             );
             saleProjectData.add(saleProjectRecord);
@@ -1613,6 +1714,7 @@ public class YidaServiceImpl implements YidaService {
         String newBusinessUserId; //新业务员userId
         Long employmentDate;  //入职日期
         Long deadline;  //3个月考核截止日期
+        Long confirmationDate;  //试用期结束日期
 
         /*
             初始化参数值
@@ -1685,14 +1787,18 @@ public class YidaServiceImpl implements YidaService {
             //获取3个月考核截止日期
             deadline = fields.getLong("dateField_mrtylxl4");
 
+            //试用期结束日期
+            confirmationDate = fields.getLong("dateField_mrmtlvou");
+
 
             //添加客户建联跟进记录
             newBusinessUserRecord = UtilMap.map(
-                    "formInstId, newBusinessUserId, employmentDate, deadline",
+                    "formInstId, newBusinessUserId, employmentDate, deadline, confirmationDate",
                     formInstId, //表单实例ID
                     newBusinessUserId, //新业务员userId
                     employmentDate, //入职日期
-                    deadline  //3个月考核截止日期
+                    deadline,  //3个月考核截止日期
+                    confirmationDate  //试用期结束日期
             );
             newBusinessUserData.add(newBusinessUserRecord);
         }
@@ -1701,7 +1807,7 @@ public class YidaServiceImpl implements YidaService {
     }
 
     @Override
-    public void updateLtcNewBusinessUserRecord(String formInstId, int numOfRFQ) throws Exception {
+    public void updateLtcNewBusinessUserRecord(String formInstId, int numOfRFQ, Double projectAmountTotal) throws Exception {
         /*
             参数定义
          */
@@ -1714,8 +1820,9 @@ public class YidaServiceImpl implements YidaService {
          */
         updateFormDataJson = JSONObject.toJSONString(
                 UtilMap.map(
-                        "numberField_mrtylxl7, dateField_mrtylxld",
+                        "numberField_mrtylxl7, numberField_mrtylxlk, dateField_mrtylxld",
                         numOfRFQ,   //3个月RFQ量
+                        projectAmountTotal,   //试用期成单额
                         DateUtil.current()  //RFQ数据更新时间
                 )
         );
@@ -2227,6 +2334,74 @@ public class YidaServiceImpl implements YidaService {
         ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public void updateLtcSaleProjectOrderInfo(String formInstId, Double projectAmount, Long estimatedOrderDate, Long actualOrderDate, String syncFlag) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+
+        /*
+            初始化参数值
+         */
+        Map<String, Object> updateFormData = new HashMap<>();
+        if(projectAmount!=null){
+            updateFormData.put("numberField_mdf997x6",projectAmount); //预计销售项目金额(美元)
+        }
+        if(estimatedOrderDate!=null){
+            updateFormData.put("dateField_mdf997x7",estimatedOrderDate); //预计成单日期
+        }
+        if(actualOrderDate!=null){
+            updateFormData.put("dateField_mfm5x6cl",actualOrderDate); //实际成单日期
+        }
+        updateFormData.put("radioField_mrwuh4nm",syncFlag);  //从项目总表同步
+        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 updateLtcSaleProjectClearLevel(String formInstId, String clearLevelFlag) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+
+        /*
+            初始化参数值
+         */
+        Map<String, Object> updateFormData = new HashMap<>();
+        if(clearLevelFlag!=null){
+            updateFormData.put("radioField_ms2v43hf",clearLevelFlag); //是否计算为通关项目
+        }
+        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 insertCustomerData(Map row) throws Exception {
         YDParam yidaParam;  //HTTP请求体