Ver Fonte

项目初始化

jiayi há 1 ano atrás
commit
6aaf968e2e

+ 10 - 0
.idea/.gitignore

@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Zeppelin ignored files
+/ZeppelinRemoteNotebooks/

+ 18 - 0
.idea/compiler.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="RecordMigrate" />
+      </profile>
+    </annotationProcessing>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="RecordMigrate" options="-parameters" />
+    </option>
+  </component>
+</project>

+ 7 - 0
.idea/encodings.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+  </component>
+</project>

+ 20 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/repositories/central/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>

+ 12 - 0
.idea/misc.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 83 - 0
pom.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>RecordMigrate</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.13</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+    <dependencies>
+
+
+        <!-- 火山引擎 -->
+        <dependency>
+            <groupId>com.volcengine</groupId>
+            <artifactId>ve-tos-java-sdk</artifactId>
+            <version>2.6.6</version>
+        </dependency>
+        <!-- Springboot web模块-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!-- logback核心组件 -->
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+            <version>2.3.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.78</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.0</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.30</version>
+        </dependency>
+
+        <!-- SQL Server -->
+        <dependency>
+            <groupId>com.microsoft.sqlserver</groupId>
+            <artifactId>mssql-jdbc</artifactId>
+            <version>8.4.1.jre8</version>
+        </dependency>
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 17 - 0
src/main/java/com/RecordMigrateApplication.java

@@ -0,0 +1,17 @@
+package com;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+
+/**
+ * @author 13491
+ */
+@SpringBootApplication
+@MapperScan("com.handler.mapper")
+public class RecordMigrateApplication {
+    public static void main(String[] args) {
+        ConfigurableApplicationContext applicationContext = SpringApplication.run(RecordMigrateApplication.class, args);
+    }
+}

+ 62 - 0
src/main/java/com/handler/controller/AeccDataHandlerController.java

@@ -0,0 +1,62 @@
+package com.handler.controller;
+
+import com.handler.entity.DataInfo;
+import com.handler.service.AeccDataHandlerService;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 角色监控关联Controller
+ *
+ * @author jy
+ * @date 2023-09-19
+ */
+@RestController
+@RequestMapping("/application")
+@Slf4j
+public class AeccDataHandlerController {
+    @Autowired
+    private AeccDataHandlerService aeccDataHandlerService;
+
+    /**
+     * 查询对应uuid的等待时长、振铃时长
+     */
+    @GetMapping("/getTimeByUuid")
+    public DataInfo getTimeByUuid(String uuid) {
+        log.info("开始查询uuid为{}的等待时长、振铃时长", uuid);
+        DataInfo dataInfo = aeccDataHandlerService.getTimeByCallId(uuid);
+        if (dataInfo != null) {
+            log.info("uuid为{}的等待时长为{}、振铃时长为{}", uuid, dataInfo.getWaitingDuration(), dataInfo.getRingingDuration());
+        } else {
+            log.info("uuid为{}不存在通话", uuid);
+        }
+        return dataInfo;
+    }
+
+    /**
+    * @Description: 查询对应工号的技能组
+    * @Param: [agentId]
+    * @return: java.util.List<java.lang.String>
+    * @Author: jy
+    * @Date: 2024/1/29 10:49
+    */
+    @GetMapping("/getSkillByAgentId")
+    public List<String> getSkillByAgentId(String agentId) {
+        log.info("开始查询工号为为{}的技能组", agentId);
+        List<String> skillList = new ArrayList<>();
+        skillList = aeccDataHandlerService.getSkillByAgentId(agentId);
+        if (skillList != null) {
+            log.info("agentId{}的技能组为{}", agentId, skillList);
+        } else {
+            log.info("agentId的{}技能组不存在", agentId);
+        }
+        return skillList;
+    }
+}

+ 74 - 0
src/main/java/com/handler/controller/RecordHandlerController.java

