Przeglądaj źródła

新增sip手动外呼功能

peicj 1 dzień temu
rodzic
commit
23642553ef
20 zmienionych plików z 291 dodań i 133 usunięć
  1. 8 0
      fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallGatewayController.java
  2. 9 0
      fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallOutboundCdrController.java
  3. 25 10
      fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallPhoneController.java
  4. 32 15
      fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallTaskController.java
  5. 9 4
      fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallUserController.java
  6. 11 11
      fs-service/src/main/java/com/fs/aiSipCall/RemoteCommon.java
  7. 3 0
      fs-service/src/main/java/com/fs/aiSipCall/domain/AiSipCallUser.java
  8. 0 1
      fs-service/src/main/java/com/fs/aiSipCall/domain/CcCustCallRecord.java
  9. 15 2
      fs-service/src/main/java/com/fs/aiSipCall/param/ApiCallRecordQueryParams.java
  10. 3 0
      fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallGatewayService.java
  11. 4 0
      fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallOutboundCdrService.java
  12. 4 0
      fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallPhoneService.java
  13. 2 0
      fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallTaskService.java
  14. 4 2
      fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallUserService.java
  15. 15 0
      fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallGatewayServiceImpl.java
  16. 42 21
      fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallOutboundCdrServiceImpl.java
  17. 69 55
      fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallPhoneServiceImpl.java
  18. 19 0
      fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallTaskServiceImpl.java
  19. 3 2
      fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallUserServiceImpl.java
  20. 14 10
      fs-service/src/main/resources/mapper/aiSipCall/AiSipCallUserMapper.xml

+ 8 - 0
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallGatewayController.java

@@ -28,6 +28,14 @@ public class AiSipCallGatewayController extends BaseController
     @Autowired
     private IAiSipCallGatewayService aiSipCallGatewayService;
 
+    /**
+     * 查询aiSIP外呼网关列表
+     */
+    @PostMapping("/remoteList")
+    public TableDataInfo remoteList(@RequestBody AiSipCallGateway aiSipCallGateway)
+    {
+        return aiSipCallGatewayService.remoteList(aiSipCallGateway);
+    }
     /**
      * 查询aiSIP外呼网关列表
      */

+ 9 - 0
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallOutboundCdrController.java

@@ -3,6 +3,7 @@ package com.fs.company.controller.aiSipCall;
 import com.fs.aiSipCall.domain.AiSipCallOutboundCdr;
 import com.fs.aiSipCall.domain.CcCustInfo;
 import com.fs.aiSipCall.param.ApiCallRecordByUuidQueryParams;
+import com.fs.aiSipCall.param.ApiCallRecordQueryParams;
 import com.fs.aiSipCall.service.IAiSipCallOutboundCdrService;
 import com.fs.aiSipCall.utils.DateUtils;
 import com.fs.common.annotation.Log;
@@ -34,6 +35,14 @@ public class AiSipCallOutboundCdrController extends BaseController
     @Autowired
     private IAiSipCallOutboundCdrService aiSipCallOutboundCdrService;
 
+    /**
+     * 查询远程aiSIP手动外呼通话记录列表
+     */
+    @PostMapping("/remoteList")
+    public TableDataInfo remoteList(@RequestBody ApiCallRecordQueryParams aiSipCallOutboundCdr)
+    {
+        return aiSipCallOutboundCdrService.remoteList(aiSipCallOutboundCdr);
+    }
     /**
      * 查询aiSIP手动外呼通话记录列表
      */

+ 25 - 10
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallPhoneController.java

@@ -2,6 +2,7 @@ package com.fs.company.controller.aiSipCall;
 
 import com.fs.aiSipCall.domain.AiSipCallPhone;
 import com.fs.aiSipCall.domain.AiSipCallTask;
+import com.fs.aiSipCall.param.ApiCallRecordQueryParams;
 import com.fs.aiSipCall.service.IAiSipCallPhoneService;
 import com.fs.aiSipCall.service.IAiSipCallTaskService;
 import com.fs.aiSipCall.utils.DateUtils;
@@ -38,6 +39,20 @@ public class AiSipCallPhoneController extends BaseController
     @Autowired
     private IAiSipCallTaskService aiSipCallTaskService;
 
+    /**
+     * 查询远程aiSIP外呼通话记录列表
+     */
+    @PostMapping("/remoteList")
+    public TableDataInfo remoteList(@RequestBody ApiCallRecordQueryParams aiSipCallPhone)
+    {
+        if(aiSipCallPhone != null && aiSipCallPhone.getBatchId() != null){
+            AiSipCallTask ccCallTask = aiSipCallTaskService.selectAiSipCallTaskByBatchId(aiSipCallPhone.getBatchId());
+            if (null != ccCallTask) {
+                aiSipCallPhone.setBatchId(ccCallTask.getRemoteBatchId());
+            }
+        }
+        return aiSipCallPhoneService.remoteList(aiSipCallPhone);
+    }
     /**
      * 查询aiSIP外呼通话记录列表
      */
@@ -149,15 +164,15 @@ public class AiSipCallPhoneController extends BaseController
     /**
      * 手动拉取今天aiSIP外呼通话记录列表
      */
-    @PreAuthorize("@ss.hasPermi('company:aiSipCall:phone:manualPull')")
-    @GetMapping("/manualPull")
-    public AjaxResult manualPull()
-    {
-        log.info("开始拉取 Ai 外呼通话记录");
-        long strat = System.currentTimeMillis();
-        String msg = aiSipCallPhoneService.scheduledGetCallRecord().join();
-        log.info("结束拉取 Ai 外呼通话记录,耗时:{}ms,结果:{}",System.currentTimeMillis()-strat,msg);
-        return AjaxResult.success(msg);
-    }
+//    @PreAuthorize("@ss.hasPermi('company:aiSipCall:phone:manualPull')")
+//    @GetMapping("/manualPull")
+//    public AjaxResult manualPull()
+//    {
+//        log.info("开始拉取 Ai 外呼通话记录");
+//        long strat = System.currentTimeMillis();
+//        String msg = aiSipCallPhoneService.scheduledGetCallRecord().join();
+//        log.info("结束拉取 Ai 外呼通话记录,耗时:{}ms,结果:{}",System.currentTimeMillis()-strat,msg);
+//        return AjaxResult.success(msg);
+//    }
 
 }

