|
|
@@ -1,7 +1,13 @@
|
|
|
package com.malk.eastar.schedule;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.malk.eastar.model.AITableParam;
|
|
|
+import com.malk.eastar.model.AITableResult;
|
|
|
+import com.malk.eastar.service.MDTableClient;
|
|
|
import com.malk.eastar.service.EastarTbService;
|
|
|
+import com.malk.eastar.service.YidaService;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
import com.malk.server.aliwork.YDSearch;
|
|
|
@@ -11,6 +17,7 @@ import com.malk.utils.PublicUtil;
|
|
|
import com.malk.utils.UtilDateTime;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
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;
|
|
|
@@ -18,12 +25,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
|
|
import java.time.LocalDate;
|
|
|
-import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
|
|
|
@@ -41,34 +44,120 @@ public class ScheduleTask {
|
|
|
@Autowired
|
|
|
private YDService ydService;
|
|
|
|
|
|
+ //add by Jason 20260313 start
|
|
|
+ @Autowired
|
|
|
+ private MDTableClient mdTableClient;
|
|
|
+ //add by Jason 20260313 end
|
|
|
+
|
|
|
+ //add by Jason 20260522 start
|
|
|
+ @Autowired
|
|
|
+ private YidaService yidaService;
|
|
|
+ //add by Jason 20260522 end
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
+ * 私海客户流出
|
|
|
*/
|
|
|
- @Scheduled(cron = "0 0 8 * * ?")
|
|
|
- public void syncMer() {
|
|
|
- log.info("客户公海同步");
|
|
|
+ @Scheduled(cron = "0 0 5 * * ?")
|
|
|
+ public void releasePrivatePoolCustomers() {
|
|
|
+ log.info("私海客户流出定时任务");
|
|
|
try {
|
|
|
- long endTime= UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().minusDays(30).atTime(LocalTime.MIN));
|
|
|
- List<Map> list= (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-9261FABA687B4D1D917617F53B4A5DB7UN16").searchCondition(JSONObject.toJSONString(
|
|
|
- Arrays.asList(
|
|
|
- new YDSearch("radioField_md6q7oxa","私","公私海", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
|
|
|
- new YDSearch("radioField_md6q7ox8","新","新老客户", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
|
|
|
- new YDSearch("dateField_l3tw3kfn",endTime,"截至跟进时间",YDSearch.Type.DATE_FIELD,YDSearch.Operator.LT)
|
|
|
- )
|
|
|
- )).build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
- for(Map map:list){
|
|
|
- log.info("客户:{}释放为公海", UtilMap.getMap(map,"formData").get("textField_lqanqe6j"));
|
|
|
- ydClient.operateData(YDParam.builder().formInstId(UtilMap.getString(map,"formInstanceId")).updateFormDataJson(
|
|
|
- JSONObject.toJSONString(UtilMap.map("radioField_md6q7oxa, employeeField_lqanqe6n, employeeField_lqx3act6","公","[]","[]"))
|
|
|
- ).build(), YDConf.FORM_OPERATION.update);
|
|
|
+ //查询所有已建联客户跟进记录
|
|
|
+ List<Map> establishContactData = yidaService.queryLtcCustomerEstablishContactData();
|
|
|
+ log.info("已建联跟进记录数:"+ establishContactData.size());
|
|
|
+
|
|
|
+ //进入私海时间分界点(2026年5月10日)
|
|
|
+ long enterPrivateTime = UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.of(2026, 5, 10).atStartOfDay());
|
|
|
+
|
|
|
+ //查询超过3天未跟进的私海新客户记录
|
|
|
+ long endTime = UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().minusDays(3).atTime(LocalTime.MIN));
|
|
|
+ List ydFilters = Arrays.asList(
|
|
|
+ new YDSearch("radioField_mnpdkss9","否","测试使用", YDSearch.Type.RADIO_FIELD,YDSearch.Operator.EQ),
|
|
|
+ new YDSearch("dateField_moxzc25f",enterPrivateTime,"进入私海时间", YDSearch.Type.DATE_FIELD,YDSearch.Operator.GT),
|
|
|
+ new YDSearch("radioField_md6q7oxa","私","公海or私海", YDSearch.Type.RADIO_FIELD,YDSearch.Operator.EQ),
|
|
|
+ new YDSearch("radioField_md6q7ox8","新","新老客户", YDSearch.Type.RADIO_FIELD,YDSearch.Operator.EQ),
|
|
|
+ new YDSearch("dateField_l3tw3kfn",endTime,"最后跟进时间",YDSearch.Type.DATE_FIELD,YDSearch.Operator.LT)
|
|
|
+ );
|
|
|
+ List<Map> ltcCustomerData = yidaService.queryLtcNotFollowedCustomerData(ydFilters);
|
|
|
+ log.info("超过3天未跟进的私海新客户记录数:"+ ltcCustomerData.size());
|
|
|
+
|
|
|
+ //排除已建联
|
|
|
+ Set<String> contactedCustomerCodes = new HashSet<>();
|
|
|
+ for(Map contactRecord : establishContactData){
|
|
|
+ String customerCode = UtilMap.getString(contactRecord, "customerCode");
|
|
|
+ if(StringUtils.isNotEmpty(customerCode)){
|
|
|
+ contactedCustomerCodes.add(customerCode);
|
|
|
+ }
|
|
|
}
|
|
|
+ List<Map> filteredCustomerData = new ArrayList<>();
|
|
|
+ for(Map customerRecord : ltcCustomerData){
|
|
|
+ String customerCode = UtilMap.getString(customerRecord, "customerCode");
|
|
|
+ if(!contactedCustomerCodes.contains(customerCode)){
|
|
|
+ filteredCustomerData.add(customerRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("排除已建联后的记录数:"+ filteredCustomerData.size());
|
|
|
+ Map alertDetailRecord;
|
|
|
+ for (Map customerRecord : filteredCustomerData) {
|
|
|
+ alertDetailRecord = new HashMap();
|
|
|
+ alertDetailRecord.put("businessUserId",UtilMap.getString(customerRecord, "userId"));
|
|
|
+ alertDetailRecord.put("formInstId",UtilMap.getString(customerRecord, "formInstId"));
|
|
|
+ alertDetailRecord.put("customerName",UtilMap.getString(customerRecord, "customerName"));
|
|
|
+ alertDetailRecord.put("customerCode",UtilMap.getString(customerRecord, "customerCode"));
|
|
|
+ alertDetailRecord.put("today", UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().atStartOfDay()));
|
|
|
+// alertDetailRecord.put("tomorrow", UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().plusDays(1).atStartOfDay()));
|
|
|
+ alertDetailRecord.put("remark","2026年5月10日后进入私海,新客户,未建联,超过3天未跟进");
|
|
|
+ yidaService.addAlertDetail(alertDetailRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ //按业务员分组,统计客户数量
|
|
|
+ Map<String, List<Map>> customerGroupBySales = new HashMap<>();
|
|
|
+ for (Map customerRecord : filteredCustomerData) {
|
|
|
+ String salesPerson = UtilMap.getString(customerRecord, "userId");
|
|
|
+ if (StringUtils.isEmpty(salesPerson)) {
|
|
|
+ salesPerson = "未知业务员";
|
|
|
+ }
|
|
|
+ customerGroupBySales.computeIfAbsent(salesPerson, k -> new ArrayList<>()).add(customerRecord);
|
|
|
+ }
|
|
|
+ Map alertLogRecord;
|
|
|
+ for (Map.Entry<String, List<Map>> entry : customerGroupBySales.entrySet()) {
|
|
|
+ log.info("业务员: {}, 可能会流出客户数量: {}", entry.getKey(), entry.getValue().size());
|
|
|
+ //新增私海客户流出告警日志
|
|
|
+ alertLogRecord = new HashMap();
|
|
|
+ alertLogRecord.put("businessUserId",entry.getKey());
|
|
|
+ alertLogRecord.put("customerNum",entry.getValue().size());
|
|
|
+ alertLogRecord.put("today", UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().atStartOfDay()));
|
|
|
+ yidaService.addAlertLog(alertLogRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //查询超过30天未跟进的私海新客户记录
|
|
|
+
|
|
|
+
|
|
|
+// long endTime= UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().minusDays(30).atTime(LocalTime.MIN));
|
|
|
+// List<Map> list= (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-9261FABA687B4D1D917617F53B4A5DB7UN16").searchCondition(JSONObject.toJSONString(
|
|
|
+// Arrays.asList(
|
|
|
+// new YDSearch("radioField_md6q7oxa","私","公私海", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
|
|
|
+// new YDSearch("radioField_md6q7ox8","新","新老客户", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ),
|
|
|
+// new YDSearch("dateField_l3tw3kfn",endTime,"截至跟进时间",YDSearch.Type.DATE_FIELD,YDSearch.Operator.LT)
|
|
|
+// )
|
|
|
+// )).build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+// for(Map map:list){
|
|
|
+// log.info("客户:{}释放为公海", UtilMap.getMap(map,"formData").get("textField_lqanqe6j"));
|
|
|
+// ydClient.operateData(YDParam.builder().formInstId(UtilMap.getString(map,"formInstanceId")).updateFormDataJson(
|
|
|
+// JSONObject.toJSONString(UtilMap.map("radioField_md6q7oxa, employeeField_lqanqe6n, employeeField_lqx3act6","公","[]","[]"))
|
|
|
+// ).build(), YDConf.FORM_OPERATION.update);
|
|
|
+// }
|
|
|
}catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
+ log.error("私海客户流出定时任务异常",e);
|
|
|
}
|
|
|
+ log.info("私海客户流出定时任务执行完成");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*/
|
|
|
- @Scheduled(cron = "0 30 6 * * ?")
|
|
|
+// @Scheduled(cron = "0 30 6 * * ?")
|
|
|
public void syncTaskCount() {
|
|
|
log.info("同步任务状态数量");
|
|
|
try {
|
|
|
@@ -98,7 +187,7 @@ public class ScheduleTask {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Scheduled(cron = "0 30 1 1 1 ?")
|
|
|
+// @Scheduled(cron = "0 30 1 1 1 ?")
|
|
|
public void syncCust(){
|
|
|
log.info("同步客户上一年等级");
|
|
|
List<Map> list= ydService.queryAllFormData(YDParam.builder().formUuid("FORM-9261FABA687B4D1D917617F53B4A5DB7UN16").build());
|
|
|
@@ -121,4 +210,202 @@ public class ScheduleTask {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 项目总表表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);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|