@@ -0,0 +1,74 @@
+package com.handler.controller;
+
+import com.handler.entity.RecordInfo;
+import com.volcengine.tos.TOSV2;
+import com.volcengine.tos.TOSV2ClientBuilder;
+import com.volcengine.tos.TosClientException;
+import com.volcengine.tos.TosServerException;
+import com.volcengine.tos.model.object.PutObjectInput;
+import com.volcengine.tos.model.object.PutObjectOutput;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+/**
+ * 角色监控关联Controller
+ *
+ * @author jy
+ * @date 2023-09-19
+ */
+@RestController
+@RequestMapping("recordMigrate")
+@Slf4j
+public class RecordHandlerController {
+
+
+    public void PutObjectWithFileInputStreamExample(RecordInfo recordInfo) {
+            String endpoint = "your endpoint";
+            String region = "your region";
+            String accessKey = System.getenv("TOS_ACCESS_KEY");
+            String secretKey = System.getenv("TOS_SECRET_KEY");
+
+            String bucketName = "bucket-example";
+            // 对象名,模拟 example_dir 下的 example_object.txt 文件
+            String objectKey = "example_dir/example_object.txt";
+            // 本地文件路径,请保证文件存在,暂不支持文件夹功能
+            String filePath = "example_dir/example_file.txt";
+
+            TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);
+
+            File file = new File(filePath);
+            try(FileInputStream inputStream = new FileInputStream(file)){
+                PutObjectInput putObjectInput = new PutObjectInput().setBucket(bucketName)
+                        .setKey(objectKey).setContent(inputStream).setContentLength(file.length());
+                PutObjectOutput output = tos.putObject(putObjectInput);
+                System.out.println("putObject succeed, object's etag is " + output.getEtag());
+                System.out.println("putObject succeed, object's crc64 is " + output.getHashCrc64ecma());
+            } catch (IOException e) {
+                System.out.println("putObject read file failed");
+                e.printStackTrace();
+            } catch (TosClientException e) {
+                // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送
+                System.out.println("putObject failed");
+                System.out.println("Message: " + e.getMessage());
+                if (e.getCause() != null) {
+                    e.getCause().printStackTrace();
+                }
+            } catch (TosServerException e) {
+                // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息
+                System.out.println("putObject failed");
+                System.out.println("StatusCode: " + e.getStatusCode());
+                System.out.println("Code: " + e.getCode());
+                System.out.println("Message: " + e.getMessage());
+                System.out.println("RequestID: " + e.getRequestID());
+            } catch (Throwable t) {
+                // 作为兜底捕获其他异常,一般不会执行到这里
+                System.out.println("putObject failed");
+                System.out.println("unexpected exception, message: " + t.getMessage());
+            }
+    }
+}

+ 12 - 0
src/main/java/com/handler/entity/DataInfo.java

@@ -0,0 +1,12 @@
+package com.handler.entity;
+
+import lombok.Data;
+
+/**
+ * @author 13491
+ */
+@Data
+public class DataInfo {
+    private String ringingDuration;
+    private String waitingDuration;
+}

+ 16 - 0
src/main/java/com/handler/entity/RecordInfo.java

@@ -0,0 +1,16 @@
+package com.handler.entity;
+
+import lombok.Data;
+
+/**
+ * @ClassName RecordInfo
+ * @Description TODO
+ * @Author jy
+ * @Date 2024/5/13 11:44
+ * @Version 1.0
+ */
+@Data
+public class RecordInfo {
+    private String UUID;
+    private String recordPath;
+}

+ 20 - 0
src/main/java/com/handler/mapper/AeccDataHandlerMapper.java

@@ -0,0 +1,20 @@
+package com.handler.mapper;
+
+import com.handler.entity.DataInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @ClassName AeccDataHandlerMapper
+ * @Description TODO
+ * @Author jy
+ * @Date 2023/11/14 10:18
+ * @Version 1.0
+ */
+@Mapper
+public interface AeccDataHandlerMapper {
+    DataInfo getTimeByCallId(String callId);
+
+    List<String> getSkillByAgentId(String agentId);
+}

+ 20 - 0
src/main/java/com/handler/mapper/RecordHandlerMapper.java

@@ -0,0 +1,20 @@
+package com.handler.mapper;
+
+import com.handler.entity.DataInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @ClassName AeccDataHandlerMapper
+ * @Description TODO
+ * @Author jy
+ * @Date 2023/11/14 10:18
+ * @Version 1.0
+ */
+@Mapper
+public interface RecordHandlerMapper {
+    DataInfo getTimeByCallId(String callId);
+
+    List<String> getSkillByAgentId(String agentId);
+}

+ 18 - 0
src/main/java/com/handler/service/AeccDataHandlerService.java

@@ -0,0 +1,18 @@
+package com.handler.service;
+
+import com.handler.entity.DataInfo;
+
+import java.util.List;
+
+/**
+ * @ClassName AeccDataHandlerService
+ * @Description TODO
+ * @Author jy
+ * @Date 2023/11/14 10:19
+ * @Version 1.0
+ */
+public interface AeccDataHandlerService {
+    DataInfo getTimeByCallId(String callId);
+
+    List<String> getSkillByAgentId(String agentId);
+}

+ 33 - 0
src/main/java/com/handler/service/Impl/AeccDataHandlerServiceImpl.java