+ 32 - 15
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallTaskController.java

@@ -28,9 +28,10 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * aiSIP外呼任务Controller
@@ -58,19 +59,35 @@ public class AiSipCallTaskController extends BaseController
         aiSipCallTask.setCompanyId(loginUser.getCompany().getCompanyId());
         startPage();
         List<AiSipCallTask> list = aiSipCallTaskService.selectAiSipCallTaskList(aiSipCallTask);
-        list.forEach(task -> {
-            CallTaskStatModel statModel = aiSipCallTaskService.statByBatchId(task.getBatchId());
-            task.setPhoneCount(statModel.getPhoneCount());
-            task.setCallCount(statModel.getCallCount());
-            task.setNoCallCount(statModel.getPhoneCount() - statModel.getCallCount());
-            task.setConnectCount(statModel.getConnectCount());
-            task.setNoConnectCount(statModel.getCallCount() - statModel.getConnectCount());
-            if (task.getCallCount() > 0) {
-                task.setRealConnectRate(task.getConnectCount()*1.0/task.getCallCount());
-            } else {
-                task.setRealConnectRate(0.0);
+        if(!list.isEmpty()){
+            List<Long> batchIds = list.stream().map(AiSipCallTask::getRemoteBatchId).collect(Collectors.toList());
+            List<CallTaskStatModel> statModels = aiSipCallTaskService.remoteStatByBatchId(batchIds);
+            if(statModels != null){
+                Map<Long, CallTaskStatModel> statModelMap = statModels.stream().collect(Collectors.toMap(CallTaskStatModel::getBatchId, v -> v, (k1, k2) -> k1));
+                list.forEach(task -> {
+                    CallTaskStatModel statModel = Optional.ofNullable(task.getRemoteBatchId()).map(statModelMap::get).orElse(null);
+                    if (statModel != null) {
+                        task.setPhoneCount(statModel.getPhoneCount());
+                        task.setCallCount(statModel.getCallCount());
+                        task.setNoCallCount(statModel.getPhoneCount() - statModel.getCallCount());
+                        task.setConnectCount(statModel.getConnectCount());
+                        task.setNoConnectCount(statModel.getPhoneCount() - statModel.getConnectCount());
+                        if (task.getCallCount() > 0) {
+                            task.setRealConnectRate(BigDecimal.valueOf(task.getConnectCount() * 100.0 / task.getCallCount()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                        } else {
+                            task.setRealConnectRate(0.00);
+                        }
+                    } else {
+                        task.setPhoneCount(0);
+                        task.setCallCount(0);
+                        task.setNoCallCount(0);
+                        task.setConnectCount(0);
+                        task.setNoConnectCount(0);
+                        task.setRealConnectRate(0.00);
+                    }
+                });
             }
-        });
+        }
         return getDataTable(list);
     }
 

+ 9 - 4
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallUserController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * sip用户信息Controller
@@ -141,12 +142,16 @@ public class AiSipCallUserController extends BaseController
 
     /**
      * 查询aiSIP工具条基础配置参数
-     * @param extNum 分机号
+     * @param param 参数
      * @return AjaxResult 结果
      */
-    @GetMapping("/getToolbarBasicParam/{extNum}")
-    public AjaxResult getToolbarBasicParam(@PathVariable("extNum") String extNum)
+    @PostMapping("/getToolbarBasicParam")
+    public AjaxResult getToolbarBasicParam(@RequestBody Map<String,String> param)
     {
-        return aiSipCallUserService.getToolbarBasicParam(extNum);
+        String extNum = param.get("extNum");
+        if(extNum == null){
+            return AjaxResult.error("分机号参数缺失");
+        }
+        return aiSipCallUserService.getToolbarBasicParam(param);
     }
 }

+ 11 - 11
fs-service/src/main/java/com/fs/aiSipCall/RemoteCommon.java

@@ -15,9 +15,13 @@ public class RemoteCommon {
     /**
      * 远程接口地址前缀
      */
-//    public static final String REMOTE_ADDERSS_PREFIX = "http://129.28.164.235:8899";
-    public static final String REMOTE_ADDERSS_PREFIX = "http://127.0.0.1:8899";
+    public static final String REMOTE_ADDERSS_PREFIX = "http://129.28.164.235:8899";
+//    public static final String REMOTE_ADDERSS_PREFIX = "http://127.0.0.1:8899";
 
+    /**
+     * 网关列表接口
+     */
+    public static final String GATEWAY_MY_LIST_API = "/aicall/api/gateway/myList";
     /**
      * 网关列表接口
      */
@@ -63,13 +67,13 @@ public class RemoteCommon {
      */
     public static final String COMMON_ADD_CALL_LIST_API = "/aicall/api/common/addCallList";
     /**
-     * 录音文件下载接口
+     * 查询任务统计接口
      */
-    public static final String RECORDINGS_FILES_API = "/recordings/files";
+    public static final String QUERY_TASK_CONNECT_SUM_API = "/aicall/api/task/connectSum";
     /**
      * 获取电话工具条的网关列表
      */
-    public static final String PHONEBAR_PARAMS_API = "/aicall/api/phoneBar/params";
+    public static final String PHONEBAR_PARAMS_API = "/aicall/api/myPhoneBar/params";
 
     /**
      * 新增用户并绑定分机
@@ -94,10 +98,6 @@ public class RemoteCommon {
      * 新增保存手动外呼沟通记录
      */
     public static final String ADD_CUSTCALL_RECORD_API = "/aicall/api/add/custcallrecord";
-    /**
-     * 查询外呼记录列表
-     */
-    public static final String QUERY_OUTBOUNDCDR_LIST_API = "/aicall/api/outboundcdrList";
     /**
      * 根据uuid和外呼类型查询外呼记录
      */
@@ -113,7 +113,7 @@ public class RemoteCommon {
             return HttpUtil.get(url, 10 * 1000);
         }catch (Exception e){
             e.printStackTrace();
-            log.info("sendGet error");
+            log.error("sendGet error:" + e);
         }
         return null;
     }
@@ -127,7 +127,7 @@ public class RemoteCommon {
             return HttpUtil.post(url, jsonBody);
         }catch (Exception e){
             e.printStackTrace();
-            log.info("sendPost error");
+            log.error("sendPost error:" + e);
         }
         return null;
     }

+ 3 - 0
fs-service/src/main/java/com/fs/aiSipCall/domain/AiSipCallUser.java

@@ -91,6 +91,9 @@ public class AiSipCallUser extends BaseEntity{
     /** 绑定的分机号 */
     @Excel(name = "绑定的分机号")
     private Long extNum;
+    /** 网关字符串 */
+    @Excel(name = "网关字符串")
+    private String gatewayIds;
 
     private Long companyId;
     private Long companyUserId;

+ 0 - 1
fs-service/src/main/java/com/fs/aiSipCall/domain/CcCustCallRecord.java

@@ -1,6 +1,5 @@
 package com.fs.aiSipCall.domain;
 
-//import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import lombok.Data;

+ 15 - 2
fs-service/src/main/java/com/fs/aiSipCall/param/ApiCallRecordQueryParams.java

@@ -10,7 +10,8 @@ public class ApiCallRecordQueryParams implements Serializable {
 
     private Integer pageNum;
     private Integer pageSize;
-
+    /** uuid */
+    private String uuid;
     /** 类型(01:呼入, 02:AI外呼, 03:人工外呼) */
     private String callType;
     /** 任务ID */
@@ -28,9 +29,21 @@ public class ApiCallRecordQueryParams implements Serializable {
     /** 接听时间起止 */
     private String answeredTimeStart;
     private String answeredTimeEnd;
-    /** 挂机时间起止 */
+    /** 自动外呼挂机时间起止 */
     private String callEndTimeStart;
     private String callEndTimeEnd;
+    /** 手动外呼挂机时间起止 */
+    private String endTimeStart;
+    private String endTimeEnd;
+
     /** 分机号 */
     private String extnum;
+
+    /** callType=02时可用 */
+    /** 0. 未拨打;1. 排队中;2. 正在拨打 ;3. 未接通 ;6. 成功转接;7. 线路故障 */
+    private Integer callstatus;
+
+    /** callType=02时可用 */
+    /** 主叫号码 */
+    private String callerNumber;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallGatewayService.java

@@ -2,6 +2,7 @@ package com.fs.aiSipCall.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aiSipCall.domain.AiSipCallGateway;
+import com.fs.common.core.page.TableDataInfo;
 
 import java.util.List;
 
@@ -59,4 +60,6 @@ public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
      * @return 结果
      */
     int deleteAiSipCallGatewayById(Long id);
+
+    TableDataInfo remoteList(AiSipCallGateway aiSipCallGateway);
 }

+ 4 - 0
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallOutboundCdrService.java

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aiSipCall.domain.AiSipCallOutboundCdr;
 import com.fs.aiSipCall.domain.CcCustInfo;
 import com.fs.aiSipCall.param.ApiCallRecordByUuidQueryParams;
+import com.fs.aiSipCall.param.ApiCallRecordQueryParams;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
 
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
@@ -71,4 +73,6 @@ public interface IAiSipCallOutboundCdrService extends IService<AiSipCallOutbound
     CompletableFuture<String> scheduledGetCallRecord();
 
     int syncByUuid(ApiCallRecordByUuidQueryParams req);
+
+    TableDataInfo remoteList(ApiCallRecordQueryParams aiSipCallOutboundCdr);
 }

+ 4 - 0
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallPhoneService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aiSipCall.domain.AiSipCallPhone;
 import com.fs.aiSipCall.dto.CallTaskStatModel;
 import com.fs.aiSipCall.dto.CommonPhoneModel;
+import com.fs.aiSipCall.param.ApiCallRecordQueryParams;
+import com.fs.common.core.page.TableDataInfo;
 
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
@@ -81,4 +83,6 @@ public interface IAiSipCallPhoneService extends IService<AiSipCallPhone>{
      * 拉取当天记录
      */
     CompletableFuture<String> scheduledGetCallRecord();
+
+    TableDataInfo remoteList(ApiCallRecordQueryParams aiSipCallPhone);
 }

+ 2 - 0
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallTaskService.java

@@ -71,4 +71,6 @@ public interface IAiSipCallTaskService extends IService<AiSipCallTask>{
     CallTaskStatModel statByBatchId(Long batchId);
 
     AiSipCallTask selectAiSipCallTaskByRemoteBatchId(Long remoteBatchId);
+
+    List<CallTaskStatModel> remoteStatByBatchId(List<Long> batchIds);
 }

+ 4 - 2
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallUserService.java

@@ -5,6 +5,7 @@ import com.fs.aiSipCall.domain.AiSipCallUser;
 import com.fs.common.core.domain.AjaxResult;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * sip用户信息Service接口
@@ -65,8 +66,9 @@ public interface IAiSipCallUserService extends IService<AiSipCallUser>{
 
     /**
      * 查询aiSIP工具条基础配置参数
-     * @param extNum 分机号
+     * @param param extNum分机号
+     * @param param extNum网关参数
      * @return AjaxResult 结果
      */
-    AjaxResult getToolbarBasicParam(String extNum);
+    AjaxResult getToolbarBasicParam(Map<String,String> param);
 }

+ 15 - 0
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallGatewayServiceImpl.java

@@ -6,6 +6,7 @@ import com.fs.aiSipCall.RemoteCommon;
 import com.fs.aiSipCall.domain.AiSipCallGateway;
 import com.fs.aiSipCall.mapper.AiSipCallGatewayMapper;
 import com.fs.aiSipCall.service.IAiSipCallGatewayService;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -23,6 +24,20 @@ import java.util.List;
 @Service
 public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMapper, AiSipCallGateway> implements IAiSipCallGatewayService {
 
+    @Override
+    public TableDataInfo remoteList(AiSipCallGateway aiSipCallGateway) {
+        //先使用远程网关
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.GATEWAY_MY_LIST_API, JSONObject.toJSONString(aiSipCallGateway));
+        if(StringUtils.isNotBlank(result)){
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            if(jsonObject.getInteger("code") == 0){
+                return JSONObject.parseObject(result, TableDataInfo.class);
+            }else{
+                log.error("获取网关接口失败:{}", jsonObject.getString("msg"));
+            }
+        }
+        return null;
+    }
     /**
      * 查询aiSIP外呼网关
      * 

+ 42 - 21
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallOutboundCdrServiceImpl.java

@@ -12,6 +12,7 @@ import com.fs.aiSipCall.service.IAiSipCallOutboundCdrService;
 import com.fs.aiSipCall.utils.DateUtils;
 import com.fs.aiSipCall.vo.ApiCallRecordQueryVo;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.company.domain.CompanyVoiceRoboticCallLogCallphone;
 import com.fs.company.mapper.CompanyVoiceRoboticCallLogCallphoneMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -43,6 +44,27 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
     public AiSipCallOutboundCdr selectAiSipCallOutboundCdrById(String id) {
         return baseMapper.selectAiSipCallOutboundCdrById(id);
     }
+    /**
+     * 查询aiSIP手动外呼通话记录列表
+     *
+     * @param aiSipCallOutboundCdr aiSIP手动外呼通话记录
+     * @return aiSIP手动外呼通话记录
+     */
+    @Override
+    public TableDataInfo remoteList(ApiCallRecordQueryParams aiSipCallOutboundCdr)
+    {
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.CALL_RECORDS_API,JSONObject.toJSONString(aiSipCallOutboundCdr));
+        if(StringUtils.isNotBlank(result)){
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            if(jsonObject.getInteger("code") == 0){
+                return JSONObject.parseObject(result, TableDataInfo.class);
+            }else{
+                log.error("获取手动外呼记录接口失败:{}", jsonObject.getString("msg"));
+            }
+        }
+        return null;
+    }
+
     /**
      * 查询aiSIP手动外呼通话记录列表
      * 
@@ -166,12 +188,12 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
     @Async
     public CompletableFuture<String> scheduledGetCallRecord() {
         if (!isRunning.compareAndSet(false, true)) {
-            log.warn("scheduledGetCallRecord 任务正在执行中,请稍后再试");
+            log.error("sip手动外呼同步电话 任务正在执行中,请稍后再试");
             return CompletableFuture.completedFuture("任务正在执行中,请稍后再试");
         }
 
         try {
-            log.info("开始执行 scheduledGetCallRecord 异步任务");
+            log.error("sip手动外呼同步电话 开始执行异步任务");
             String todayStartStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date()) + " 00:00:00";
             String now = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, new Date());
             long startTime = System.currentTimeMillis();
@@ -182,7 +204,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
             // 获取远程数据
             List<AiSipCallOutboundCdr> remoteList = fetchAllRemoteCallRecords(paramsList);
             if (remoteList.isEmpty()) {
-                log.info("scheduledGetCallRecord 异步任务完成,耗时:{}ms, 结果:当天无最新数据", System.currentTimeMillis() - startTime);
+                log.error("sip手动外呼同步电话 异步任务完成,耗时:{}ms, 结果:当天无最新数据", System.currentTimeMillis() - startTime);
                 return CompletableFuture.completedFuture("当天无最新数据");
             }
 
@@ -191,10 +213,10 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
 
             // 筛选并处理新增和更新数据
             String result = processAndSaveData(remoteList, localList);
-            log.info("scheduledGetCallRecord 异步任务完成,耗时:{}ms, 结果:{}", System.currentTimeMillis() - startTime, result);
+            log.error("sip手动外呼同步电话 异步任务完成,耗时:{}ms, 结果:{}", System.currentTimeMillis() - startTime, result);
             return CompletableFuture.completedFuture(result);
         } catch (Exception e) {
-            log.error("scheduledGetCallRecord 异步任务执行失败", e);
+            log.error("sip手动外呼同步电话 异步任务执行失败", e);
             return CompletableFuture.completedFuture("任务执行失败:" + e.getMessage());
         } finally {
             isRunning.set(false);
@@ -255,19 +277,18 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
                 params.setPageNum(currentPage);
                 List<AiSipCallOutboundCdr> pageData = fetchSinglePageRecords(params);
 
-                // 失败时跳过该页,继续下一页
+                // 失败时直接结束
                 if (pageData == null) {
-                    log.warn("分页查询第{}页失败,已丢弃该页数据", currentPage);
-                    currentPage++;
-                    continue;
+                    log.error("sip手动外呼同步电话 分页查询第{}页失败,已丢弃该页数据,停止查询", currentPage);
+                    break;
                 }
 
                 if (pageData.isEmpty()) {
-                    log.info("第{}页无数据,查询结束", currentPage);
+                    log.error("sip手动外呼同步电话 第{}页无数据,查询结束", currentPage);
                     hasMore = false;
                 } else {
                     allRecords.addAll(pageData);
-                    log.debug("第{}页数据:{},累计总数:{}", currentPage, pageData.size(), allRecords.size());
+                    log.error("sip手动外呼同步电话 第{}页数据:{},累计总数:{}", currentPage, pageData.size(), allRecords.size());
 
                     // 如果返回数据少于页大小,说明已是最后一页
                     if (pageData.size() < params.getPageSize()) {
@@ -278,13 +299,13 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
 
                 // 安全限制:最多拉取 50 页
                 if (currentPage > 50) {
-                    log.warn("已达到最大页数限制 50 页,停止查询。已获取数据量:{}", allRecords.size());
+                    log.error("sip手动外呼同步电话 已达到最大页数限制 50 页,停止查询。已获取数据量:{}", allRecords.size());
                     hasMore = false;
                 }
             }
         }
 
-        log.info("远程数据获取完成,总计:{} 条", allRecords.size());
+        log.error("sip手动外呼同步电话 远程数据获取完成,总计:{} 条", allRecords.size());
         return allRecords.isEmpty() ? Collections.emptyList() : allRecords;
     }
 
@@ -301,7 +322,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
             );
 
             if (StringUtils.isBlank(result)) {
-                log.error("查询第{}页失败:接口返回为空", params.getPageNum());
+                log.error("sip手动外呼同步电话 查询第{}页失败:接口返回为空", params.getPageNum());
                 return null;
             }
 
@@ -311,7 +332,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
             if (code == null || code != 0) {
                 String errorMsg = jsonObject.getString("msg") != null
                         ? jsonObject.getString("msg") : "未知错误";
-                log.error("查询第{}页失败:{}", params.getPageNum(), errorMsg);
+                log.error("sip手动外呼同步电话 查询第{}页失败:{}", params.getPageNum(), errorMsg);
                 return null;
             }
 
@@ -327,7 +348,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
 
             return JSONObject.parseArray(rows, AiSipCallOutboundCdr.class);
         } catch (Exception e) {
-            log.error("查询第{}页异常", params.getPageNum(), e);
+            log.error("sip手动外呼同步电话 查询第{}页异常", params.getPageNum(), e);
             return null;
         }
     }
@@ -344,7 +365,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
         }
 
         if (localList == null || localList.isEmpty()) {
-            log.warn("本地数据列表为空,所有远程数据都将作为新增处理");
+            log.error("sip手动外呼同步电话 本地数据列表为空,所有远程数据都将作为新增处理");
             return processDataWithStats(remoteList, "新增");
         }
 
@@ -368,7 +389,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
             }
         }
 
-        log.info("数据筛选完成 - 预计新增:{},预计更新:{}", insertList.size(), updateList.size());
+        log.error("sip手动外呼同步电话 数据筛选完成 - 预计新增:{},预计更新:{}", insertList.size(), updateList.size());
 
         StringBuilder resultMsg = new StringBuilder();
         if (!insertList.isEmpty()) {
@@ -392,7 +413,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
      * @return 处理结果信息
      */
     private String processDataWithStats(List<AiSipCallOutboundCdr> dataList,String operationType) {
-        log.info("开始处理{}Ai 外呼记录数据,数量:{}", operationType, dataList.size());
+        log.error("sip手动外呼同步电话 开始处理{}Ai 外呼记录数据,数量:{}", operationType, dataList.size());
         if (dataList.isEmpty()) {
             return "无有效数据,无需处理";
         }
@@ -416,12 +437,12 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
                     this.updateBatchById(batchList);
                 }
                 successCount += batchList.size();
-                log.debug("第{}/{}批{}成功,本批数量:{}", i + 1, batchCount, operationType, batchList.size());
+                log.error("sip手动外呼同步电话 第{}/{}批{}成功,本批数量:{}", i + 1, batchCount, operationType, batchList.size());
             } catch (Exception e) {
                 failCount += batchList.size();
                 int[] range = {fromIndex, toIndex - 1};
                 failedBatchRanges.add(range);
-                log.error("第{}批数据{}失败,本批数量:{},起始位:{},结束位:{}",
+                log.error("sip手动外呼同步电话 第{}批数据{}失败,本批数量:{},起始位:{},结束位:{}",
                         i + 1, operationType, batchList.size(), fromIndex, toIndex - 1, e);
             }
         }

