zhongrj
2023-07-05 a7c5b11f4db54f95845b14c1105fa4b962fa9f3a
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -283,6 +283,56 @@
      return resultListPage;
   }
//   /**
//    * 查询智能外呼统计数据-按日期-行政区统计
//    * @param page
//    * @param callTaskStatistic
//    * @return
//    */
//   @Override
//   public Object getOutgoingStatisticList(IPage<CallTaskStatistic> page,CallTaskStatistic callTaskStatistic) {
//      if (null==callTaskStatistic.getCreateTime() || callTaskStatistic.getCreateTime().equals("")){
//         long l = System.currentTimeMillis();
//         // 设置当前时间的前一天
//         callTaskStatistic.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60*60*24*1000)));
//      }
//      ThreadPoolExecutor executor = myThreadPoolConfig.threadPoolExecutor();
//      // 异步查询统计数据
//      CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture = getListCompletableFuture(page, callTaskStatistic, executor);
//      // 查询 按区域统计连续三天,连续两天未接通,前一天拒接对应的数量
//      Map<String, Object> threeDay = computationTime(callTaskStatistic.getCreateTime(), 2);
//      Map<String, Object> twoDay = computationTime(callTaskStatistic.getCreateTime(), 1);
//      Map<String, Object> oneDay = computationTime(callTaskStatistic.getCreateTime(), 0);
//      // 查询
//      CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, threeDay, "200003", 2);
//      CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, twoDay, "200003", 1);
//      CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, oneDay, "200005", 0);
//      //等待所有任务执行完成
//      try {
//         CompletableFuture.allOf(callTaskStatisticCompletableFuture,threeDayNotCallConnect,twoDayNotCallConnect,oneDayNotCallConnect).get();
//         // 数据处理
//         List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture, oneDay, threeDayNotCallConnect, twoDayNotCallConnect, oneDayNotCallConnect);
//         // 取当前行政区总数据
//         List<CallTaskStatistic> totalList = getTotalCallTaskStatistics(callTaskStatistics,callTaskStatistic);
//         // 排序
//         callTaskStatistics = getCallTaskStatisticsByOrder(callTaskStatistic, callTaskStatistics);
//         // 合并数据
//         totalList.addAll(callTaskStatistics);
//         // 返回数据
//         if (null!= callTaskStatistic.getIsPage()) {
//            return totalList;
//         }else {
//            return page.setRecords(totalList);
//         }
//      } catch (InterruptedException e) {
//         e.printStackTrace();
//      } catch (ExecutionException e) {
//         e.printStackTrace();
//      }
//      // 返回
//      return null;
//   }
   /**
    * 查询智能外呼统计数据-按日期-行政区统计
    * @param page
@@ -297,21 +347,15 @@
         callTaskStatistic.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date(l - 60*60*24*1000)));
      }
      ThreadPoolExecutor executor = myThreadPoolConfig.threadPoolExecutor();
      // 异步查询统计数据
      // 异步查询当前天日常呼叫(3次)统计数据
      CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture = getListCompletableFuture(page, callTaskStatistic, executor);
      // 查询 按区域统计连续三天,连续两天未接通,前一天拒接对应的数量
      Map<String, Object> threeDay = computationTime(callTaskStatistic.getCreateTime(), 2);
      Map<String, Object> twoDay = computationTime(callTaskStatistic.getCreateTime(), 1);
      Map<String, Object> oneDay = computationTime(callTaskStatistic.getCreateTime(), 0);
      // 查询
      CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, threeDay, "200003", 2);
      CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, twoDay, "200003", 1);
      CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect = getListCompletableFuture(callTaskStatistic, executor, oneDay, "200005", 0);
      // 查询当前天除去日常呼叫外的统计数据
      CompletableFuture<List<CallTaskStatistic>> notCallConnect = getListCompletableFuture(callTaskStatistic,executor);
      //等待所有任务执行完成
      try {
         CompletableFuture.allOf(callTaskStatisticCompletableFuture,threeDayNotCallConnect,twoDayNotCallConnect,oneDayNotCallConnect).get();
         CompletableFuture.allOf(callTaskStatisticCompletableFuture,notCallConnect).get();
         // 数据处理
         List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture, oneDay, threeDayNotCallConnect, twoDayNotCallConnect, oneDayNotCallConnect);
         List<CallTaskStatistic> callTaskStatistics = getCallTaskStatistics(callTaskStatisticCompletableFuture,null,null,null, notCallConnect,callTaskStatistic);
         // 取当前行政区总数据
         List<CallTaskStatistic> totalList = getTotalCallTaskStatistics(callTaskStatistics,callTaskStatistic);
         // 排序
@@ -414,6 +458,20 @@
   }
   /**
    * 查询当前天除去日常呼叫外的统计数据
    * @param callTaskStatistic
    * @param executor
    * @return
    */
   @NotNull
   private CompletableFuture<List<CallTaskStatistic>> getListCompletableFuture(CallTaskStatistic callTaskStatistic, ThreadPoolExecutor executor) {
      return CompletableFuture.supplyAsync(()->{
            List<CallTaskStatistic> outgoingStatisticList = callTaskMapper.getNoDayOutgoingStatisticList(callTaskStatistic);
            return outgoingStatisticList;
            },executor);
   }
   /**
    * 按行政区查询对应的接通率
    * @param page
    * @param callTaskStatistic
@@ -448,28 +506,46 @@
    * @throws ExecutionException
    */
   @NotNull
   private List<CallTaskStatistic> getCallTaskStatistics(CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture, Map<String, Object> oneDay, CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect, CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect, CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect) throws InterruptedException, ExecutionException {
   private List<CallTaskStatistic> getCallTaskStatistics(CompletableFuture<List<CallTaskStatistic>> callTaskStatisticCompletableFuture,
                                            Map<String, Object> oneDay,
                                            CompletableFuture<List<CallTaskStatistic>> threeDayNotCallConnect,
                                            CompletableFuture<List<CallTaskStatistic>> twoDayNotCallConnect,
                                            CompletableFuture<List<CallTaskStatistic>> oneDayNotCallConnect,
                                            CallTaskStatistic callTaskStatistic) throws InterruptedException, ExecutionException {
      // 获取信息
      List<CallTaskStatistic> callTaskStatistics = callTaskStatisticCompletableFuture.get();
      List<CallTaskStatistic> threeNotConnectTaskStatisticsList = threeDayNotCallConnect.get();
      List<CallTaskStatistic> twoNotConnectTaskStatisticsList = twoDayNotCallConnect.get();
//      List<CallTaskStatistic> threeNotConnectTaskStatisticsList = threeDayNotCallConnect.get();
//      List<CallTaskStatistic> twoNotConnectTaskStatisticsList = twoDayNotCallConnect.get();
      List<CallTaskStatistic> oneNotConnectTaskStatisticsList = oneDayNotCallConnect.get();
      // 遍历
      for (CallTaskStatistic taskStatistic : callTaskStatistics) {
         taskStatistic.setCreateTime(oneDay.get("endTime").toString());
         for (CallTaskStatistic statistic : threeNotConnectTaskStatisticsList) {
            if (taskStatistic.getGuid().equals(statistic.getGuid())){
               taskStatistic.setThreeNoConnectCount(statistic.getCount());
            }
         }
         for (CallTaskStatistic statistic : twoNotConnectTaskStatisticsList) {
            if (taskStatistic.getGuid().equals(statistic.getGuid())){
               taskStatistic.setTwoNoConnectCount(statistic.getCount());
            }
         }
//         taskStatistic.setCreateTime(oneDay.get("endTime").toString());
         taskStatistic.setCreateTime(callTaskStatistic.getCreateTime());
//         for (CallTaskStatistic statistic : threeNotConnectTaskStatisticsList) {
//            if (taskStatistic.getGuid().equals(statistic.getGuid())){
//               taskStatistic.setThreeNoConnectCount(statistic.getCount());
//            }
//         }
//         for (CallTaskStatistic statistic : twoNotConnectTaskStatisticsList) {
//            if (taskStatistic.getGuid().equals(statistic.getGuid())){
//               taskStatistic.setTwoNoConnectCount(statistic.getCount());
//            }
//         }
         for (CallTaskStatistic statistic : oneNotConnectTaskStatisticsList) {
            if (taskStatistic.getGuid().equals(statistic.getGuid())){
               taskStatistic.setRefuseConnectCount(statistic.getCount());
               Integer count = Integer.parseInt(taskStatistic.getCalleeNumberCount()) + Integer.parseInt(statistic.getCalleeNumberCount());
               Integer connectCount = Integer.parseInt(taskStatistic.getConnectionCount()) + Integer.parseInt(statistic.getConnectionCount());
               taskStatistic.setCalleeNumberCount(count.toString());
               taskStatistic.setConnectionCount(connectCount.toString());
               taskStatistic.setRefuseConnectCount(taskStatistic.getRefuseConnectCount() + statistic.getRefuseConnectCount());
               // 计算比例
               if (connectCount==0){
                  taskStatistic.setCallCompletingRate("0");
               }else {
                  //格式化小数
                  DecimalFormat df = new DecimalFormat("0.00");
                  taskStatistic.setCallCompletingRate(df.format((float) connectCount / count * 100));
               }
            }
         }
      }
@@ -873,4 +949,26 @@
      // 返回
      return page.setRecords(callNotConnectResultList);
   }
   /**
    * 按日期行政区呼叫结果详情列表信息
    * @param callTaskStatistic
    * @param page
    * @return
    */
   @Override
   public Object getCallResultList(IPage<CallTaskStatistic> page, CallTaskStatistic callTaskStatistic) {
      List<String> list = new ArrayList<>();
      if (null!= callTaskStatistic.getAdCode() && !callTaskStatistic.getAdCode().equals("")){
         // 查询所有下级区域code
         list = getAllChildrenAreaByAreaCode(callTaskStatistic.getAdCode());
      }
      if (null!=callTaskStatistic.getIsPage()){
         // 不分页
         return callTaskMapper.getCallResultList(null, list,callTaskStatistic);
      }
      List<CallTaskStatistic> callNotConnectResultList = callTaskMapper.getCallResultList(page,list, callTaskStatistic);
      // 返回
      return page.setRecords(callNotConnectResultList);
   }
}