@@ -0,0 +1,33 @@
+package com.handler.service.Impl;
+
+import com.handler.entity.DataInfo;
+import com.handler.mapper.AeccDataHandlerMapper;
+import com.handler.service.AeccDataHandlerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @ClassName AeccDataHandlerServiceImpl
+ * @Description TODO
+ * @Author jy
+ * @Date 2023/11/14 10:20
+ * @Version 1.0
+ */
+@Service
+public class AeccDataHandlerServiceImpl implements AeccDataHandlerService {
+    @Autowired
+    private AeccDataHandlerMapper aeccDataHandlerMapper;
+    @Override
+    public DataInfo getTimeByCallId(String callId) {
+        DataInfo dataInfo = aeccDataHandlerMapper.getTimeByCallId(callId);
+        return dataInfo;
+    }
+
+    @Override
+    public List<String> getSkillByAgentId(String agentId) {
+        List<String> skillByAgentId = aeccDataHandlerMapper.getSkillByAgentId(agentId);
+        return skillByAgentId;
+    }
+}

+ 33 - 0
src/main/java/com/handler/service/Impl/RecordHandlerServiceImpl.java

@@ -0,0 +1,33 @@
+package com.handler.service.Impl;
+
+import com.handler.entity.DataInfo;
+import com.handler.mapper.AeccDataHandlerMapper;
+import com.handler.service.AeccDataHandlerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @ClassName AeccDataHandlerServiceImpl
+ * @Description TODO
+ * @Author jy
+ * @Date 2023/11/14 10:20
+ * @Version 1.0
+ */
+@Service
+public class RecordHandlerServiceImpl implements AeccDataHandlerService {
+    @Autowired
+    private AeccDataHandlerMapper aeccDataHandlerMapper;
+    @Override
+    public DataInfo getTimeByCallId(String callId) {
+        DataInfo dataInfo = aeccDataHandlerMapper.getTimeByCallId(callId);
+        return dataInfo;
+    }
+
+    @Override
+    public List<String> getSkillByAgentId(String agentId) {
+        List<String> skillByAgentId = aeccDataHandlerMapper.getSkillByAgentId(agentId);
+        return skillByAgentId;
+    }
+}

+ 18 - 0
src/main/java/com/handler/service/RecordHandlerService.java

@@ -0,0 +1,18 @@
+package com.handler.service;
+
+import com.handler.entity.DataInfo;
+
+import java.util.List;
+
+/**
+ * @ClassName AeccDataHandlerService
+ * @Description TODO
+ * @Author jy
+ * @Date 2023/11/14 10:19
+ * @Version 1.0
+ */
+public interface RecordHandlerService {
+    DataInfo getTimeByCallId(String callId);
+
+    List<String> getSkillByAgentId(String agentId);
+}

+ 13 - 0
src/main/resources/application.properties