+ 69 - 55
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallPhoneServiceImpl.java

@@ -10,6 +10,7 @@ import com.fs.aiSipCall.mapper.AiSipCallPhoneMapper;
 import com.fs.aiSipCall.param.ApiCallRecordQueryParams;
 import com.fs.aiSipCall.service.IAiSipCallPhoneService;
 import com.fs.aiSipCall.utils.DateUtils;
+import com.fs.common.core.page.TableDataInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.scheduling.annotation.Async;
@@ -41,6 +42,19 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
         return baseMapper.selectAiSipCallPhoneById(id);
     }
 
+    @Override
+    public TableDataInfo remoteList(ApiCallRecordQueryParams aiSipCallPhone) {
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.CALL_RECORDS_API,JSONObject.toJSONString(aiSipCallPhone));
+        if(StringUtils.isNotBlank(result)){
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            if(jsonObject.getInteger("code") == 0){
+                return JSONObject.parseObject(result, TableDataInfo.class);
+            }else{
+                log.error("获取自动外呼记录接口失败:{}", jsonObject.getString("msg"));
+            }
+        }
+        return null;
+    }
     /**
      * 查询aiSIP外呼通话记录列表
      *
@@ -148,12 +162,12 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
     @Async
     public CompletableFuture<String> scheduledGetCallRecord() {
         if (!isRunning.compareAndSet(false, true)) {
-            log.warn("scheduledGetCallRecord 任务正在执行中,请稍后再试");
+            log.error("sip自动外呼同步电话 任务正在执行中,请稍后再试");
             return CompletableFuture.completedFuture("任务正在执行中,请稍后再试");
         }
 
         try {
-            log.info("开始执行 scheduledGetCallRecord 异步任务");
+            log.error("sip自动外呼同步电话 开始执行 scheduledGetCallRecord 异步任务");
             String todayStartStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date()) + " 00:00:00";
             String now = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, new Date());
             long startTime = System.currentTimeMillis();
@@ -164,7 +178,7 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
             // 获取远程数据
             List<AiSipCallPhone> remoteList = fetchAllRemoteCallRecords(paramsList);
             if (remoteList.isEmpty()) {
-                log.info("scheduledGetCallRecord 异步任务完成,耗时:{}ms, 结果:当天无最新数据", System.currentTimeMillis() - startTime);
+                log.error("sip自动外呼同步电话 异步任务完成,耗时:{}ms, 结果:当天无最新数据", System.currentTimeMillis() - startTime);
                 return CompletableFuture.completedFuture("当天无最新数据");
             }
 
@@ -173,28 +187,29 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
 
             // 筛选并处理新增和更新数据
             String result = processAndSaveData(remoteList, localList);
-            log.info("scheduledGetCallRecord 异步任务完成,耗时:{}ms, 结果:{}", System.currentTimeMillis() - startTime, result);
+            log.error("sip自动外呼同步电话 异步任务完成,耗时:{}ms, 结果:{}", System.currentTimeMillis() - startTime, result);
             return CompletableFuture.completedFuture(result);
         } catch (Exception e) {
-            log.error("scheduledGetCallRecord 异步任务执行失败", e);
+            log.error("sip自动外呼同步电话异步任务执行失败", e);
             return CompletableFuture.completedFuture("任务执行失败:" + e.getMessage());
         } finally {
             isRunning.set(false);
         }
     }
-        
+
+
     /**
      * 构建当天查询参数 - 使用当天 00:00:00 到当前时间
      * @return 查询参数对象列表(支持多时段查询)
      */
     private List<ApiCallRecordQueryParams> buildDayQueryParams(String todayStartStr,String now) {
-        
+
         List<ApiCallRecordQueryParams> paramsList = new ArrayList<>();
-        
+
         // 如果时间跨度超过 12 小时,分段查询避免遗漏
         Date today = DateUtils.parseDate(todayStartStr);
         long hoursDiff = (System.currentTimeMillis() - today.getTime()) / (1000 * 60 * 60);
-        
+
         if (hoursDiff > 12) {
             // 分两段查询:00:00-12:00 和 12:00-当前时间
             ApiCallRecordQueryParams params1 = createSingleParam(todayStartStr, todayStartStr.substring(0, 10) + " 12:00:00");
@@ -205,10 +220,10 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
             // 单段查询:00:00-当前时间
             paramsList.add(createSingleParam(todayStartStr, now));
         }
-        
+
         return paramsList;
     }
