Browse Source

首页统计团队新增管理员查看所有数据

anderx 1 year ago
parent
commit
2826c9f622

+ 0 - 1
src/main/java/com/goafanti/common/controller/PublicController.java

@@ -988,7 +988,6 @@ public class PublicController extends CertifyApiController {
 	@PostMapping("/callCompleted")
 	@ResponseBody
 	public Result callCompleted(@RequestBody InputCallCompleter in) {
-		System.out.println(in);
 		return new Result<>().data(userOutboundService.pushCallCompleted(in));
 	}
 

+ 91 - 0
src/main/java/com/goafanti/common/dao/AdminCallDayMapper.java

@@ -0,0 +1,91 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.AdminCallDay;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 外呼每天统计表(AdminCallDay)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-11 09:21:49
+ */
+public interface AdminCallDayMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    AdminCallDay queryById(Integer id);
+
+
+    /**
+     * 查询指定行数据
+     *
+     * @param adminCallDay 查询条件
+     * @param pageable     分页对象
+     * @return 对象列表
+     */
+    List<AdminCallDay> findAdminCallDayList(AdminCallDay adminCallDay, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param adminCallDay 查询条件
+     * @return 总行数
+     */
+    int findAdminCallDayCount(AdminCallDay adminCallDay);
+
+    /**
+     * 新增数据
+     *
+     * @param adminCallDay 实例对象
+     * @return 影响行数
+     */
+    int insert(AdminCallDay adminCallDay);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<AdminCallDay> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<AdminCallDay> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<AdminCallDay> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<AdminCallDay> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param adminCallDay 实例对象
+     * @return 影响行数
+     */
+    int update(AdminCallDay adminCallDay);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    AdminCallDay selectByAidAndDay(@Param("id") String id, @Param("now") LocalDate now);
+
+    void insertDay(@Param("id") String id, @Param("startDate") LocalDate startDate, @Param("endTime") LocalDate endTime);
+
+    void updateDay(@Param("id") String id, @Param("startDate") LocalDate startDate, @Param("endTime") LocalDate endTime);
+}
+

+ 241 - 0
src/main/java/com/goafanti/common/mapper/AdminCallDayMapper.xml

@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.goafanti.common.dao.AdminCallDayMapper">
+
+    <resultMap type="com.goafanti.common.model.AdminCallDay" id="AdminCallDayMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="aid" column="aid" jdbcType="VARCHAR"/>
+        <result property="teamId" column="team_id" jdbcType="INTEGER"/>
+        <result property="teamName" column="team_name" jdbcType="VARCHAR"/>
+        <result property="callSum" column="call_sum" jdbcType="INTEGER"/>
+        <result property="connectSum" column="connect_sum" jdbcType="INTEGER"/>
+        <result property="validSum" column="valid_sum" jdbcType="INTEGER"/>
+        <result property="callDurationSum" column="call_duration_sum" jdbcType="INTEGER"/>
+        <result property="dayDate" column="day_date" jdbcType="TIMESTAMP"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="AdminCallDayAllSql">
+        id, name, aid, team_id, team_name, call_sum, connect_sum, valid_sum, call_duration_sum, day_date, create_time
+    </sql>
+
+    <!--查询单个-->
+    <select id="queryById" resultMap="AdminCallDayMap">
+        select
+        <include refid="AdminCallDayAllSql"/>
+        from admin_call_day
+        where id = #{id}
+    </select>
+
+    <!--查询指定行数据-->
+    <select id="findAdminCallDayList" resultMap="AdminCallDayMap">
+        select
+        <include refid="AdminCallDayAllSql"/>
+
+        from admin_call_day
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="name != null and name != ''">
+                and name = #{name}
+            </if>
+            <if test="aid != null and aid != ''">
+                and aid = #{aid}
+            </if>
+            <if test="teamId != null">
+                and team_id = #{teamId}
+            </if>
+            <if test="teamName != null and teamName != ''">
+                and team_name = #{teamName}
+            </if>
+            <if test="callSum != null">
+                and call_sum = #{callSum}
+            </if>
+            <if test="connectSum != null">
+                and connect_sum = #{connectSum}
+            </if>
+            <if test="validSum != null">
+                and valid_sum = #{validSum}
+            </if>
+            <if test="callDurationSum != null">
+                and call_duration_sum = #{callDurationSum}
+            </if>
+            <if test="dayDate != null">
+                and day_date = #{dayDate}
+            </if>
+            <if test="createTime != null">
+                and create_time = #{createTime}
+            </if>
+        </where>
+        <if test="page_sql != null">
+            ${page_sql}
+        </if>
+    </select>
+
+    <!--统计总行数-->
+    <select id="findAdminCallDayCount" resultType="java.lang.Integer">
+        select count(1)
+        from admin_call_day
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="name != null and name != ''">
+                and name = #{name}
+            </if>
+            <if test="aid != null and aid != ''">
+                and aid = #{aid}
+            </if>
+            <if test="teamId != null">
+                and team_id = #{teamId}
+            </if>
+            <if test="teamName != null and teamName != ''">
+                and team_name = #{teamName}
+            </if>
+            <if test="callSum != null">
+                and call_sum = #{callSum}
+            </if>
+            <if test="connectSum != null">
+                and connect_sum = #{connectSum}
+            </if>
+            <if test="validSum != null">
+                and valid_sum = #{validSum}
+            </if>
+            <if test="callDurationSum != null">
+                and call_duration_sum = #{callDurationSum}
+            </if>
+            <if test="dayDate != null">
+                and day_date = #{dayDate}
+            </if>
+            <if test="createTime != null">
+                and create_time = #{createTime}
+            </if>
+        </where>
+    </select>
+
+
+    <!--新增所有列-->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into admin_call_day(name, aid, team_id, team_name, call_sum, connect_sum, valid_sum, call_duration_sum,
+                                   day_date, create_time)
+        values (#{name}, #{aid}, #{teamId}, #{teamName}, #{callSum}, #{connectSum}, #{validSum}, #{callDurationSum},
+                #{dayDate}, #{createTime})
+    </insert>
+
+    <insert id="insertBatch">
+        insert into admin_call_day(name, aid, team_id, team_name, call_sum, connect_sum, valid_sum, call_duration_sum,
+        day_date, create_time)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.name}, #{entity.aid}, #{entity.teamId}, #{entity.teamName}, #{entity.callSum},
+            #{entity.connectSum}, #{entity.validSum}, #{entity.callDurationSum}, #{entity.dayDate},
+            #{entity.createTime})
+        </foreach>
+    </insert>
+
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into admin_call_day(name, aid, team_id, team_name, call_sum, connect_sum, valid_sum, call_duration_sum,
+        day_date, create_time)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.name}, #{entity.aid}, #{entity.teamId}, #{entity.teamName}, #{entity.callSum},
+            #{entity.connectSum}, #{entity.validSum}, #{entity.callDurationSum}, #{entity.dayDate},
+            #{entity.createTime})
+        </foreach>
+        on duplicate key update
+        name = values(name),
+        aid = values(aid),
+        team_id = values(team_id),
+        team_name = values(team_name),
+        call_sum = values(call_sum),
+        connect_sum = values(connect_sum),
+        valid_sum = values(valid_sum),
+        call_duration_sum = values(call_duration_sum),
+        day_date = values(day_date),
+        create_time = values(create_time)
+    </insert>
+
+
+    <!--通过主键修改数据-->
+    <update id="update">
+        update admin_call_day
+        <set>
+            <if test="name != null and name != ''">
+                name = #{name},
+            </if>
+            <if test="aid != null and aid != ''">
+                aid = #{aid},
+            </if>
+            <if test="teamId != null">
+                team_id = #{teamId},
+            </if>
+            <if test="teamName != null and teamName != ''">
+                team_name = #{teamName},
+            </if>
+            <if test="callSum != null">
+                call_sum = #{callSum},
+            </if>
+            <if test="connectSum != null">
+                connect_sum = #{connectSum},
+            </if>
+            <if test="validSum != null">
+                valid_sum = #{validSum},
+            </if>
+            <if test="callDurationSum != null">
+                call_duration_sum = #{callDurationSum},
+            </if>
+            <if test="dayDate != null">
+                day_date = #{dayDate},
+            </if>
+            <if test="createTime != null">
+                create_time = #{createTime},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from admin_call_day
+        where id = #{id}
+    </delete>
+
+
+    <select id="selectByAidAndDay" resultMap="AdminCallDayMap">
+        select
+        <include refid="AdminCallDayAllSql"/>
+        from admin_call_day
+        where aid = #{aid} and day_date = #{dayDate}
+    </select>
+    <insert id="insertDay">
+        insert into admin_call_day(aid,name,team_id,team_name,call_sum,connect_sum,valid_sum,call_duration_sum,day_date)
+        select b.id,b.name,c.id,c.name ,a.callSum,a.connectSum,a.validSum,a.callDurationSum,a.dates
+        from (SELECT x.aid,sum(x.duration) callDurationSum,sum(x.counts) callSum,
+        sum(x.connectSum)connectSum,sum(x.validSum)validSum,x.dates
+        from(SELECT b.aid ,b.duration ,1 counts,if(b.duration>0 and b.duration &lt; 5,1,0)connectSum,
+        if(b.duration>=5,1,0)validSum ,DATE_FORMAT(b.create_time,'%Y-%m-%d') dates
+        from  call_log b
+        where b.aid= #{aid}
+        and b.create_time between #{startDate} and #{endDate}
+        )x group by x.aid,x.dates)a
+        left join admin b on a.aid=b.id
+        left join sales_team c on b.team_id=c.id
+    </insert>
+    <update id="updateDay">
+        update admin_call_day a ,(SELECT x.aid,sum(x.duration) callDurationSum,sum(x.counts) callSum,
+                 sum(x.connectSum)connectSum,sum(x.validSum)validSum,x.dates
+                from(SELECT b.aid ,b.duration ,1 counts,if(b.duration>0 and b.duration &lt; 5,1,0)connectSum,
+                      if(b.duration>=5,1,0)validSum ,DATE_FORMAT(b.create_time,'%Y-%m-%d') dates
+               from  call_log b
+               where b.aid= #{aid}
+                 and b.create_time between #{startDate} and #{endDate}
+              )x group by x.aid,x.dates)b
+        set a.call_sum=b.callSum,a.connect_sum=b.connectSum,a.valid_sum=b.validSum,a.call_duration_sum=b.callDurationSum
+        where a.aid=b.aid and a.day_date=b.dates
+    </update>
+</mapper>
+

