Selaa lähdekoodia

新版sip代码同步

zyy 2 viikkoa sitten
vanhempi
commit
debf203ebe

+ 15 - 5
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallGatewayController.java

@@ -32,14 +32,24 @@ public class AiSipCallGatewayController extends BaseController
      * 查询aiSIP外呼网关列表
      */
     @PreAuthorize("@ss.hasPermi('company:aiSipCall:gateway:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(AiSipCallGateway aiSipCallGateway)
+    @PostMapping("/remoteList")
+    public TableDataInfo list(@RequestBody AiSipCallGateway aiSipCallGateway)
     {
-        startPage();
-        List<AiSipCallGateway> list = aiSipCallGatewayService.selectAiSipCallGatewayList(aiSipCallGateway);
-        return getDataTable(list);
+        return aiSipCallGatewayService.remoteList(aiSipCallGateway);
     }
 
+    /**
+     * 查询aiSIP外呼网关列表
+     */
+//    @PreAuthorize("@ss.hasPermi('company:aiSipCall:gateway:list')")
+//    @GetMapping("/list")
+//    public TableDataInfo list(AiSipCallGateway aiSipCallGateway)
+//    {
+//        startPage();
+//        List<AiSipCallGateway> list = aiSipCallGatewayService.selectAiSipCallGatewayList(aiSipCallGateway);
+//        return getDataTable(list);
+//    }
+
     /**
      * 导出aiSIP外呼网关列表
      */

+ 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);
     }
 }

+ 15 - 9
fs-company/src/main/java/com/fs/company/controller/aiSipCall/AiSipCallVoiceTtsAliyunController.java

@@ -1,22 +1,28 @@
 package com.fs.company.controller.aiSipCall;
 
-import com.fs.aiSipCall.domain.AiSipCallVoiceTtsAliyun;
-import com.fs.aiSipCall.service.IAiSipCallVoiceTtsAliyunService;
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
-import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.aiSipCall.domain.AiSipCallVoiceTtsAliyun;
+import com.fs.aiSipCall.service.IAiSipCallVoiceTtsAliyunService;
 import com.fs.common.utils.poi.ExcelUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
+import com.fs.common.core.page.TableDataInfo;
 
 /**
  * aiSIP外呼阿里云音色Controller
- * 
+ *
  * @author fs
  * @date 2026-03-06
  */

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

@@ -15,13 +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_LIST_API = "/aicall/api/gateway/list";
+    public static final String GATEWAY_LIST_API = "/aicall/api/gateway/myList";
     /**
      * 音色列表接口
      */
@@ -62,14 +62,10 @@ 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 PHONEBAR_PARAMS_API = "/aicall/api/phoneBar/params";
+    public static final String PHONEBAR_PARAMS_API = "/aicall/api/myPhoneBar/params";
 
     /**
      * 新增用户并绑定分机
@@ -98,10 +94,6 @@ public class RemoteCommon {
      * 查询外呼记录列表
      */
     public static final String QUERY_OUTBOUNDCDR_LIST_API = "/aicall/api/outboundcdrList";
-    /**
-     * 根据uuid和外呼类型查询外呼记录
-     */
-    public static final String QUERY_OUTBOUNDCDR_BYUUID_API = "/aicall/api/record/uuid";
 
     /**
      * 发送get请求

+ 2 - 2
fs-service/src/main/java/com/fs/aiSipCall/domain/AiSipCallGateway.java

@@ -78,8 +78,8 @@ public class AiSipCallGateway extends BaseEntity{
     @Excel(name = "远程网关ID")
     private Long remoteGatewayId;
 
-    private Long pageSize;
+    private Integer pageSize;
 
-    private Long pageNum;
+    private Integer pageNum;
 
 }

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

@@ -1,13 +1,12 @@
 package com.fs.aiSipCall.domain;
 
+import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
-import com.fs.common.core.domain.BaseEntity;
 import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
 import lombok.EqualsAndHashCode;
 
-import java.util.Date;
-
 /**
  * sip用户信息对象 ai_sip_call_user
  *
@@ -91,6 +90,9 @@ public class AiSipCallUser extends BaseEntity{
     /** 绑定的分机号 */
     @Excel(name = "绑定的分机号")
     private Long extNum;