-    
+
     /**
      * 创建单个查询参数对象
      */
@@ -221,7 +236,7 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
         params.setCalloutTimeEnd(endTime);
         return params;
     }
-        
+
     /**
      * 分页轮询获取所有远程通话记录 (带去重和失败重试)
      * @param paramsList 查询参数列表
@@ -232,44 +247,43 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
         for (ApiCallRecordQueryParams params : paramsList) {
             int currentPage = 1;
             boolean hasMore = true;
-                
+
             while (hasMore) {
                 params.setPageNum(currentPage);
                 List<AiSipCallPhone> pageData = fetchSinglePageRecords(params);
-                    
-                // 失败时跳过该页,继续下一页
+
+                // 失败时直接结束
                 if (pageData == null) {
-                    log.warn("分页查询第{}页失败,已丢弃该页数据", currentPage);
-                    currentPage++;
-                    continue;
+                    log.error("sip自动外呼同步电话 分页查询第{}页失败,已丢弃该页数据,停止查询", currentPage);
+                    break;
                 }
-                    
+
                 if (pageData.isEmpty()) {
-                    log.info("第{}页无数据,查询结束", currentPage);
+                    log.error("sip自动外呼同步电话 第{}页无数据,查询结束", currentPage);
                     hasMore = false;
                 } else {
                     allRecords.addAll(pageData);
-                    log.debug("第{}页数据:{},累计总数:{}", currentPage, pageData.size(), allRecords.size());
-                        
+                    log.error("sip自动外呼同步电话 第{}页数据:{},累计总数:{}", currentPage, pageData.size(), allRecords.size());
+
                     // 如果返回数据少于页大小,说明已是最后一页
                     if (pageData.size() < params.getPageSize()) {
                         hasMore = false;
                     }
                     currentPage++;
                 }
-                    
+
                 // 安全限制:最多拉取 50 页
                 if (currentPage > 50) {
-                    log.warn("已达到最大页数限制 50 页,停止查询。已获取数据量:{}", allRecords.size());
+                    log.error("sip自动外呼同步电话 已达到最大页数限制 50 页,停止查询。已获取数据量:{}", allRecords.size());
                     hasMore = false;
                 }
             }
         }
-            
-        log.info("远程数据获取完成,总计:{} 条", allRecords.size());
+
+        log.error("sip自动外呼同步电话 远程数据获取完成,总计:{} 条", allRecords.size());
         return allRecords.isEmpty() ? Collections.emptyList() : allRecords;
     }
-    
+
     /**
      * 获取单页数据
      * @param params 查询参数(需预先设置页码)
@@ -278,25 +292,25 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
     private List<AiSipCallPhone> fetchSinglePageRecords(ApiCallRecordQueryParams params) {
         try {
             String result = RemoteCommon.sendPost(
-                RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.CALL_RECORDS_API, 
-                JSONObject.toJSONString(params)
+                    RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.CALL_RECORDS_API,
+                    JSONObject.toJSONString(params)
             );
-                
+
             if (StringUtils.isBlank(result)) {
-                log.error("查询第{}页失败:接口返回为空", params.getPageNum());
+                log.error("sip自动外呼同步电话 查询第{}页失败:接口返回为空", params.getPageNum());
                 return null;
             }
-                
+
             JSONObject jsonObject = JSONObject.parseObject(result);
             Integer code = jsonObject.getInteger("code");
-                
+
             if (code == null || code != 0) {
                 String errorMsg = jsonObject.getString("msg") != null
-                    ? jsonObject.getString("msg") : "未知错误";
-                log.error("查询第{}页失败:{}", params.getPageNum(), errorMsg);
+                        ? jsonObject.getString("msg") : "未知错误";
+                log.error("sip自动外呼同步电话 查询第{}页失败:{}", params.getPageNum(), errorMsg);
                 return null;
             }
-                
+
             Long total = jsonObject.getLong("total");
             if (total == null || total <= 0) {
                 return Collections.emptyList();
@@ -309,7 +323,7 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
 
             return JSONObject.parseArray(rows, AiSipCallPhone.class);
         } catch (Exception e) {
-            log.error("查询第{}页异常", params.getPageNum(), e);
+            log.error("sip自动外呼同步电话 查询第{}页异常", params.getPageNum(), e);
             return null;
         }
     }
@@ -324,9 +338,9 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
         if (remoteList == null || remoteList.isEmpty()) {
             return "远程数据列表为空,无需处理";
         }
-    
+
         if (localList == null || localList.isEmpty()) {
-            log.warn("本地数据列表为空,所有远程数据都将作为新增处理");
+            log.warn("sip自动外呼同步电话 本地数据列表为空,所有远程数据都将作为新增处理");
             return processDataWithStats(remoteList, "新增");
         }
 
@@ -334,11 +348,11 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
         Set<String> localIdSet = localList.stream()
                 .map(AiSipCallPhone::getId)
                 .collect(Collectors.toSet());
-            
+
         // 分类数据:新增和更新
         List<AiSipCallPhone> insertList = new ArrayList<>();
         List<AiSipCallPhone> updateList = new ArrayList<>();
-            
+
         for (AiSipCallPhone remote : remoteList) {
             if (StringUtils.isBlank(remote.getId())) {
                 continue;
@@ -350,20 +364,20 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
             }
         }
 
-        log.info("数据筛选完成 - 预计新增:{},预计更新:{}", insertList.size(), updateList.size());
-    
+        log.error("sip自动外呼同步电话 数据筛选完成 - 预计新增:{},预计更新:{}", insertList.size(), updateList.size());
+
         StringBuilder resultMsg = new StringBuilder();
         if (!insertList.isEmpty()) {
             resultMsg.append(processDataWithStats(insertList, "新增"));
         }
-            
+
         if (!updateList.isEmpty()) {
             if (resultMsg.length() > 0) {
                 resultMsg.append(",");
             }
             resultMsg.append(processDataWithStats(updateList, "更新"));
         }
-            
+
         return resultMsg.toString();
     }
 
@@ -374,23 +388,23 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
      * @return 处理结果信息
      */
     private String processDataWithStats(List<AiSipCallPhone> dataList,String operationType) {
-        log.info("开始处理{}Ai 外呼记录数据,数量:{}", operationType, dataList.size());
+        log.error("sip自动外呼同步电话 开始处理{}Ai 外呼记录数据,数量:{}", operationType, dataList.size());
         if (dataList.isEmpty()) {
             return "无有效数据,无需处理";
         }
-    
+
         int batchSize = 500;
         int totalSize = dataList.size();
         int batchCount = (totalSize + batchSize - 1) / batchSize;
         int successCount = 0;
         int failCount = 0;
         List<int[]> failedBatchRanges = new ArrayList<>();
-    
+
         for (int i = 0; i < batchCount; i++) {
             int fromIndex = i * batchSize;
             int toIndex = Math.min(fromIndex + batchSize, totalSize);
             List<AiSipCallPhone> batchList = dataList.subList(fromIndex, toIndex);
-    
+
             try {
                 if ("新增".equals(operationType)) {
                     this.saveBatch(batchList);
@@ -398,20 +412,20 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
                     this.updateBatchById(batchList);
                 }
                 successCount += batchList.size();
-                log.debug("第{}/{}批{}成功,本批数量:{}", i + 1, batchCount, operationType, batchList.size());
+                log.error("sip自动外呼同步电话 第{}/{}批{}成功,本批数量:{}", i + 1, batchCount, operationType, batchList.size());
             } catch (Exception e) {
                 failCount += batchList.size();
                 int[] range = {fromIndex, toIndex - 1};
                 failedBatchRanges.add(range);
-                log.error("第{}批数据{}失败,本批数量:{},起始位:{},结束位:{}", 
-                         i + 1, operationType, batchList.size(), fromIndex, toIndex - 1, e);
+                log.error("sip自动外呼同步电话 第{}批数据{}失败,本批数量:{},起始位:{},结束位:{}",
+                        i + 1, operationType, batchList.size(), fromIndex, toIndex - 1, e);
             }
         }
-    
+
         StringBuilder result = new StringBuilder();
         result.append(operationType).append("数据处理完成,总计:").append(totalSize).append("条");
         result.append(",成功:").append(successCount).append("条");
-            
+
         if (failCount > 0) {
             result.append(",失败:").append(failCount).append("条");
             result.append(",失败数据位置:");
@@ -421,7 +435,7 @@ public class AiSipCallPhoneServiceImpl extends ServiceImpl<AiSipCallPhoneMapper,
                 result.append("[").append(range[0]).append("-").append(range[1]).append("]");
             }
         }
