package com.malk.eastar.schedule; import com.alibaba.fastjson.JSONObject; import com.malk.eastar.service.AitableService; import com.malk.eastar.service.DDCoreClient; 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 ScheduleTask9 { @Autowired private AitableService aitableService; @Autowired private YidaService yidaService; @Autowired private DDCoreClient ddCoreClient; /** * 计算业务员私海客户数量 */ @Scheduled(cron = "0 30 10,16 * * ?") public void calculateusinessUserPrivateCustomerNum() { log.info("计算业务员私海客户数量开始"); /* 查询易思达系统所有在职业务员档案 */ log.info("查询易思达系统所有在职业务员档案"); List ltcBusinessUserData = new ArrayList<>(); try { ltcBusinessUserData = yidaService.queryEmployedBusinessUserData(); log.info("所有在职业务员档案数量="+ltcBusinessUserData.size()); } catch (Exception e) { log.error("查询易思达系统所有在职业务员档案异常",e); return; } /* 1、获取userId列表和unionId列表 2、获取userId与formInstId映射 3、获取unionId与formInstId映射 */ List userIdList = new ArrayList<>(); List unionIdList = new ArrayList<>(); Map userIdFormInstIdMap = new HashMap<>(); Map unionIdFormInstIdMap = new HashMap<>(); String userId; String unionId; String formInstId; for(Map ltcBusinessUserRecord : ltcBusinessUserData){ userId = ""; unionId = ""; formInstId = ""; try { userId = ltcBusinessUserRecord.get("userId").toString(); if(userId == null || StringUtils.isEmpty(userId)){ System.out.println("userId为空!"); continue; } unionId = ddCoreClient.getUnionIdByUserId(userId); if(unionId == null || StringUtils.isEmpty(unionId)){ System.out.println("userId="+userId+",unionId为空!"); continue; } userIdList.add(userId); unionIdList.add(unionId); formInstId = ltcBusinessUserRecord.get("formInstId").toString(); userIdFormInstIdMap.put(userId, formInstId); unionIdFormInstIdMap.put(unionId, formInstId); } catch (Exception e) { log.error("获取userId和unionId映射关系异常"); return; } } /* 查询(易思达)客户名册所有记录 */ log.info("查询(易思达)客户名册所有记录"); List ltcCustomerData = new ArrayList<>(); try { ltcCustomerData = yidaService.queryLtcAllCustomerData(); log.info("易思达系统客户数量="+ltcCustomerData.size()); } catch (Exception e) { log.error("查询(易思达)客户名册异常",e); return; } /* 从项目总表(系统1)获取客户数据 */ log.info("查询项目总表客户名册所有记录"); List sys1CustomerData = new ArrayList<>(); try { sys1CustomerData = aitableService.querySys1CustomerData(); log.info("项目总表客户数量="+sys1CustomerData.size()); } catch (Exception e) { log.error("查询项目总表客户数据异常",e); return; } String testUseFlag; //测试使用 String seaType; //公海/私海 String businessUserId; //业务员userId String businessUnionId; //业务员unionId Map privateCustomerNumMap; //业务员私海客户数量 int numOfPrivateCustomer; /* 统计易思达系统私海客户数量 按新老客户统计todo */ privateCustomerNumMap = new HashMap<>(); for(Map ltcCustomerRecord : ltcCustomerData){ try { testUseFlag = ""; if(ltcCustomerRecord.get("testUseFlag") != null){ testUseFlag = ltcCustomerRecord.get("testUseFlag").toString(); } if(!"否".equals(testUseFlag)){ //忽略测试使用的客户 continue; } seaType = ""; if(ltcCustomerRecord.get("seaType") != null){ seaType = ltcCustomerRecord.get("seaType").toString(); } if(!"私".equals(seaType)){ //忽略非私海客户 continue; } if(ltcCustomerRecord.get("userId") != null && StringUtils.isNotEmpty(ltcCustomerRecord.get("userId").toString())){ businessUserId = ltcCustomerRecord.get("userId").toString(); if(userIdList.contains(businessUserId)){ if(privateCustomerNumMap.containsKey(businessUserId)){ privateCustomerNumMap.put(businessUserId, privateCustomerNumMap.get(businessUserId) + 1); }else{ privateCustomerNumMap.put(businessUserId, 1); } }else{ log.info("未匹配到在职业务员:" + businessUserId + " " + ddCoreClient.getNameByUserId(businessUserId)); } }else{ log.info("私海客户["+ltcCustomerRecord.get("customerName")+"]业务员为空"); } } catch (Exception e) { log.error("匹配客户名册表业务员与业务员档案表业务员异常",e); } } // if(privateCustomerNumMap.isEmpty()){ // log.info("业务员私海客户数量获取不正确"); // return; // } /* 更新各业务员私海客户数量 */ // for (String userIdKey : userIdList){ // if(privateCustomerNumMap.containsKey(userIdKey)){ // numOfPrivateCustomer = privateCustomerNumMap.get(userIdKey); // }else{ // //私海客户归0 // numOfPrivateCustomer = 0; // } // try { // formInstId = userIdFormInstIdMap.get(userIdKey); // log.info("更新各业务员私海客户数量:" + formInstId + " " + numOfPrivateCustomer); // yidaService.updateLtcBusinessUserPrivateCustomerNum(formInstId, numOfPrivateCustomer); // } catch (Exception e) { // log.error("更新各业务员私海客户数量异常",e); // } // } /* 统计项目总表私海客户数量 私海客户总数 按新老客户统计todo */ privateCustomerNumMap = new HashMap<>(); for(Map sys1CustomerRecord : sys1CustomerData){ try { testUseFlag = ""; if(sys1CustomerRecord.get("testUseFlag") != null){ testUseFlag = sys1CustomerRecord.get("testUseFlag").toString(); } if(!"否".equals(testUseFlag)){ //忽略测试使用的客户 continue; } if(sys1CustomerRecord.get("businessUserUnionId") != null && StringUtils.isNotEmpty(sys1CustomerRecord.get("businessUserUnionId").toString())){ businessUnionId = sys1CustomerRecord.get("businessUserUnionId").toString(); if(unionIdList.contains(businessUnionId)){ if(privateCustomerNumMap.containsKey(businessUnionId)){ privateCustomerNumMap.put(businessUnionId, privateCustomerNumMap.get(businessUnionId) + 1); }else{ privateCustomerNumMap.put(businessUnionId, 1); } } } } catch (Exception e) { log.error("匹配项目总表客户名册表业务员与业务员档案表业务员异常",e); } } if(privateCustomerNumMap.isEmpty()){ log.info("业务员私海客户数量(项目总表)获取不正确"); return; } /* 更新各业务员私海客户数量(项目总表) */ for (String unionIdKey : unionIdList){ if(privateCustomerNumMap.containsKey(unionIdKey)){ numOfPrivateCustomer = privateCustomerNumMap.get(unionIdKey); }else{ //私海客户归0 numOfPrivateCustomer = 0; } try { formInstId = unionIdFormInstIdMap.get(unionIdKey); log.info("更新各业务员私海客户数量(项目总表):" + formInstId + " " + numOfPrivateCustomer); yidaService.updateLtcBusinessUserPrivateCustomerNum2(formInstId, numOfPrivateCustomer); } catch (Exception e) { log.error("更新各业务员私海客户数量(项目总表)异常",e); } } log.info("计算业务员私海客户数量结束"); } }