+    /** 网关字符串 */
+    @Excel(name = "网关字符串")
+    private String gatewayIds;
 
     private Long companyId;
     private Long companyUserId;

+ 10 - 7
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallGatewayService.java

@@ -2,19 +2,20 @@ 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;
 
 /**
  * aiSIP外呼网关Service接口
- * 
+ *
  * @author fs
  * @date 2026-03-06
  */
 public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
     /**
      * 查询aiSIP外呼网关
-     * 
+     *
      * @param id aiSIP外呼网关主键
      * @return aiSIP外呼网关
      */
@@ -22,7 +23,7 @@ public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
 
     /**
      * 查询aiSIP外呼网关列表
-     * 
+     *
      * @param aiSipCallGateway aiSIP外呼网关
      * @return aiSIP外呼网关集合
      */
@@ -30,7 +31,7 @@ public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
 
     /**
      * 新增aiSIP外呼网关
-     * 
+     *
      * @param aiSipCallGateway aiSIP外呼网关
      * @return 结果
      */
@@ -38,7 +39,7 @@ public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
 
     /**
      * 修改aiSIP外呼网关
-     * 
+     *
      * @param aiSipCallGateway aiSIP外呼网关
      * @return 结果
      */
@@ -46,7 +47,7 @@ public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
 
     /**
      * 批量删除aiSIP外呼网关
-     * 
+     *
      * @param ids 需要删除的aiSIP外呼网关主键集合
      * @return 结果
      */
@@ -54,9 +55,11 @@ public interface IAiSipCallGatewayService extends IService<AiSipCallGateway>{
 
     /**
      * 删除aiSIP外呼网关信息
-     * 
+     *
      * @param id aiSIP外呼网关主键
      * @return 结果
      */
     int deleteAiSipCallGatewayById(Long id);
+
+    TableDataInfo remoteList(AiSipCallGateway aiSipCallGateway);
 }

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

@@ -1,11 +1,12 @@
 package com.fs.aiSipCall.service;
 
+import java.util.List;
+import java.util.Map;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aiSipCall.domain.AiSipCallUser;
 import com.fs.common.core.domain.AjaxResult;
 
