Browse Source

新的驾驶舱的数据统计调整

王苗苗 3 weeks ago
parent
commit
9b933c962d

+ 2 - 0
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -415,6 +415,8 @@ public class MyConstants {
     public static final String TPFQD = "tpfqd";
 
     public static final int DEFAULT_DAYS_QUERY_COUNT = 6;
+    public static final int YESTERDAY_DAYS_QUERY_COUNT = 1;
+    public static final int DEFAULT_ROBOT_COUNTS = 20;
 
 
     public static void main(String[] args) {

+ 37 - 0
slibra-system/src/main/java/com/slibra/business/res/DayAndAiCountRes.java

@@ -0,0 +1,37 @@
+package com.slibra.business.res;
+
+import com.slibra.common.annotation.Excel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 用户信息对象 t_user_info
+ * 
+ * @author slibra
+ * @date 2024-11-06
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class DayAndAiCountRes implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 日期 */
+    @Excel(name = "日期")
+    private String date;
+
+    /** ai处理量 */
+    @Excel(name = "ai处理量")
+    private int aiCounts;
+
+    /** 总呼入量 */
+    @Excel(name = "总呼入量")
+    private int totalCounts;
+
+
+}

+ 103 - 20
slibra-system/src/main/java/com/slibra/business/res/HomeCountResp.java

@@ -1,6 +1,7 @@
 package com.slibra.business.res;
 
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -15,20 +16,39 @@ import java.util.List;
 @NoArgsConstructor
 public class HomeCountResp {
 
+    //2025年02月17日17:29:06 显示新增的统计字段
+    //今日呼入总量
+    private int todayInTotal;
+
+    //今日AI处理量
+    private int todayAiTotal;
+
+    //今日AI处理量-占比
+    private BigDecimal todayAiRate = BigDecimal.ZERO;
+
+    //今日呼入累计时长
+    @JsonIgnore
+    private long totalTimes;
+
+    //今日平均呼入时长
+    private long todayInTimesAvg;
+
+    //下面注释掉的暂时不统计了
+
     //最近七天呼入量
-    private int inTotal;
+//    private int inTotal;
 
     //最近七天接通率
-    private BigDecimal successRate;
+//    private BigDecimal successRate;
 
     //最近七天呼入时长
-    private long inTimes;
+//    private long inTimes;
 
     //最近七天平均呼入时长
-    private long inTimesAvg;
+//    private long inTimesAvg;
 
     //累计呼入时长
-    private long totalTimes;
+//    private long totalTimes;
 
     //累计呼入总量
     private long totalCounts;
@@ -39,13 +59,17 @@ public class HomeCountResp {
     private List<DayAndCountRes> recent7DayAndCounts;
 
     //近七日呼入电话量趋势--去年数据
-    private List<DayAndCountRes> recent7DayAndCountsLastYear;
+//    private List<DayAndCountRes> recent7DayAndCountsLastYear;
 
     //近7个月电话量同比趋势
-    private List<DayAndCountRes> recent7MonthAndCounts;
+//    private List<DayAndCountRes> recent7MonthAndCounts;
 
     //近7个月电话量同比趋势--去年数据
-    private List<DayAndCountRes> recent7MonthAndCountsLastYear;
+//    private List<DayAndCountRes> recent7MonthAndCountsLastYear;
+
+    //2025年02月18日14:27:21 新增的数据
+    //近7日AI处理情况
+    private List<DayAndAiCountRes> ai7DayAndCounts;
 
     //本月业务类型 top7
     private List<Top7Res> businessTop7;
@@ -54,42 +78,101 @@ public class HomeCountResp {
 
     //下面是今日机器人坐席情况--开始
     //今日呼入总量
-    private int robotInTotal;
+//    private int robotInTotal;
 
     //通话时长
-    private long robotInTimes;
+//    private long robotInTimes;
 
     //平均通话时长
-    private long robotTimesAvg;
+//    private long robotTimesAvg;
 
     //转人工总量
-    private int transfer2Human;
+//    private int transfer2Human;
 
     //当前排队总数
-    private int robotQueue;
+//    private int robotQueue;
 
     //分流比例
-    private Integer robotStreamRate;
+//    private Integer robotStreamRate;
     //下面是今日机器人坐席情况--截止
 
 
     //下面是今日人工坐席情况--开始
     //今日呼入总量
-    private int humanInTotal;
+//    private int humanInTotal;
 
     //通话时长
-    private long humanInTimes;
+//    private long humanInTimes;
 
     //平均通话时长
-    private long humanTimesAvg;
+//    private long humanTimesAvg;
 
     //当前在线坐席人数(2025年01月21日14:27:07 统计的是置闲的客服数量)
-    private int onlineTotal;
+//    private int onlineTotal;
 
     //当前排队总数
-    private int humanQueue;
+//    private int humanQueue;
 
     //分流比例
-    private Integer humanStreamRate;
+//    private Integer humanStreamRate;
     //下面是今日人工坐席情况--截止
+
+    //显示是 今日通话分析 和 昨日通话分析
+    //今日通话分析---开始
+
+    //当前在线人工坐席
+    private int onlineUserCounts;
+
+    //机器人坐席
+    private int robotCounts = 20;//默认20个
+
+    //今日AI处理量 见上面的 todayAiTotal
+
+    //今日AI处理量-占比 见上面的 todayAiRate
+
+    //今日人工处理量
+    private int todayHumanTotal;
+
+    //今日人工处理量-占比
+    private BigDecimal todayHumanRate = BigDecimal.ZERO;
+
+    //今日电话接通量
+    private int todaySuccessCounts;
+
+    //今日电话接通量-占比
+    private BigDecimal todaySuccessRate = BigDecimal.ZERO;
+
+    //今日呼入总量 见上面的 todayInTotal
+
+    //今日通话分析---截止
+
+
+    //昨日通话分析---开始
+
+    //昨日AI处理量
+    private int yesterdayAiTotal;
+
+    //昨日AI处理量-占比
+    private BigDecimal yesterdayAiRate = BigDecimal.ZERO;
+
+    //昨日人工处理量
+    private int yesterdayHumanTotal;
+
+    //昨日人工处理量-占比
+    private BigDecimal yesterdayHumanRate = BigDecimal.ZERO;
+
+    //昨日电话接通量
+    private int yesterdaySuccessCounts;
+
+    //昨日电话接通量-占比
+    private BigDecimal yesterdaySuccessRate = BigDecimal.ZERO;
+
+    //昨日呼入总量
+    private int yesterdayInTotal;
+    //昨日通话分析---截止
+
+
+
+
+
 }

+ 58 - 11
slibra-system/src/main/java/com/slibra/business/service/impl/TCallRecordServiceImpl.java

@@ -556,7 +556,7 @@ public class TCallRecordServiceImpl implements ITCallRecordService
     public HomeCountResp homeScreenCount() {
         HomeCountResp build = HomeCountResp.builder().build();
         //获取7天前的日期
-        String lastDate = DateUtils.plusDate(-DEFAULT_DAYS_QUERY_COUNT, DateUtils.getNowDate(), YYYY_MM_DD);
+        /*String lastDate = DateUtils.plusDate(-DEFAULT_DAYS_QUERY_COUNT, DateUtils.getNowDate(), YYYY_MM_DD);
         //查询说明: type未空是查询所有呼入的 0:成功接通的
         int inTotal = this.tCallRecordMapper.getRecentCallRecordAfterSomeDay(null, lastDate);
         build.setInTotal(inTotal);
@@ -567,24 +567,34 @@ public class TCallRecordServiceImpl implements ITCallRecordService
         build.setInTimes(inTimes);
         if(inTotalSuccess > 0)
             build.setInTimesAvg(inTimes/inTotalSuccess);
-        build.setTotalTimes(this.tCallRecordMapper.getRecentCallTimes(null));
+        build.setTotalTimes(this.tCallRecordMapper.getRecentCallTimes(null));*/
         build.setTotalCounts(this.tCallRecordMapper.getRecentCallRecordAfterSomeDay(null, null));
         //近七日呼入电话量趋势
         List<DayAndCountRes> recent7DayAndCounts = new ArrayList<>();
-        List<DayAndCountRes> recent7DayAndCountsLastYear = new ArrayList<>();
+//        List<DayAndCountRes> recent7DayAndCountsLastYear = new ArrayList<>();
+        //近7日AI处理情况
+        List<DayAndAiCountRes> ai7DayAndCounts = new ArrayList<>();
         Date nowDate = DateUtils.getNowDate();
         String nowDateStr = DateUtils.getDate();
         String sevenDaysAgo = DateUtils.plusDate(-DEFAULT_DAYS_QUERY_COUNT, nowDate, YYYY_MM_DD);
         List<String> allDatesInRangeStr = DateUtils.getAllDatesInRangeStr(sevenDaysAgo, nowDateStr);
-        for (String todayYearDate : allDatesInRangeStr) {
+        for (String someDay : allDatesInRangeStr) {
             DayAndCountRes dayAndCountRes = new DayAndCountRes();
-            dayAndCountRes.setDate(todayYearDate);
-            dayAndCountRes.setCount(this.tCallRecordMapper.getCallInEqualsDay(todayYearDate, null, null));
+            dayAndCountRes.setDate(someDay);
+            int someDayTotalCounts = this.tCallRecordMapper.getCallInEqualsDay(someDay, null, null);
+            dayAndCountRes.setCount(someDayTotalCounts);
             recent7DayAndCounts.add(dayAndCountRes);
+            //下面是处理 近7日AI处理情况
+            DayAndAiCountRes dayAndAiCountRes = new DayAndAiCountRes();
+            dayAndAiCountRes.setDate(someDay);
+            dayAndAiCountRes.setTotalCounts(someDayTotalCounts);
+            dayAndAiCountRes.setAiCounts(this.tCallRecordMapper.getCallInEqualsDay(someDay, 3, null));
+            ai7DayAndCounts.add(dayAndAiCountRes);
         }
         build.setRecent7DayAndCounts(recent7DayAndCounts);
+        build.setAi7DayAndCounts(ai7DayAndCounts);
         //近七日呼入电话量趋势--去年数据
-        String dateLastYear = DateUtils.getNYearSameDay(nowDateStr, 1);
+        /*String dateLastYear = DateUtils.getNYearSameDay(nowDateStr, 1);
         String sevenDaysAgoLastYear = DateUtils.getNYearSameDay(sevenDaysAgo, 1);
         List<String> allDatesInRangeStrLastYear = DateUtils.getAllDatesInRangeStr(sevenDaysAgoLastYear, dateLastYear);
         for (String lastYearDate : allDatesInRangeStrLastYear) {
@@ -618,7 +628,9 @@ public class TCallRecordServiceImpl implements ITCallRecordService
             dayAndCountRes.setCount(this.tCallRecordMapper.getCallInEqualsMonth(lastYearMonth));
             recent7MonthAndCountsLastYear.add(dayAndCountRes);
         }
-        build.setRecent7MonthAndCountsLastYear(recent7MonthAndCountsLastYear);
+        build.setRecent7MonthAndCountsLastYear(recent7MonthAndCountsLastYear);*/
+        //获取当前的月份
+        String nowMonth = DateUtils.parseDateToStr(DateUtils.YYYY_MM, nowDate);
         //本月业务类型 top7 处理
         List<Top7Res> top7ResList = this.tCallRecordMapper.getTop7ResListByMonthAndSize(nowMonth, DEFAULT_DAYS_QUERY_COUNT+1);
         //处理展示数据
@@ -636,7 +648,7 @@ public class TCallRecordServiceImpl implements ITCallRecordService
         //今日机器人坐席情况
         //type 0人工  1机器人  2转人工     通过service_category区分:0:0人工坐席    1:1机器人坐席 + 2机器人转人工  2:2机器人转人工
         //status 0未接听 1已接通  不传,默认所有
-        build.setRobotInTotal(this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, 1, null));
+        /*build.setRobotInTotal(this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, 1, null));
         long robotInTimes = this.tCallRecordMapper.getCallTimesEqualsDay(nowDateStr, 1);//0人工  1机器人  2转人工     通过service_category区分:0:0人工坐席    1:1机器人坐席 + 2机器人转人工  2:2机器人转人工
         build.setRobotInTimes(robotInTimes);
         //获取今日已接听的机器人坐席总呼入量
@@ -644,7 +656,7 @@ public class TCallRecordServiceImpl implements ITCallRecordService
         if(callInTodaySuccess > 0)
             build.setRobotTimesAvg(robotInTimes/callInTodaySuccess);
         build.setTransfer2Human(this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, 2, null));
-        build.setRobotQueue(-1);//todo 逻辑如何处理
+        build.setRobotQueue(-1);
         TBucketRecord bucketRecord = this.bucketRecordMapper.selectNewest();
         if(!Objects.isNull(bucketRecord)){
             build.setRobotStreamRate(bucketRecord.getAiPercent());
@@ -659,7 +671,42 @@ public class TCallRecordServiceImpl implements ITCallRecordService
         if(callInTodaySuccessHuman > 0)
             build.setHumanTimesAvg(humanInTimes/callInTodaySuccessHuman);
         build.setOnlineTotal(this.tCallRecordMapper.getPersonCountByState(2));
-        build.setHumanQueue(-1);//todo 逻辑如何处理
+        build.setHumanQueue(-1);*/
+        //2025年02月18日15:13:32 下面开始处理新增的单个字段逻辑
+        int todayInTotal = this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, null, null);
+        build.setTodayInTotal(todayInTotal);
+        int todayAiTotal = this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, 3, null);
+        build.setTodayAiTotal(todayAiTotal);
+        long totalTimes = this.tCallRecordMapper.getRecentCallTimes(nowDateStr);
+        build.setTotalTimes(totalTimes);
+        build.setRobotCounts(DEFAULT_ROBOT_COUNTS);
+        build.setOnlineUserCounts(this.tCallRecordMapper.getPersonCountByState(2));
+        int todayHumanTotal = this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, 4, 1);
+        build.setTodayHumanTotal(todayHumanTotal);
+        int todaySuccessCounts = this.tCallRecordMapper.getCallInEqualsDay(nowDateStr, null, 1);
+        build.setTodaySuccessCounts(todaySuccessCounts);
+        if(todayInTotal > 0){
+            build.setTodayInTimesAvg(totalTimes/todayInTotal);
+            build.setTodayAiRate(DecimalUtils.getNLengthHalfUp(new BigDecimal(todayAiTotal/(double)todayInTotal).multiply(BigDecimal_100), INT_2));
+            build.setTodayHumanRate(DecimalUtils.getNLengthHalfUp(new BigDecimal(todayHumanTotal/(double)todayInTotal).multiply(BigDecimal_100), INT_2));
+            build.setTodaySuccessRate(DecimalUtils.getNLengthHalfUp(new BigDecimal(todaySuccessCounts/(double)todayInTotal).multiply(BigDecimal_100), INT_2));
+        }
+
+        //获取昨日的日期
+        String yesterdayDate = DateUtils.plusDate(-YESTERDAY_DAYS_QUERY_COUNT, nowDate, YYYY_MM_DD);
+        int yesterdayInTotal = this.tCallRecordMapper.getCallInEqualsDay(yesterdayDate, null, null);
+        build.setYesterdayInTotal(yesterdayInTotal);
+        int yesterdayAiTotal = this.tCallRecordMapper.getCallInEqualsDay(yesterdayDate, 3, null);
+        build.setYesterdayAiTotal(yesterdayAiTotal);
+        int yesterdayHumanTotal = this.tCallRecordMapper.getCallInEqualsDay(yesterdayDate, 4, 1);
+        build.setYesterdayHumanTotal(yesterdayHumanTotal);
+        int yesterdaySuccessCounts = this.tCallRecordMapper.getCallInEqualsDay(yesterdayDate, null, 1);
+        build.setYesterdaySuccessCounts(yesterdaySuccessCounts);
+        if(yesterdayInTotal > 0){
+            build.setYesterdayAiRate(DecimalUtils.getNLengthHalfUp(new BigDecimal(yesterdayAiTotal/(double)yesterdayInTotal).multiply(BigDecimal_100), INT_2));
+            build.setYesterdayHumanRate(DecimalUtils.getNLengthHalfUp(new BigDecimal(yesterdayHumanTotal/(double)yesterdayInTotal).multiply(BigDecimal_100), INT_2));
+            build.setYesterdaySuccessRate(DecimalUtils.getNLengthHalfUp(new BigDecimal(yesterdaySuccessCounts/(double)yesterdayInTotal).multiply(BigDecimal_100), INT_2));
+        }
         return build;
     }
 

+ 6 - 0
slibra-system/src/main/resources/mapper/business/TCallRecordMapper.xml

@@ -516,6 +516,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 <when test="2 == type">
                     AND service_category = 2
                 </when>
+                <when test="3 == type">
+                    AND service_category = 1
+                </when>
+                <when test="4 == type">
+                    AND (service_category = 0 OR service_category = 2)
+                </when>
             </choose>
         </if>
         <if test="status != null ">