-            
+
         return result.toString();
     }
 

+ 19 - 0
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallTaskServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fs.aiSipCall.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.aiSipCall.RemoteCommon;
 import com.fs.aiSipCall.domain.AiSipCallTask;
@@ -17,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -275,4 +277,21 @@ public class AiSipCallTaskServiceImpl extends ServiceImpl<AiSipCallTaskMapper, A
     public AiSipCallTask selectAiSipCallTaskByRemoteBatchId(Long remoteBatchId) {
         return baseMapper.selectAiSipCallTaskByRemoteBatchId(remoteBatchId);
     }
+
+    @Override
+    public List<CallTaskStatModel> remoteStatByBatchId(List<Long> batchIds) {
+        //查询远程接口
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.QUERY_TASK_CONNECT_SUM_API, JSONObject.toJSONString(batchIds));
+        if(StringUtils.isNotBlank(result)){
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            if(jsonObject.getInteger("code") == 0){
+                return JSONObject.parseObject(jsonObject.getString("data"), new TypeReference<List<CallTaskStatModel>>(){});
+            }else{
+                log.error("查询任务统计失败:{}", jsonObject.getString("msg"));
+            }
+        }else{
+            log.error("查询任务统计失败:{}", "接口返回为空");
+        }
+        return Collections.emptyList();
+    }
 }