@@ -0,0 +1,13 @@
+server.port=10075
+# mybatis 配置
+mybatis.type-aliases-package=com.handler.springbt_mybatis_sqlserver.entity
+mybatis.mapper-locations=classpath:mapper/*.xml
+mybatis.configuration.map-underscore-to-camel-case=true
+spring.main.allow-circular-references=true
+## -------------------------------------------------
+
+## SqlServer 配置
+spring.datasource.url=jdbc:sqlserver://192.168.11.23:1433;database=AECC
+spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+spring.datasource.username=sa
+spring.datasource.password=1qaz@WSX

+ 74 - 0
src/main/resources/logback.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+    <property name="log.path" value="logs"/>
+    <!-- 日志输出格式 -->
+    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 系统日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+    <logger name="com.ruoyi" level="info"/>
+    <!-- Spring日志级别控制  -->
+    <logger name="org.springframework" level="warn"/>
+
+    <root level="info">
+        <appender-ref ref="console"/>
+    </root>
+
+    <!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info"/>
+        <appender-ref ref="file_error"/>
+    </root>
+</configuration>

+ 80 - 0
src/main/resources/mapper/AeccDataHandlerMapper.xml

@@ -0,0 +1,80 @@
+<?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.handler.mapper.AeccDataHandlerMapper">
+
+    <select id="getTimeByCallId" resultType="com.handler.entity.DataInfo">
+        select ANSWER_WAIT_TIME AS ringingDuration, ALL_WAIT_TIME AS waitingDuration
+        FROM v_SuperviseCallInRecord
+        WHERE CALLID = #{callId}
+    </select>
+
+    <select id="getSkillByAgentId" resultType="string">
+        SELECT
+        s.NAME
+        FROM
+        (SELECT skill =VALUE FROM Agent UNPIVOT (VALUE
+        FOR ATTRIBUTE IN (
+        [Skill_1_ID],
+        [Skill_2_ID],
+        [Skill_3_ID],
+        [Skill_4_ID],
+        [Skill_5_ID],
+        [Skill_6_ID],
+        [Skill_7_ID],
+        [Skill_8_ID],
+        [Skill_9_ID],
+        [Skill_10_ID],
+        [Skill_11_ID],
+        [Skill_12_ID],
+        [Skill_13_ID],
+        [Skill_14_ID],
+        [Skill_15_ID],
+        [Skill_16_ID],
+        [Skill_17_ID],
+        [Skill_18_ID],
+        [Skill_19_ID],
+        [Skill_20_ID],
+        [Skill_21_ID],
+        [Skill_22_ID],
+        [Skill_23_ID],
+        [Skill_24_ID],
+        [Skill_25_ID],
+        [Skill_26_ID],
+        [Skill_27_ID],
+        [Skill_28_ID],
+        [Skill_29_ID],
+        [Skill_30_ID],
+        [Skill_31_ID],
+        [Skill_32_ID],
+        [Skill_33_ID],
+        [Skill_34_ID],
+        [Skill_35_ID],
+        [Skill_36_ID],
+        [Skill_37_ID],
+        [Skill_38_ID],
+        [Skill_39_ID],
+        [Skill_40_ID],
+        [Skill_41_ID],
+        [Skill_42_ID],
+        [Skill_43_ID],
+        [Skill_44_ID],
+        [Skill_45_ID],
+        [Skill_46_ID],
+        [Skill_47_ID],
+        [Skill_48_ID],
+        [Skill_49_ID],
+        [Skill_50_ID]
+        )
+        ) AS UPV
+        WHERE
+        Agent = #{agentId}
+        AND
+        VALUE &lt;&gt; ''
+        ) AS temp
+        LEFT JOIN Skill s ON temp.skill= s.SKILL_ID;
+    </select>
+
+
+</mapper>

+ 80 - 0
src/main/resources/mapper/RecordHandlerMapper.xml

@@ -0,0 +1,80 @@
+<?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.handler.mapper.AeccDataHandlerMapper">
+
+    <select id="getTimeByCallId" resultType="com.handler.entity.DataInfo">
+        select ANSWER_WAIT_TIME AS ringingDuration, ALL_WAIT_TIME AS waitingDuration
+        FROM v_SuperviseCallInRecord
+        WHERE CALLID = #{callId}
+    </select>
+
+    <select id="getSkillByAgentId" resultType="string">
+        SELECT
+        s.NAME
+        FROM
+        (SELECT skill =VALUE FROM Agent UNPIVOT (VALUE
+        FOR ATTRIBUTE IN (
+        [Skill_1_ID],
+        [Skill_2_ID],
+        [Skill_3_ID],
+        [Skill_4_ID],
+        [Skill_5_ID],
+        [Skill_6_ID],
+        [Skill_7_ID],
+        [Skill_8_ID],
+        [Skill_9_ID],
+        [Skill_10_ID],
+        [Skill_11_ID],
+        [Skill_12_ID],
+        [Skill_13_ID],
+        [Skill_14_ID],
+        [Skill_15_ID],
+        [Skill_16_ID],
+        [Skill_17_ID],
+        [Skill_18_ID],
+        [Skill_19_ID],
+        [Skill_20_ID],
+        [Skill_21_ID],
+        [Skill_22_ID],
+        [Skill_23_ID],
+        [Skill_24_ID],
+        [Skill_25_ID],
+        [Skill_26_ID],
+        [Skill_27_ID],
+        [Skill_28_ID],
+        [Skill_29_ID],
+        [Skill_30_ID],
+        [Skill_31_ID],
+        [Skill_32_ID],
+        [Skill_33_ID],
+        [Skill_34_ID],
+        [Skill_35_ID],
+        [Skill_36_ID],
+        [Skill_37_ID],
+        [Skill_38_ID],
+        [Skill_39_ID],
+        [Skill_40_ID],
+        [Skill_41_ID],
+        [Skill_42_ID],
+        [Skill_43_ID],
+        [Skill_44_ID],
+        [Skill_45_ID],
+        [Skill_46_ID],
+        [Skill_47_ID],
+        [Skill_48_ID],
+        [Skill_49_ID],
+        [Skill_50_ID]
+        )
+        ) AS UPV
+        WHERE
+        Agent = #{agentId}
+        AND
+        VALUE &lt;&gt; ''
+        ) AS temp
+        LEFT JOIN Skill s ON temp.skill= s.SKILL_ID;
+    </select>
+
+
+</mapper>