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

计算新老客户定时任务调整

lvjs 1 месяц назад
Родитель
Сommit
330189c5bc

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

@@ -33,6 +33,8 @@ public class EastarParam {
 
     public static String YD_FORMUUID_CONFIRMED_RECEIPT = "FORM-A5503F1E250D49D781C3CA0FE9072BCBSOO5";    //确认收款,add by Jason 20260811
 
+    public static String YD_FORMUUID_SYNC_LOG = "FORM-32E0D3BD9E404C968AB632C336EA89E6ICME";    //数据同步日志,add by Jason 20260812
+
     static {
         CUSTFIELD_ACCE.put("配件名","textField_me2f7tvo");
         CUSTFIELD_ACCE.put("系列名称","selectField_me2f7tw4");

+ 123 - 8
src/main/java/com/malk/eastar/schedule/ScheduleTask9.java

@@ -54,15 +54,28 @@ public class ScheduleTask9 {
         }
 
         /*
-            最近一年打款客户为老客户
+            最近一年大货打款客户为老客户
          */
         Set<String> oldCustomerCodes = new HashSet<>();
         String customerCode;
+        List<Map> subTableData;
         for (Map confirmedReceiptRecord : confirmedReceiptData){
             customerCode = (String) confirmedReceiptRecord.get("customerCode");
-            oldCustomerCodes.add(customerCode);
+            subTableData = (List<Map>) confirmedReceiptRecord.get("subTableData");
+            for (Map subTableRecord : subTableData){
+                if(subTableRecord.get("customerCode") != null && customerCode.equals(subTableRecord.get("customerCode"))){
+                    //仅大货打款为老客户
+                    if("全款".equals(subTableRecord.get("receiptType"))
+                            || "大货定金".equals(subTableRecord.get("receiptType"))
+                            || "大货尾款".equals(subTableRecord.get("receiptType"))){
+                        oldCustomerCodes.add(customerCode);
+                    }
+                }else{
+                    log.info("客户(主表)与客户(子表)不一致:"+confirmedReceiptRecord.get("processInstanceId"));
+                }
+            }
         }
-        log.info("最近一年打款客户数量="+oldCustomerCodes.size());
+        log.info("最近一年大货打款客户数量="+oldCustomerCodes.size());
 
         /*
             查询(易思达)客户名册所有记录
@@ -82,6 +95,8 @@ public class ScheduleTask9 {
         String newOrOldFlag; //新老客户
         String formInstId;
         int count = 0;
+        String customerAiTableId;
+        Map syncLog;
         for (String oldCustomerCode : oldCustomerCodes){
             try {
                 for (Map ltcCustomerRecord : ltcCustomerData){
@@ -92,6 +107,12 @@ public class ScheduleTask9 {
                             log.info("修改为老客户:"+ltcCustomerRecord.get("customerName").toString());
                             yidaService.updateLtcCustomerNewOrOld(formInstId, "老");
                             Thread.sleep(3000);
+                            syncLog = new HashMap();
+                            syncLog.put("logType","新老客户变更同步");
+                            customerAiTableId = ltcCustomerRecord.get("aiTableId").toString();
+                            syncLog.put("aiTableID",customerAiTableId);
+                            syncLog.put("newOrOld","老客户");
+                            yidaService.addSyncLog(syncLog);
                             count++;
                         }
                         //已找到该客户
@@ -154,11 +175,10 @@ public class ScheduleTask9 {
         /*
             最近1年有实际成单日期项目的关联客户以及有打款记录的客户保留老客户标识,其他客户更新为新客户标识
          */
-        String customerAiTableId;
         boolean isOrdered;
         count = 0;
         for (Map ltcCustomerRecord : ltcCustomerDataFilter){ //遍历老客户
-            System.out.println("老客户:" + ltcCustomerRecord.get("customerName").toString());
+//            System.out.println("老客户:" + ltcCustomerRecord.get("customerName").toString());
             customerCode = ltcCustomerRecord.get("customerCode").toString();
             if(oldCustomerCodes.contains(customerCode)){
                 //有打款记录,保留老客户标识
@@ -175,7 +195,7 @@ public class ScheduleTask9 {
                 }
                 if(customerAiTableId.equals(sys1SaleRecord.get("customerId"))){
                     actualCloseDate = Long.parseLong(sys1SaleRecord.get("actualCloseDate").toString());
-                    System.out.println("实际成单日期:" + sdf.format(new Date(actualCloseDate)));
+//                    System.out.println("实际成单日期:" + sdf.format(new Date(actualCloseDate)));
                     //有实际成单日期项目,保留老客户标识
                     isOrdered = true;
                     break;
@@ -188,6 +208,12 @@ public class ScheduleTask9 {
                     log.info("修改为新客户:" + ltcCustomerRecord.get("customerName").toString());
                     yidaService.updateLtcCustomerNewOrOld(formInstId, "新");
                     Thread.sleep(3000);
+                    syncLog = new HashMap();
+                    syncLog.put("logType","新老客户变更同步");
+                    customerAiTableId = ltcCustomerRecord.get("aiTableId").toString();
+                    syncLog.put("aiTableID",customerAiTableId);
+                    syncLog.put("newOrOld","新客户");
+                    yidaService.addSyncLog(syncLog);
                     count++;
                 } catch (Exception e) {
                     log.error("修改为新客户异常",e);
@@ -290,16 +316,23 @@ public class ScheduleTask9 {
 
         String testUseFlag; //测试使用
         String seaType; //公海/私海
+        String newOrOldFlag; //新老客户
         String businessUserId; //业务员userId
         String businessUnionId; //业务员unionId
         Map<String, Integer> privateCustomerNumMap; //业务员私海客户数量
         int numOfPrivateCustomer;
+        Map<String, Integer> privateNewCustomerNumMap; //业务员新客户数量
+        int numOfPrivateNewCustomer;
+        Map<String, Integer> privateOldCustomerNumMap; //业务员老客户数量
+        int numOfPrivateOldCustomer;
 
         /*
             统计易思达系统私海客户数量
-            按新老客户统计todo
+            同时按新老客户统计
          */
         privateCustomerNumMap = new HashMap<>();
+        privateNewCustomerNumMap = new HashMap<>();
+        privateOldCustomerNumMap = new HashMap<>();
         for(Map ltcCustomerRecord : ltcCustomerData){
             try {
                 testUseFlag = "";
@@ -326,6 +359,20 @@ public class ScheduleTask9 {
                         }else{
                             privateCustomerNumMap.put(businessUserId, 1);
                         }
+                        newOrOldFlag = ltcCustomerRecord.get("newOrOld").toString();
+                        if("新".equals(newOrOldFlag)){
+                            if(privateNewCustomerNumMap.containsKey(businessUserId)){
+                                privateNewCustomerNumMap.put(businessUserId, privateNewCustomerNumMap.get(businessUserId) + 1);
+                            }else{
+                                privateNewCustomerNumMap.put(businessUserId, 1);
+                            }
+                        }else{
+                            if(privateOldCustomerNumMap.containsKey(businessUserId)){
+                                privateOldCustomerNumMap.put(businessUserId, privateOldCustomerNumMap.get(businessUserId) + 1);
+                            }else{
+                                privateOldCustomerNumMap.put(businessUserId, 1);
+                            }
+                        }
                     }else{
                         log.info("未匹配到在职业务员:" + businessUserId + " " + ddCoreClient.getNameByUserId(businessUserId));
                     }
@@ -359,6 +406,32 @@ public class ScheduleTask9 {
 //            } catch (Exception e) {
 //                log.error("更新各业务员私海客户数量异常",e);
 //            }
+//            if(privateNewCustomerNumMap.containsKey(userIdKey)){
+//                numOfPrivateNewCustomer = privateNewCustomerNumMap.get(userIdKey);
+//            }else{
+//                //新客户归0
+//                numOfPrivateNewCustomer = 0;
+//            }
+//            try {
+//                formInstId = userIdFormInstIdMap.get(userIdKey);
+//                log.info("更新各业务员新客户数量:" + formInstId + " " + numOfPrivateNewCustomer);
+//                yidaService.updateLtcBusinessUserPrivateNewCustomerNum(formInstId, numOfPrivateNewCustomer);
+//            } catch (Exception e) {
+//                log.error("更新各业务员新客户数量异常",e);
+//            }
+//            if(privateOldCustomerNumMap.containsKey(userIdKey)){
+//                numOfPrivateOldCustomer = privateOldCustomerNumMap.get(userIdKey);
+//            }else{
+//                //老客户归0
+//                numOfPrivateOldCustomer = 0;
+//            }
+//            try {
+//                formInstId = userIdFormInstIdMap.get(userIdKey);
+//                log.info("更新各业务员老客户数量:" + formInstId + " " + numOfPrivateOldCustomer);
+//                yidaService.updateLtcBusinessUserPrivateOldCustomerNum(formInstId, numOfPrivateOldCustomer);
+//            } catch (Exception e) {
+//                log.error("更新各业务员老客户数量异常",e);
+//            }
 //        }
 
 
@@ -366,9 +439,11 @@ public class ScheduleTask9 {
         /*
             统计项目总表私海客户数量
             私海客户总数
-            按新老客户统计todo
+            同时按新老客户统计
          */
         privateCustomerNumMap = new HashMap<>();
+        privateNewCustomerNumMap = new HashMap<>();
+        privateOldCustomerNumMap = new HashMap<>();
         for(Map sys1CustomerRecord : sys1CustomerData){
             try {
                 testUseFlag = "";
@@ -387,6 +462,20 @@ public class ScheduleTask9 {
                         }else{
                             privateCustomerNumMap.put(businessUnionId, 1);
                         }
+                        newOrOldFlag = sys1CustomerRecord.get("newOrOld").toString();
+                        if("新".equals(newOrOldFlag)){
+                            if(privateNewCustomerNumMap.containsKey(businessUnionId)){
+                                privateNewCustomerNumMap.put(businessUnionId, privateNewCustomerNumMap.get(businessUnionId) + 1);
+                            }else{
+                                privateNewCustomerNumMap.put(businessUnionId, 1);
+                            }
+                        }else{
+                            if(privateOldCustomerNumMap.containsKey(businessUnionId)){
+                                privateOldCustomerNumMap.put(businessUnionId, privateOldCustomerNumMap.get(businessUnionId) + 1);
+                            }else{
+                                privateOldCustomerNumMap.put(businessUnionId, 1);
+                            }
+                        }
                     }
                 }
             } catch (Exception e) {
@@ -417,6 +506,32 @@ public class ScheduleTask9 {
             } catch (Exception e) {
                 log.error("更新各业务员私海客户数量(项目总表)异常",e);
             }
+            if(privateNewCustomerNumMap.containsKey(unionIdKey)){
+                numOfPrivateNewCustomer = privateNewCustomerNumMap.get(unionIdKey);
+            }else{
+                //新客户归0
+                numOfPrivateNewCustomer = 0;
+            }
+            try {
+                formInstId = unionIdFormInstIdMap.get(unionIdKey);
+                log.info("更新各业务员新客户数量(项目总表):" + formInstId + " " + numOfPrivateNewCustomer);
+                yidaService.updateLtcBusinessUserPrivateNewCustomerNum2(formInstId, numOfPrivateNewCustomer);
+            } catch (Exception e) {
+                log.error("更新各业务员新客户数量(项目总表)异常",e);
+            }
+            if(privateOldCustomerNumMap.containsKey(unionIdKey)){
+                numOfPrivateOldCustomer = privateOldCustomerNumMap.get(unionIdKey);
+            }else{
+                //老客户归0
+                numOfPrivateOldCustomer = 0;
+            }
+            try {
+                formInstId = unionIdFormInstIdMap.get(unionIdKey);
+                log.info("更新各业务员老客户数量(项目总表):" + formInstId + " " + numOfPrivateOldCustomer);
+                yidaService.updateLtcBusinessUserPrivateOldCustomerNum2(formInstId, numOfPrivateOldCustomer);
+            } catch (Exception e) {
+                log.error("更新各业务员老客户数量(项目总表)异常",e);
+            }
         }
 
         log.info("计算业务员私海客户数量结束");

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

@@ -61,11 +61,31 @@ public interface YidaService {
      */
     void updateLtcBusinessUserPrivateCustomerNum(String formInstId, int numOfPrivateCustomer) throws Exception;
 
+    /**
+     * 更新业务员档案私海新客户数量
+     */
+    void updateLtcBusinessUserPrivateNewCustomerNum(String formInstId, int numOfPrivateNewCustomer) throws Exception;
+
+    /**
+     * 更新业务员档案私海老客户数量
+     */
+    void updateLtcBusinessUserPrivateOldCustomerNum(String formInstId, int numOfPrivateOldCustomer) throws Exception;
+
     /**
      * 更新业务员档案私海客户数量(项目总表)
      */
     void updateLtcBusinessUserPrivateCustomerNum2(String formInstId, int numOfPrivateCustomer2) throws Exception;
 
+    /**
+     * 更新业务员档案私海新客户数量(项目总表)
+     */
+    void updateLtcBusinessUserPrivateNewCustomerNum2(String formInstId, int numOfPrivateNewCustomer2) throws Exception;
+
+    /**
+     * 更新业务员档案私海老客户数量(项目总表)
+     */
+    void updateLtcBusinessUserPrivateOldCustomerNum2(String formInstId, int numOfPrivateOldCustomer2) throws Exception;
+
     /**
      * 获取易思达系统中的所有记录(客户名册)
      */
@@ -252,6 +272,11 @@ public interface YidaService {
      */
     void addAlertLog(Map row) throws Exception;
 
+    /**
+     * 插入易思达系统中的一行记录(数据同步日志)
+     */
+    void addSyncLog(Map row) throws Exception;
+
     /**
      * 获取EASTAR业务数字化中的多行记录(客户名册)
      * @return

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

@@ -1161,10 +1161,11 @@ public class YidaServiceImpl implements YidaService {
         boolean hasMore; //是否还有下一页
         int pageNo; //当前页码
         int pageSize;   //每页获取的数据量(上限100)
-        String formInstId;  //表单实例ID
+        String processInstanceId;  //表单实例ID
         JSONObject fields;  //字段数据
         Long receiptDate;   //收款日期
         String customerCode;    //客户编号
+        List<Map> subTableData; //子表明细数据
 
         /*
             初始化参数值
@@ -1218,9 +1219,10 @@ public class YidaServiceImpl implements YidaService {
             receiptDate = null;
             customerCode = null;
             confirmedReceiptRecord = new HashMap<>();
+            subTableData = new ArrayList<>();
 
             //获取表单实例ID
-            formInstId = String.valueOf(record.get("formInstanceId"));
+            processInstanceId = String.valueOf(record.get("processInstanceId"));
 
             //解析字段数据
             fields = JSONObject.parseObject(JSONObject.toJSONString(record.get("data")));
@@ -1233,8 +1235,23 @@ public class YidaServiceImpl implements YidaService {
                 customerCode = String.valueOf(fields.get("textField_mff079ra"));
             }
 
+            if(fields.get("tableField_mff079rc") != null) { //拆分明细
+                JSONArray jsonArray = JSONArray.parseArray(fields.getString("tableField_mff079rc"));
+                JSONObject jsonObject;
+                Map subTableRecord;
+                for(int i = 0; i < jsonArray.size(); i++){
+                    jsonObject = jsonArray.getJSONObject(i);
+                    subTableRecord = new HashMap<>();
+                    subTableRecord.put("customerCode",jsonObject.getString("textField_ms8ay25l")); //客户编号(子表)
+                    subTableRecord.put("receiptType",jsonObject.getString("selectField_mfz5l8yk")); //收款类型
+                    subTableData.add(subTableRecord);
+                }
+            }
+
+            confirmedReceiptRecord.put("processInstanceId",processInstanceId);
             confirmedReceiptRecord.put("receiptDate",receiptDate);
             confirmedReceiptRecord.put("customerCode",customerCode);
+            confirmedReceiptRecord.put("subTableData",subTableData);
             confirmedReceiptData.add(confirmedReceiptRecord);
         }
 
@@ -1290,6 +1307,54 @@ public class YidaServiceImpl implements YidaService {
         ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public void updateLtcBusinessUserPrivateNewCustomerNum(String formInstId, int numOfPrivateNewCustomer) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        updateFormDataJson = JSONObject.toJSONString(UtilMap.map("numberField_ms8cjco8",numOfPrivateNewCustomer));  //其中:新客户数量
+
+        /*
+            更新数据
+         */
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formInstId(formInstId);
+        ydParamBuilder = ydParamBuilder.updateFormDataJson(updateFormDataJson);
+        yidaParam = ydParamBuilder.build();
+        ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
+    }
+
+    @Override
+    public void updateLtcBusinessUserPrivateOldCustomerNum(String formInstId, int numOfPrivateOldCustomer) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        updateFormDataJson = JSONObject.toJSONString(UtilMap.map("numberField_ms8cjco9",numOfPrivateOldCustomer));  //其中:老客户数量
+
+        /*
+            更新数据
+         */
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formInstId(formInstId);
+        ydParamBuilder = ydParamBuilder.updateFormDataJson(updateFormDataJson);
+        yidaParam = ydParamBuilder.build();
+        ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
+    }
+
     @Override
     public void updateLtcBusinessUserPrivateCustomerNum2(String formInstId, int numOfPrivateCustomer2) throws Exception {
         /*
@@ -1314,6 +1379,54 @@ public class YidaServiceImpl implements YidaService {
         ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
     }
 
+    @Override
+    public void updateLtcBusinessUserPrivateNewCustomerNum2(String formInstId, int numOfPrivateNewCustomer2) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        updateFormDataJson = JSONObject.toJSONString(UtilMap.map("numberField_ms8cjcoc",numOfPrivateNewCustomer2));  //其中:新客户数量(项目总表)
+
+        /*
+            更新数据
+         */
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formInstId(formInstId);
+        ydParamBuilder = ydParamBuilder.updateFormDataJson(updateFormDataJson);
+        yidaParam = ydParamBuilder.build();
+        ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.update);
+    }
+
+    @Override
+    public void updateLtcBusinessUserPrivateOldCustomerNum2(String formInstId, int numOfPrivateOldCustomer2) throws Exception {
+        /*
+            参数定义
+         */
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+        String updateFormDataJson;  //更新内容
+
+        /*
+            初始化参数值
+         */
+        updateFormDataJson = JSONObject.toJSONString(UtilMap.map("numberField_ms8cjcoe",numOfPrivateOldCustomer2));  //其中:老客户数量(项目总表)
+
+        /*
+            更新数据
+         */
+        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 {
         /*
@@ -2595,13 +2708,14 @@ public class YidaServiceImpl implements YidaService {
             初始化参数值
          */
         Map updateFormData = UtilMap.map(
-                "radioField_md6q7oxa, textField_mnchujji, textField_lxa0ko5h, employeeField_lqanqe6n, employeeField_lqx3act6, selectField_moy9v8ve",
-                "公",
-                "",
-                "",
-                new String[]{},
-                new String[]{},
-                ""
+                "radioField_md6q7oxa, dateField_moxzc25f, textField_mnchujji, textField_lxa0ko5h, employeeField_lqanqe6n, employeeField_lqx3act6, selectField_moy9v8ve",
+                "公", //公海/私海
+                null, //进入私海时间
+                "", //业务员userId
+                "", //业务员userName
+                new String[]{}, //业务员
+                new String[]{}, //业务组长
+                ""  //业务小组
         );
         updateFormDataJson = JSONObject.toJSONString(updateFormData);
         System.out.println(updateFormDataJson);
@@ -3130,6 +3244,36 @@ public class YidaServiceImpl implements YidaService {
         Thread.sleep(3000);
     }
 
+    @Override
+    public void addSyncLog(Map row) throws Exception {
+        YDParam yidaParam;  //HTTP请求体
+        YDParam.YDParamBuilder ydParamBuilder; //宜搭参数构建
+
+        Map syncLogRecord = UtilMap.map(
+                "selectField_msfucqjt, " //日志分类
+                        +"textField_msfvthlr, " //AI表格记录ID
+                        +"textField_msfvnnzd, " //业务员userId
+                        +"textField_msij7w0h, " //客户公司名
+                        +"textField_mspiziyc, " //客户分级
+                        +"textField_mspiziyd", //新老客户
+                row.get("logType"),
+                row.get("aiTableID"),
+                row.get("businessUserId"),
+                row.get("customerName"),
+                row.get("customerLevel"),
+                row.get("newOrOld")
+        );
+
+        String insertFormDataJson = JSONObject.toJSONString(syncLogRecord);
+        ydParamBuilder = YDParam.builder();
+        ydParamBuilder = ydParamBuilder.formUuid(EastarParam.YD_FORMUUID_SYNC_LOG);
+        ydParamBuilder = ydParamBuilder.formDataJson(insertFormDataJson);
+        yidaParam = ydParamBuilder.build();
+        ydClient.operateData(yidaParam,YDConf.FORM_OPERATION.create);
+        log.info("新增一条数据同步日志记录");
+        Thread.sleep(3000);
+    }
+
     @Override
     public List<Map> querySys2CustomerData() throws Exception {
         /*