+ 150 - 0
src/main/java/com/goafanti/common/model/AdminCallDay.java

@@ -0,0 +1,150 @@
+package com.goafanti.common.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 外呼每天统计表(AdminCallDay)实体类
+ *
+ * @author makejava
+ * @since 2024-12-11 09:21:49
+ */
+public class AdminCallDay implements Serializable {
+    private static final long serialVersionUID = -20468848993770714L;
+    /**
+     * id
+     */
+    private Integer id;
+    /**
+     * 外呼人名称
+     */
+    private String name;
+    /**
+     * 外呼人编号
+     */
+    private String aid;
+    /**
+     * 团队编号
+     */
+    private Integer teamId;
+    /**
+     * 团队名称
+     */
+    private String teamName;
+    /**
+     * 外呼次数
+     */
+    private Integer callSum;
+    /**
+     * 接通次数
+     */
+    private Integer connectSum;
+    /**
+     * 有效次数
+     */
+    private Integer validSum;
+    /**
+     * 时长
+     */
+    private Integer callDurationSum;
+    /**
+     * 记录时间
+     */
+    private Date dayDate;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAid() {
+        return aid;
+    }
+
+    public void setAid(String aid) {
+        this.aid = aid;
+    }
+
+    public Integer getTeamId() {
+        return teamId;
+    }
+
+    public void setTeamId(Integer teamId) {
+        this.teamId = teamId;
+    }
+
+    public String getTeamName() {
+        return teamName;
+    }
+
+    public void setTeamName(String teamName) {
+        this.teamName = teamName;
+    }
+
+    public Integer getCallSum() {
+        return callSum;
+    }
+
+    public void setCallSum(Integer callSum) {
+        this.callSum = callSum;
+    }
+
+    public Integer getConnectSum() {
+        return connectSum;
+    }
+
+    public void setConnectSum(Integer connectSum) {
+        this.connectSum = connectSum;
+    }
+
+    public Integer getValidSum() {
+        return validSum;
+    }
+
+    public void setValidSum(Integer validSum) {
+        this.validSum = validSum;
+    }
+
+    public Integer getCallDurationSum() {
+        return callDurationSum;
+    }
+
+    public void setCallDurationSum(Integer callDurationSum) {
+        this.callDurationSum = callDurationSum;
+    }
+
+    public Date getDayDate() {
+        return dayDate;
+    }
+
+    public void setDayDate(Date dayDate) {
+        this.dayDate = dayDate;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}
+

+ 19 - 3
src/main/java/com/goafanti/customer/service/impl/UserOutboundServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.socket.TextMessage;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +54,8 @@ public class UserOutboundServiceImpl extends BaseMybatisDao<CallLogMapper> imple
     private OrganizationContactBookMapper organizationContactBookMapper;
     @Resource
     private CallLogMapper callLogMapper;
+    @Resource
+    private AdminCallDayMapper adminCallDayMapper;
 
     @Override
     public Object checkUser(Integer type) {
@@ -198,7 +201,7 @@ public class UserOutboundServiceImpl extends BaseMybatisDao<CallLogMapper> imple
         callLog.setStatus(0);
         callLog.setRemarks(callResultMsg);
         callLogMapper.insert(callLog);
-        pushCountUser(uid);
+        pushCountUser(uid,id);
         //需要关闭客户呼叫中
 //        SseResult res =  SseMap.sseEmitterMap.get(TokenManager.getAdminId());
 
@@ -218,9 +221,12 @@ public class UserOutboundServiceImpl extends BaseMybatisDao<CallLogMapper> imple
 
     /**
      * 客户通话时长统计
-     * @param uid
+     *
+     * @param uid 客户编号
+     * @param id 呼叫人编号
      */
-    private void pushCountUser(String uid) {
+    private void pushCountUser(String uid, String id) {
+        LocalDate now = LocalDate.now();
         List<CallLog> callLogList = callLogMapper.selectByUid(uid);
         int count=0;
         int duration=0;
@@ -228,11 +234,21 @@ public class UserOutboundServiceImpl extends BaseMybatisDao<CallLogMapper> imple
             count++;
             duration+=log.getDuration();
         }
+        //统计客户呼叫时长
         UserMid mid=new UserMid();
         mid.setUid(uid);
         mid.setCallCount(count);
         mid.setCallDuration(duration);
         userMidMapper.updateByUid(mid);
+        //统计呼叫人每天的通话时长
+        AdminCallDay adminCallDay = adminCallDayMapper.selectByAidAndDay(id, now);
+        LocalDate endTime = now.plusDays(1);
+        if (adminCallDay==null){
+            adminCallDayMapper.insertDay(id,now,endTime);
+        }else {
+            adminCallDayMapper.updateDay(id,now,endTime);
+        }
+
         User u =new User();
         u.setId(uid);
         u.setCallStatus(0);