Przeglądaj źródła

定制接口新增

peicj 1 tydzień temu
rodzic
commit
719ec811f1

+ 140 - 12
ruoyi-admin/src/main/java/com/ruoyi/aicall/controller/ApiController.java

@@ -1254,6 +1254,82 @@ public class ApiController extends BaseController {
     {
         return AjaxResult.success(ccExtNumService.selectUnBindCcExtNumList());
     }
+    /**
+     * 查询未绑定的分机管理列表分页
+     */
+    @PostMapping("/extnum/selectUnBindCcExtNumListPage")
+    @ResponseBody
+    public TableDataInfo selectUnBindCcExtNumListPage(@RequestBody CcExtNum ccExtNum)
+    {
+        Integer pageNum = ccExtNum.getPageNum() != null ? ccExtNum.getPageNum().intValue() : 1;
+        Integer pageSize = ccExtNum.getPageSize() != null ? ccExtNum.getPageSize().intValue() : 10;
+        startPage(pageNum, pageSize);
+        List<CcExtNum> list = ccExtNumService.selectUnBindCcExtNumListPage(ccExtNum);
+        return getDataTable(list);
+    }
+    /**
+     * 通用查询分机列表分页
+     */
+    @PostMapping("/extnumPage")
+    @ResponseBody
+    public TableDataInfo extnumPage(@RequestBody CcExtNum ccExtNum)
+    {
+        Integer pageNum = ccExtNum.getPageNum() != null ? ccExtNum.getPageNum().intValue() : 1;
+        Integer pageSize = ccExtNum.getPageSize() != null ? ccExtNum.getPageSize().intValue() : 10;
+        startPage(pageNum, pageSize);
+        List<CcExtNum> list = ccExtNumService.selectCcExtNumList(ccExtNum);
+        if(!CollectionUtils.isEmpty(list)){
+            list.forEach(extNum -> {
+                if(StringUtils.isNotBlank(extNum.getUserCode()) && extNum.getUserCode().startsWith("Runtian_")){
+                    extNum.setUserCode("");
+                }
+            });
+        }
+        return getDataTable(list);
+    }
+    /**
+     * 新增企业绑定未使用的分机(实际只是公司占位,需销售来绑定)
+     */
+    @PostMapping("/companyBindExtNum")
+    @ResponseBody
+    @Transactional
+    public AjaxResult companyBindExtNum(@RequestBody Map<String,String> param)
+    {
+        String companyName = param.get("companyName");
+        String sipExtNumIds = param.get("sipExtNumIds");
+        if(StringUtils.isBlank(companyName) || StringUtils.isBlank(sipExtNumIds)){
+            return AjaxResult.error("参数companyName或sipExtNumIds缺失");
+        }
+        //公司绑定分机
+        List<Long> extNumList = Arrays.stream(sipExtNumIds.split(","))
+                .map(String::trim)
+                .filter(StringUtils::isNotBlank)
+                .map(Long::parseLong)
+                .collect(Collectors.toList());
+        CcExtNum extNum = new CcExtNum();
+        extNum.setUserCode(companyName);
+        extNum.setSipExtNumList(extNumList);
+        return toAjax(ccExtNumService.updateCompanyBindExtNum(extNum));
+    }
+    /**
+     * 删除企业绑定的分机(销售已绑无法清除)
+     */
+    @PostMapping("/companyUnbindExtNum")
+    @ResponseBody
+    public AjaxResult companyUnbindExtNum(@RequestBody Map<String,String> param)
+    {
+        String userCodes = param.get("userCodes");
+        if(StringUtils.isBlank(userCodes)){
+            return AjaxResult.error("参数userCodes缺失");
+        }
+        List<String> userCodeList = Arrays.stream(userCodes.split(","))
+                .map(String::trim)
+                .filter(StringUtils::isNotBlank)
+                .collect(Collectors.toList());
+        return toAjax(ccExtNumService.companyUnbindExtNum(userCodeList));
+    }
+
+
     /**
      * 新增用户且绑定未使用的分机返回用户
      */
@@ -1262,30 +1338,50 @@ public class ApiController extends BaseController {
     @Transactional
     public AjaxResult addUserOrBindExtNumReturnUser(@RequestBody SysUser user)
     {
+        log.info("新增用户请求 - 用户名:{}, 密码:{}, 分机号:{}", user.getLoginName(), user.getPassword(), user.getExtNum());
+        if(StringUtils.isBlank(user.getPassword())){
+            throw new RuntimeException("密码不能为空");
+        }
         if (!userService.checkLoginNameUnique(user))
         {
-            throw new RuntimeException("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
+            throw new RuntimeException("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
         }
         else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
         {
-            throw new RuntimeException("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
+            throw new RuntimeException("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
+        }
+        // 校验分机号是否为空
+        if (null == user.getExtNum()) {
+            throw new RuntimeException("新增用户失败,分机号不能为空");
+        }
+        // 校验分机号是否存在
+        CcExtNum extNum = ccExtNumService.selectCcExtNumByExtNum(user.getExtNum());
+        if (null == extNum) {
+            throw new RuntimeException("新增用户失败,分机号" + user.getExtNum() + "不存在");
+        }
+        // 校验分机号是否已被绑定
+        if (StringUtils.isNotEmpty(extNum.getUserCode())) {
+            throw new RuntimeException("新增用户失败,分机号" + user.getExtNum() + "已被用户" + extNum.getUserCode() + "绑定");
         }
+            
         user.setSalt(ShiroUtils.randomSalt());
+        String plainPassword = user.getPassword();
+        
         user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+        
         user.setPwdUpdateDate(DateUtils.getNowDate());
         user.setCreateBy("ylrz");
         int i = userService.insertUser(user);
         if(i>0){
             //绑定分机
-            if (StringUtils.isNotEmpty(user.getLoginName())) {
-                CcExtNum extNum = ccExtNumService.selectCcExtNumByExtNum(user.getExtNum());
-                if (null != extNum) {
-                    extNum.setUserCode(user.getLoginName());
-                    int num = ccExtNumService.updateCcExtNum(extNum);
-                    if(num>0){
-                        return AjaxResult.success(user);
-                    }
-                }
+            extNum.setUserCode(user.getLoginName());
+            int num = ccExtNumService.updateCcExtNum(extNum);
+            if(num>0){
+                user.setExtPass(extNum.getExtPass());
+                log.info("新增用户成功,用户名:{},分机号:{}", user.getLoginName(), user.getExtNum());
+                return AjaxResult.success(user);
+            } else {
+                throw new RuntimeException("新增用户成功,但分机号绑定失败");
             }
         }
         throw new RuntimeException("新增用户失败");
@@ -1620,7 +1716,17 @@ public class ApiController extends BaseController {
         if(callPhoneIds==null){
             return AjaxResult.error(AjaxResult.Type.INVALID_PARAM, "callPhoneIds不能为空!", "");
         }
-        return AjaxResult.success(ccCallPhoneService.selectCcCallPhoneListByIds(callPhoneIds));
+        List<CcCallPhone> list = ccCallPhoneService.selectCcCallPhoneListByIds(callPhoneIds);
+        if(!CollectionUtils.isEmpty(list)){
+            //处理下大字段不要传输
+            list.forEach(callPhoneRecord -> {
+                callPhoneRecord.setDialogue(null);
+                callPhoneRecord.setBizJson(null);
+                callPhoneRecord.setRecordServerUrl(null);
+                callPhoneRecord.setIvrDtmfDigits( null);
+            });
+        }
+        return AjaxResult.success(list);
     }
 
     /**
@@ -1646,4 +1752,26 @@ public class ApiController extends BaseController {
         return toAjax(ccCallTaskService.updateCcCallTask(ccCallTask));
     }
 
+    /**
+     * 获取音色分页列表
+     */
+    @PostMapping("/voicecodePage")
+    @ResponseBody
+    public TableDataInfo voicecodePage(@RequestBody CcTtsAliyun queryParams)
+    {
+        if(queryParams==null){
+            queryParams = new CcTtsAliyun();
+        }
+        if(queryParams.getPageNum()==null){
+            queryParams.setPageNum(1);
+        }
+        if(queryParams.getPageSize()== null){
+            queryParams.setPageSize(10);
+        }
+        startPage(queryParams.getPageNum(), queryParams.getPageSize());
+        // 获取音色列表
+        List<CcTtsAliyun> list = ccTtsAliyunService.selectCcTtsAliyunList(queryParams);
+
+        return getDataTable(list);
+    }
 }

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/aicall/domain/CcTtsAliyun.java

@@ -56,4 +56,6 @@ public class CcTtsAliyun implements Serializable {
 
     /** Models of the voice */
     private String ttsModels;
+    private Integer pageNum;
+    private Integer pageSize;
 }

+ 10 - 4
ruoyi-admin/src/main/java/com/ruoyi/cc/domain/CcExtNum.java

@@ -2,12 +2,9 @@ package com.ruoyi.cc.domain;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.core.domain.BaseEntity;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 分机号对象 cc_ext_num
@@ -32,4 +29,13 @@ public class CcExtNum implements Serializable {
     /** 所属员工/绑定关系 */
     private String userCode;
 
+    private Long pageNum;
+    private Long pageSize;
+
+    /** 分机起 */
+    private Long startExtNum;
+    /** 分机止 */
+    private Long endExtNum;
+    /** 分机号集合 */
+    private List<Long> sipExtNumList;
 }

+ 6 - 0
ruoyi-admin/src/main/java/com/ruoyi/cc/mapper/CcExtNumMapper.java

@@ -68,4 +68,10 @@ public interface CcExtNumMapper
     int cleanCcExtNumByUserCode(String loginName);
 
     int updateCcExtNumByUserCode(CcExtNum extNum);
+
+    List<CcExtNum> selectUnBindCcExtNumListPage(CcExtNum ccExtNum);
+
+    int updateCompanyBindExtNum(CcExtNum extNum);
+
+    int companyUnbindExtNum(List<String> userCodeList);
 }

+ 6 - 0
ruoyi-admin/src/main/java/com/ruoyi/cc/service/ICcExtNumService.java

@@ -93,4 +93,10 @@ public interface ICcExtNumService
     int cleanCcExtNumByUserCode(String loginName);
 
     int updateCcExtNumByUserCode(CcExtNum extNum);
+
+    List<CcExtNum> selectUnBindCcExtNumListPage(CcExtNum ccExtNum);
+
+    int updateCompanyBindExtNum(CcExtNum extNum);
+
+    int companyUnbindExtNum(List<String> userCodeList);
 }

+ 16 - 4
ruoyi-admin/src/main/java/com/ruoyi/cc/service/impl/CcExtNumServiceImpl.java

@@ -1,9 +1,6 @@
 package com.ruoyi.cc.service.impl;
 
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.algorithms.Algorithm;
@@ -170,4 +167,19 @@ public class CcExtNumServiceImpl implements ICcExtNumService
     public int updateCcExtNumByUserCode(CcExtNum extNum) {
         return ccExtNumMapper.updateCcExtNumByUserCode(extNum);
     }
+
+    @Override
+    public List<CcExtNum> selectUnBindCcExtNumListPage(CcExtNum ccExtNum) {
+        return ccExtNumMapper.selectUnBindCcExtNumListPage(ccExtNum);
+    }
+
+    @Override
+    public int updateCompanyBindExtNum(CcExtNum extNum) {
+        return ccExtNumMapper.updateCompanyBindExtNum(extNum);
+    }
+
+    @Override
+    public int companyUnbindExtNum(List<String> userCodeList) {
+        return ccExtNumMapper.companyUnbindExtNum(userCodeList);
+    }
 }

+ 30 - 1
ruoyi-admin/src/main/resources/mapper/cc/CcExtNumMapper.xml

@@ -20,7 +20,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>  
             <if test="extNum != null "> and ext_num = #{extNum}</if>
             <if test="extPass != null  and extPass != ''"> and ext_pass = #{extPass}</if>
-            <if test="userCode != null  and userCode != ''"> and user_code = #{userCode}</if>
+<!--            <if test="userCode != null  and userCode != ''"> and user_code = #{userCode}</if>-->
+            <if test="userCode != null  and userCode != ''"> and user_code like concat('%', #{userCode}, '%')</if>
+            <if test="sipExtNumList != null and sipExtNumList.size() > 0">
+                and ext_num in
+                <foreach collection="sipExtNumList" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
         </where>
     </select>
     
@@ -74,4 +81,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="updateCcExtNumByUserCode" parameterType="CcExtNum">
         update cc_ext_num set user_code = #{userCode} where ext_num = #{extNum}
     </update>
+
+    <select id="selectUnBindCcExtNumListPage" parameterType="CcExtNum" resultMap="CcExtNumResult">
+        <include refid="selectCcExtNumVo"/>
+        where user_code = ''
+        <if test="extNum != null">and ext_num = #{extNum}</if>
+        <if test="extPass != null and extPass != ''">and ext_pass = #{extPass}</if>
+        <if test="startExtNum != null">and ext_num &gt;= #{startExtNum}</if>
+        <if test="endExtNum != null">and ext_num  &lt;= #{endExtNum}</if>
+    </select>
+
+    <update id="updateCompanyBindExtNum">
+        update cc_ext_num set user_code = #{userCode} where ext_num in
+        <foreach item="extNum" collection="sipExtNumList" open="(" separator="," close=")">
+            #{extNum}
+        </foreach>
+    </update>
+    <update id="companyUnbindExtNum">
+        update cc_ext_num set user_code = '' where user_code in
+        <foreach item="userCode" collection="list" open="(" separator="," close=")">
+            #{userCode}
+        </foreach>
+    </update>
 </mapper>

+ 13 - 2
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -105,6 +105,17 @@ public class SysUser extends BaseEntity
     private Long[] postIds;
     /** 分机号 */
     private Long extNum;
+
+    /** 分机密码 */
+    private String extPass;
+    public String getExtPass() {
+        return extPass;
+    }
+
+    public void setExtPass(String extPass) {
+        this.extPass = extPass;
+    }
+
     public Long getExtNum() {
         return extNum;
     }
@@ -258,7 +269,7 @@ public class SysUser extends BaseEntity
         this.avatar = avatar;
     }
 
-    @JsonIgnore
+//    @JsonIgnore
     public String getPassword()
     {
         return password;
@@ -269,7 +280,7 @@ public class SysUser extends BaseEntity
         this.password = password;
     }
 
-    @JsonIgnore
+//    @JsonIgnore
     public String getSalt()
     {
         return salt;

+ 0 - 16
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java

@@ -292,22 +292,6 @@ public class ShiroConfig
         filterChainDefinitionMap.put("/i18n/**", "anon");
         filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
         filterChainDefinitionMap.put("/recordings/files", "anon");
-        filterChainDefinitionMap.put("/aicall/api/notice/call", "anon");
-        filterChainDefinitionMap.put("/aicall/api/ai/addCallList", "anon");
-        filterChainDefinitionMap.put("/aicall/api/common/addCallList", "anon");
-        filterChainDefinitionMap.put("/aicall/api/gateway/list", "anon");
-        filterChainDefinitionMap.put("/aicall/api/llmacount/list", "anon");
-        filterChainDefinitionMap.put("/aicall/api/voicecode/list", "anon");
-        filterChainDefinitionMap.put("/aicall/api/busigroup/list", "anon");
-        filterChainDefinitionMap.put("/aicall/api/calltask/list", "anon");
-        filterChainDefinitionMap.put("/aicall/api/records/list", "anon");
-        filterChainDefinitionMap.put("/aicall/api/ai/createTask", "anon");
-        filterChainDefinitionMap.put("/aicall/api/ai/startTask", "anon");
-        filterChainDefinitionMap.put("/aicall/api/ai/stopTask", "anon");
-        filterChainDefinitionMap.put("/aicall/api/local/addCall", "anon");
-        filterChainDefinitionMap.put("/aicall/api/phoneBar/params", "anon");
-        filterChainDefinitionMap.put("/aicall/api//phoneBar/extnum/bind", "anon");
-        filterChainDefinitionMap.put("/aicall/api/test/localChat", "anon");
         filterChainDefinitionMap.put("/api/ai/chat/stream", "anon");
 
         //开放公共api所有接口

+ 10 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysPasswordService.java

@@ -5,6 +5,8 @@ import javax.annotation.PostConstruct;
 import org.apache.shiro.cache.Cache;
 import org.apache.shiro.cache.CacheManager;
 import org.apache.shiro.crypto.hash.Md5Hash;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -25,6 +27,8 @@ import com.ruoyi.framework.manager.factory.AsyncFactory;
 @Component
 public class SysPasswordService
 {
+    private static final Logger log = LoggerFactory.getLogger(SysPasswordService.class);
+    
     @Autowired
     private CacheManager cacheManager;
 
@@ -70,7 +74,12 @@ public class SysPasswordService
 
     public boolean matches(SysUser user, String newPassword)
     {
-        return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt()));
+        String encryptedPassword = encryptPassword(user.getLoginName(), newPassword, user.getSalt());
+        log.info("密码验证 - 用户名:{}, 输入密码:{}, 盐值:{}, 加密后密码:{}, 数据库密码:{}", 
+                user.getLoginName(), newPassword, user.getSalt(), encryptedPassword, user.getPassword());
+        boolean result = user.getPassword().equals(encryptedPassword);
+        log.info("密码验证结果: {}", result);
+        return result;
     }
 
     public void clearLoginRecordCache(String loginName)