+ 3 - 2
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallUserServiceImpl.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * sip用户信息Service业务层处理
@@ -166,9 +167,9 @@ public class AiSipCallUserServiceImpl extends ServiceImpl<AiSipCallUserMapper, A
     }
 
     @Override
-    public AjaxResult getToolbarBasicParam(String extNum) {
+    public AjaxResult getToolbarBasicParam(Map<String,String> param) {
         //先使用远程网关
-        String result = RemoteCommon.sendGet(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.PHONEBAR_PARAMS_API + "?extNum=" + extNum);
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.PHONEBAR_PARAMS_API,JSONObject.toJSONString(param));
         if(StringUtils.isNotBlank(result)){
             JSONObject jsonObject = JSONObject.parseObject(result);
             if(jsonObject.getInteger("code") == 0){

+ 14 - 10
fs-service/src/main/resources/mapper/aiSipCall/AiSipCallUserMapper.xml

@@ -1,9 +1,9 @@
 <?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">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.aiSipCall.mapper.AiSipCallUserMapper">
-    
+
     <resultMap type="AiSipCallUser" id="AiSipCallUserResult">
         <result property="userId"    column="user_id"    />
         <result property="deptId"    column="dept_id"    />
@@ -30,15 +30,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime"    column="update_time"    />
         <result property="companyId"    column="company_id"    />
         <result property="companyUserId"    column="company_user_id"    />
+        <result property="gatewayIds"    column="gateway_ids"    />
     </resultMap>
 
     <sql id="selectAiSipCallUserVo">
-        select user_id, dept_id, login_name, user_name, user_type, email, phonenumber, sex, avatar, password, salt, status, del_flag, login_ip, login_date, pwd_update_date, remark, logo, ext_num, create_by, create_time, update_by, update_time, company_id,company_user_id from ai_sip_call_user
+        select user_id, dept_id, login_name, user_name, user_type, email, phonenumber, sex, avatar, password, salt, status, del_flag, login_ip, login_date, pwd_update_date, remark, logo, ext_num, create_by, create_time, update_by, update_time, company_id,company_user_id,gateway_ids from ai_sip_call_user
     </sql>
 
     <select id="selectAiSipCallUserList" parameterType="AiSipCallUser" resultMap="AiSipCallUserResult">
         <include refid="selectAiSipCallUserVo"/>
-        <where>  
+        <where>
             <if test="deptId != null "> and dept_id = #{deptId}</if>
             <if test="loginName != null  and loginName != ''"> and login_name like concat('%', #{loginName}, '%')</if>
             <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
@@ -59,12 +60,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
         </where>
     </select>
-    
+
     <select id="selectAiSipCallUserByUserId" parameterType="Long" resultMap="AiSipCallUserResult">
         <include refid="selectAiSipCallUserVo"/>
         where user_id = #{userId}
     </select>
-        
+
     <insert id="insertAiSipCallUser" parameterType="AiSipCallUser">
         insert into ai_sip_call_user
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -93,7 +94,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyUserId != null">company_user_id,</if>
             <if test="extNum != null and extNum != ''">ext_num,</if>
             <if test="companyId != null ">company_id,</if>
-         </trim>
+            <if test="gatewayIds != null and gatewayIds != ''">gateway_ids,</if>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="userId != null">#{userId},</if>
             <if test="deptId != null">#{deptId},</if>
@@ -120,7 +122,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyUserId != null">#{companyUserId},</if>
             <if test="extNum != null and extNum != ''">#{extNum},</if>
             <if test="companyId != null">#{companyId},</if>
-         </trim>
+            <if test="gatewayIds != null and gatewayIds != ''">#{gatewayIds},</if>
+        </trim>
     </insert>
 
     <update id="updateAiSipCallUser" parameterType="AiSipCallUser">
@@ -150,6 +153,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
             <if test="extNum != null and extNum != ''">ext_num = #{extNum},</if>
             <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="gatewayIds != null and gatewayIds != ''">gateway_ids = #{gatewayIds},</if>
         </trim>
         where user_id = #{userId}
     </update>
@@ -159,7 +163,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteAiSipCallUserByUserIds" parameterType="String">
-        delete from ai_sip_call_user where user_id in 
+        delete from ai_sip_call_user where user_id in
         <foreach item="userId" collection="array" open="(" separator="," close=")">
             #{userId}
         </foreach>