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

销售项目整体阶段同步

lvjs 16 часов назад
Родитель
Сommit
39c6c087da

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

@@ -230,7 +230,6 @@ public class AitableController {
                 }else if("订单确认".equals(yidaSaleProjectStatus)){
                     aiTableOrderStatus = "4、订单确认";
                     aiTableOpportunityStage = "已成单";
-
                 }else if("已立项".equals(yidaSaleProjectStatus)){
                     aiTableOrderStatus = "5、已立项";
                 }else if("暂停".equals(yidaSaleProjectStatus)){

+ 102 - 0
src/main/java/com/malk/eastar/schedule/ScheduleTask3.java

@@ -196,5 +196,107 @@ 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("同步销售项目整体阶段完成");
+
+    }
+
 
 }

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

@@ -20,6 +20,12 @@ public interface AitableService {
      */
     List<Map> querySys1SaleData() throws Exception;
 
+    /**
+     * 获取项目总表中的多行记录(售前台账)
+     * @return
+     */
+    List<Map> querySys1SaleData(Map<String,String> params) throws Exception;
+
     /**
      * 根据客户名获取客户ID(客户名册)
      * @param customerName

+ 92 - 0
src/main/java/com/malk/eastar/service/impl/AitableServiceImpl.java

@@ -436,6 +436,98 @@ public class AitableServiceImpl implements AitableService {
         return saleData;
     }
 
+    @Override
+    public List<Map> querySys1SaleData(Map<String, String> params) throws Exception {
+        /*
+            参数定义
+         */
+        List<Map> saleData = new ArrayList<>(); //售前台账数据
+        String baseId; //AI表格文档ID
+        String sheetIdOrName;   //数据表ID或数据表名称
+        Map<String,Object> param = new HashMap<>(); //HTTP请求参数
+        AITableParam aiTableParam = new AITableParam(); //HTTP请求体
+        boolean hasMore; //是否还有下一页
+        int pageNo; //当前页码
+        int pageSize;   //每页获取的数据量(上限100)
+        AITableResult aiTableResult;    //请求返回内容
+        JSONArray records;  //每页记录数据
+        JSONArray allRecords = new JSONArray();  //所有记录数据
+        String aiTableId;   //AI表格ID
+        JSONObject fields;  //字段数据
+        Map<String,Object> saleRecord;  //售前台账记录
+        String projectStage;  //商机阶段 - S1~3【商机进度】
+
+
+
+        /*
+            项目总表 - 【表1】售前台账
+         */
+        baseId = "G53mjyd80pEr5grBfpjmMX6586zbX04v";
+        sheetIdOrName = "C1mtX34";
+
+        /*
+            初始化参数值
+         */
+        hasMore = true; //第一页默认有数据
+        pageNo = 1;
+        pageSize = 100;
+        param.put("operatorId","aj1wcWqKLXITiPDwbMIjUbAiEiE");  //操作人(Jason)的unionId
+        aiTableParam.setMaxResults(pageSize);
+        JSONObject filter = new JSONObject();
+        filter.put("combination","and");
+        JSONArray conditions = new JSONArray();
+        JSONObject condition1 = new JSONObject();
+        condition1.put("field","项目编号 - S1【基础】");
+        condition1.put("operator","notEmpty");
+        conditions.add(condition1);
+        filter.put("conditions",conditions);
+        aiTableParam.setFilter(filter);
+
+        /*
+            翻页获取数据
+         */
+        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++){
+                allRecords.add(records.getJSONObject(i));
+            }
+            log.info("是否有更多数据:"+hasMore);
+            pageNo++;
+            aiTableParam.setNextToken(aiTableResult.getNextToken());
+        }
+
+        /*
+            请求记录数据处理
+         */
+        log.info("所有记录数量="+allRecords.size());
+        for(int i=0;i<allRecords.size();i++){
+            //重置变量
+            projectStage = "";
+
+            //获取AI表格ID
+            aiTableId = allRecords.getJSONObject(i).getString("id");
+
+            //解析字段数据
+            fields = allRecords.getJSONObject(i).getJSONObject("fields");
+
+            if(fields.get("商机阶段 - S1~3【商机进度】") != null){
+                projectStage = fields.getJSONObject("商机阶段 - S1~3【商机进度】").getString("name");
+            }
+
+            saleRecord = new HashMap<>();
+            saleRecord.put("aiTableId",aiTableId);
+            saleRecord.put("projectStage",projectStage);
+//            System.out.println(JSONObject.toJSONString(saleRecord));
+            saleData.add(saleRecord);
+        }
+
+        return saleData;
+    }
+
     @Override
     public String querySys1CustomerIdByName(String customerName) throws Exception {
         /*

+ 9 - 4
src/main/java/com/malk/eastar/service/impl/YidaServiceImpl.java

@@ -1135,7 +1135,7 @@ public class YidaServiceImpl implements YidaService {
         List<Map> saleProjectData = new ArrayList<>();
         List<YDSearch> ydSearchList = new ArrayList<>(); //检索条件(多个)
         YDSearch ydSearch; //检索条件(单个)
-        String searchCondition; //检索条件
+        String searchCondition = null; //检索条件
         YDParam yidaParam;  //HTTP请求体
         YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
         DDR_New yidaResult; //请求返回内容
@@ -1160,14 +1160,18 @@ public class YidaServiceImpl implements YidaService {
                     YDSearch.Operator.LIKE
             );
             ydSearchList.add(ydSearch);
+            searchCondition = JSONObject.toJSONString(ydSearchList);
         }
-        searchCondition = JSONObject.toJSONString(ydSearchList);
+
         hasMore = true; //第一页默认有数据
         pageNo = 1;
         pageSize = 100;
         ydParamBuilder = YDParam.builder();
         ydParamBuilder = ydParamBuilder.formUuid(EastarParam.YD_FORMUUID_SALE_PROJECT);
-        ydParamBuilder = ydParamBuilder.searchCondition(searchCondition);
+        if(searchCondition != null){
+            ydParamBuilder = ydParamBuilder.searchCondition(searchCondition);
+        }
+
 
         /*
             翻页获取数据
@@ -1205,10 +1209,11 @@ public class YidaServiceImpl implements YidaService {
             fields = JSONObject.parseObject(JSONObject.toJSONString(ltcSaleProjectRecord.get("formData")));
 
             saleProjectRecord = UtilMap.map(
-                    "formInstId, projectCode, projectName, piCode, aiTableId",
+                    "formInstId, projectCode, projectName, projectStage, piCode, aiTableId",
                     formInstId, //表单实例ID
                     fields.getString("serialNumberField_mdf997w0"), //项目编号
                     fields.getString("textField_mdf997vz"), //项目名称
+                    fields.getString("selectField_mdf997wp"), //整体项目阶段
                     fields.getString("textField_mhlrjdz2"), //原系统PI号
                     fields.getString("textField_mno9p0lf")  //AI表格映射ID
             );