-import java.util.List;
-
 /**
  * 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);
 }

+ 8 - 9
fs-service/src/main/java/com/fs/aiSipCall/service/IAiSipCallVoiceTtsAliyunService.java

@@ -1,20 +1,19 @@
 package com.fs.aiSipCall.service;
 
+import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aiSipCall.domain.AiSipCallVoiceTtsAliyun;
 
-import java.util.List;
-
 /**
  * aiSIP外呼阿里云音色Service接口
- * 
+ *
  * @author fs
  * @date 2026-03-06
  */
 public interface IAiSipCallVoiceTtsAliyunService extends IService<AiSipCallVoiceTtsAliyun>{
     /**
      * 查询aiSIP外呼阿里云音色
-     * 
+     *
      * @param id aiSIP外呼阿里云音色主键
      * @return aiSIP外呼阿里云音色
      */
@@ -22,7 +21,7 @@ public interface IAiSipCallVoiceTtsAliyunService extends IService<AiSipCallVoice
 
     /**
      * 查询aiSIP外呼阿里云音色列表
-     * 
+     *
      * @param aiSipCallVoiceTtsAliyun aiSIP外呼阿里云音色
      * @return aiSIP外呼阿里云音色集合
      */
@@ -30,7 +29,7 @@ public interface IAiSipCallVoiceTtsAliyunService extends IService<AiSipCallVoice
 
     /**
      * 新增aiSIP外呼阿里云音色
-     * 
+     *
      * @param aiSipCallVoiceTtsAliyun aiSIP外呼阿里云音色
      * @return 结果
      */
@@ -38,7 +37,7 @@ public interface IAiSipCallVoiceTtsAliyunService extends IService<AiSipCallVoice
 
     /**
      * 修改aiSIP外呼阿里云音色
-     * 
+     *
      * @param aiSipCallVoiceTtsAliyun aiSIP外呼阿里云音色
      * @return 结果
      */
@@ -46,7 +45,7 @@ public interface IAiSipCallVoiceTtsAliyunService extends IService<AiSipCallVoice
 
     /**
      * 批量删除aiSIP外呼阿里云音色
-     * 
+     *
      * @param ids 需要删除的aiSIP外呼阿里云音色主键集合
      * @return 结果
      */
@@ -54,7 +53,7 @@ public interface IAiSipCallVoiceTtsAliyunService extends IService<AiSipCallVoice
 
     /**
      * 删除aiSIP外呼阿里云音色信息
-     * 
+     *
      * @param id aiSIP外呼阿里云音色主键
      * @return 结果
      */

+ 24 - 8
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;
@@ -15,7 +16,7 @@ import java.util.List;
 
 /**
  * aiSIP外呼网关Service业务层处理
- * 
+ *
  * @author fs
  * @date 2026-03-06
  */
@@ -25,7 +26,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
 
     /**
      * 查询aiSIP外呼网关
-     * 
+     *
      * @param id aiSIP外呼网关主键
      * @return aiSIP外呼网关
      */
@@ -37,7 +38,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
 
     /**
      * 查询aiSIP外呼网关列表
-     * 
+     *
      * @param aiSipCallGateway aiSIP外呼网关
      * @return aiSIP外呼网关
      */
@@ -45,7 +46,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
     public List<AiSipCallGateway> selectAiSipCallGatewayList(AiSipCallGateway aiSipCallGateway)
     {
         //先使用远程网关
-        String result = RemoteCommon.sendGet(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.GATEWAY_LIST_API);
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.GATEWAY_LIST_API, JSONObject.toJSONString(aiSipCallGateway));
         if(StringUtils.isNotBlank(result)){
             JSONObject jsonObject = JSONObject.parseObject(result);
             if(jsonObject.getInteger("code") == 0){
@@ -63,7 +64,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
 
     /**
      * 新增aiSIP外呼网关
-     * 
+     *
      * @param aiSipCallGateway aiSIP外呼网关
      * @return 结果
      */
@@ -75,7 +76,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
 
     /**
      * 修改aiSIP外呼网关
-     * 
+     *
      * @param aiSipCallGateway aiSIP外呼网关
      * @return 结果
      */
@@ -88,7 +89,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
 
     /**
      * 批量删除aiSIP外呼网关
-     * 
+     *
      * @param ids 需要删除的aiSIP外呼网关主键
      * @return 结果
      */
@@ -100,7 +101,7 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
 
     /**
      * 删除aiSIP外呼网关信息
-     * 
+     *
      * @param id aiSIP外呼网关主键
      * @return 结果
      */
@@ -109,4 +110,19 @@ public class AiSipCallGatewayServiceImpl extends ServiceImpl<AiSipCallGatewayMap
     {
         return baseMapper.deleteAiSipCallGatewayById(id);
     }
+
+    @Override
+    public TableDataInfo remoteList(AiSipCallGateway aiSipCallGateway) {
+        //先使用远程网关
+        String result = RemoteCommon.sendPost(RemoteCommon.REMOTE_ADDERSS_PREFIX + RemoteCommon.GATEWAY_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;
+    }
 }

+ 20 - 11
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallOutboundCdrServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fs.aiSipCall.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -16,8 +18,10 @@ import com.fs.aiSipCall.vo.ApiCallRecordQueryVo;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.company.domain.CompanyAiWorkflowExec;
+import com.fs.company.domain.CompanyVoiceRoboticBusiness;
 import com.fs.company.domain.CompanyVoiceRoboticCallLogCallphone;
 import com.fs.company.mapper.CompanyAiWorkflowExecMapper;
+import com.fs.company.mapper.CompanyVoiceRoboticBusinessMapper;
 import com.fs.company.mapper.CompanyVoiceRoboticCallLogCallphoneMapper;
 import com.fs.company.mapper.EasyCallMapper;
 import com.fs.company.param.ExecutionContext;
@@ -58,6 +62,8 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
 
     @Autowired
     private ObjectMapper objectMapper;
+    @Autowired
+    private CompanyVoiceRoboticBusinessMapper companyVoiceRoboticBusinessMapper;
 
 
     @Override
@@ -187,7 +193,7 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
     @Async
     public CompletableFuture<String> scheduledGetCallRecord() {
         if (!isRunning.compareAndSet(false, true)) {
-            log.warn("scheduledGetCallRecord 任务正在执行中,请稍后再试");
+            log.error("scheduledGetCallRecord 任务正在执行中,请稍后再试");
             return CompletableFuture.completedFuture("任务正在执行中,请稍后再试");
         }
 
@@ -276,19 +282,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()) {
@@ -299,13 +304,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;
     }
 
@@ -475,6 +480,8 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
         EasyCallCallPhoneVO callPhoneRes = easyCallMapper.getCallPhoneInfoByUuid(req.getUuid());
         String callBackUuid = UUID.randomUUID().toString();
         CompanyAiWorkflowExec record = currentExecutionMapper.selectByWorkflowInstanceId(req.getWorkflowInstanceId());
+        CompanyVoiceRoboticBusiness business = companyVoiceRoboticBusinessMapper.selectOne(new LambdaQueryWrapper<CompanyVoiceRoboticBusiness>()
+                .eq(CompanyVoiceRoboticBusiness::getId, record.getBusinessKey()));
         try {
             Map<String, Object> variablesMap;
             if (record.getVariables() == null || record.getVariables().isEmpty()) {
@@ -493,8 +500,10 @@ public class AiSipCallOutboundCdrServiceImpl extends ServiceImpl<AiSipCallOutbou
         CompanyVoiceRoboticCallLogCallphone companyVoiceRoboticCallLogCallphone = new CompanyVoiceRoboticCallLogCallphone();
         companyVoiceRoboticCallLogCallphone.setCallbackUuid(callBackUuid);
         companyVoiceRoboticCallLogCallphone.setRoboticId(req.getRoboticId());
-        companyVoiceRoboticCallLogCallphone.setCallerId(null);
-        companyVoiceRoboticCallLogCallphone.setRunTime(null);
+        if (ObjectUtil.isNotEmpty(business)) {
+            companyVoiceRoboticCallLogCallphone.setCallerId(business.getCalleeId());
+        }
+        companyVoiceRoboticCallLogCallphone.setRunTime(new Date(callPhoneRes.getCalloutTime()));
         companyVoiceRoboticCallLogCallphone.setRunParam(null);
         companyVoiceRoboticCallLogCallphone.setResult(null);
         companyVoiceRoboticCallLogCallphone.setStatus(req.getStatus());

+ 13 - 14
fs-service/src/main/java/com/fs/aiSipCall/service/impl/AiSipCallPhoneServiceImpl.java

@@ -232,41 +232,40 @@ 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;
     }
     

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

@@ -1,23 +1,23 @@
 package com.fs.aiSipCall.service.impl;
+import java.util.List;
+import java.util.Map;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.aiSipCall.RemoteCommon;
-import com.fs.aiSipCall.domain.AiSipCallUser;
-import com.fs.aiSipCall.mapper.AiSipCallUserMapper;
-import com.fs.aiSipCall.service.IAiSipCallUserService;
 import com.fs.common.core.domain.AjaxResult;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.company.mapper.CompanyUserMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import java.util.List;
+import com.fs.aiSipCall.mapper.AiSipCallUserMapper;
+import com.fs.aiSipCall.domain.AiSipCallUser;
+import com.fs.aiSipCall.service.IAiSipCallUserService;
 
 /**
  * sip用户信息Service业务层处理
- * 
+ *
  * @author fs
  * @date 2026-03-13
  */
@@ -166,9 +166,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){

+ 7 - 3
fs-service/src/main/resources/mapper/aiSipCall/AiSipCallUserMapper.xml

@@ -30,10 +30,11 @@ 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">
@@ -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>