yzx vor 2 Tagen
Ursprung
Commit
a44505e981

+ 11 - 5
ruoyi-admin/src/main/java/com/ruoyi/aicall/controller/ApiController.java

@@ -21,6 +21,7 @@ import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.CommonUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.ShiroUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -713,7 +714,7 @@ public class ApiController extends BaseController {
             }
             data.setWavFileUrl("/recordings/files?filename=" + data.getRecordFilename());
             apiData.setUuid(data.getUuid());
-            apiData.setTelephone(data.getCallee());
+            apiData.setTelephone(CommonUtils.maskPhoneNumber(data.getCallee()));
             apiData.setCalloutTime(DateUtils.format(new Date(data.getStartTime()), "yyyy-MM-dd HH:mm:ss"));
             if (data.getAnsweredTime() > 0) {
                 apiData.setAnsweredTime(DateUtils.format(new Date(data.getAnsweredTime()), "yyyy-MM-dd HH:mm:ss"));
@@ -774,7 +775,7 @@ public class ApiController extends BaseController {
             }
             data.setWavFileUrl("/recordings/files?filename=" + data.getWavFile());
             apiData.setUuid(data.getUuid());
-            apiData.setTelephone(data.getCaller());
+            apiData.setTelephone(CommonUtils.maskPhoneNumber(data.getCaller()));
             apiData.setCalloutTime(DateUtils.format(new Date(data.getInboundTime()), "yyyy-MM-dd HH:mm:ss"));
             if (data.getAnsweredTime() > 0) {
                 apiData.setAnsweredTime(DateUtils.format(new Date(data.getAnsweredTime()), "yyyy-MM-dd HH:mm:ss"));
@@ -857,7 +858,7 @@ public class ApiController extends BaseController {
             }
             data.setWavfile("/recordings/files?filename=" + data.getWavfile());
             apiData.setUuid(data.getUuid());
-            apiData.setTelephone(data.getTelephone());
+            apiData.setTelephone(CommonUtils.maskPhoneNumber(data.getTelephone()));
             apiData.setCalloutTime(DateUtils.format(new Date(data.getCalloutTime()), "yyyy-MM-dd HH:mm:ss"));
             if (data.getAnsweredTime() > 0) {
                 apiData.setAnsweredTime(DateUtils.format(new Date(data.getAnsweredTime()), "yyyy-MM-dd HH:mm:ss"));
@@ -894,7 +895,7 @@ public class ApiController extends BaseController {
             apiData.setTimeLen(Long.valueOf(data.getTimeLen()/1000).intValue());
             apiData.setSessionId(data.getId());
             apiData.setCallstatus(data.getCallstatus());
-            apiData.setCallerNumber(data.getCallerNumber());
+            apiData.setCallerNumber(CommonUtils.maskPhoneNumber(data.getCallerNumber()));
             apiData.setManualAnsweredTime(data.getManualAnsweredTime());
             apiData.setManualAnsweredTimeLen(data.getManualAnsweredTimeLen());
             apiRecords.add(apiData);
@@ -1539,6 +1540,7 @@ public class ApiController extends BaseController {
         List<CcOutboundCdr> list = ccOutboundCdrService.selectCcOutboundCdrList(ccOutboundCdr);
         for (CcOutboundCdr data: list) {
             data.setWavFileUrl("/recordings/files?filename=" + data.getRecordFilename());
+            data.setCallee(CommonUtils.maskPhoneNumber(data.getCallee()));
         }
         return getDataTable(list);
     }
@@ -1660,6 +1662,8 @@ public class ApiController extends BaseController {
                     callPhoneRecord.setWavfile("/recordings/files?filename=" + callPhoneRecord.getWavfile());
                 }
             }
+            callPhoneRecord.setTelephone(CommonUtils.maskPhoneNumber(callPhoneRecord.getTelephone()));
+            callPhoneRecord.setCallerNumber(CommonUtils.maskPhoneNumber(callPhoneRecord.getCallerNumber()));
             callPhoneRecord.setCallstatusName( CcCallPhone.getCallStatusName(callPhoneRecord.getCallstatus()));
             callPhoneRecord.setCalloutTimeStr(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date(callPhoneRecord.getCalloutTime())));
             callPhoneRecord.setAnsweredTimeStr(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date(callPhoneRecord.getAnsweredTime())));
@@ -1720,7 +1724,7 @@ public class ApiController extends BaseController {
                 callPhoneRecord.setTimeLenSec(DateUtils.formatTimeLength(callPhoneRecord.getTimeLen()/1000));
                 callPhoneRecord.setTimeLenValidStr(DateUtils.formatTimeLength(callPhoneRecord.getTimeLenValid()/1000));
             }
-
+            callPhoneRecord.setCallee(CommonUtils.maskPhoneNumber(callPhoneRecord.getCallee()));
         });
         return getDataTable(list);
     }
@@ -1760,6 +1764,8 @@ public class ApiController extends BaseController {
         if(!CollectionUtils.isEmpty(list)){
             //处理下大字段不要传输
             list.forEach(callPhoneRecord -> {
+                callPhoneRecord.setTelephone(CommonUtils.maskPhoneNumber(callPhoneRecord.getTelephone()));
+                callPhoneRecord.setCallerNumber(CommonUtils.maskPhoneNumber(callPhoneRecord.getCallerNumber()));
                 callPhoneRecord.setDialogue(null);
                 callPhoneRecord.setBizJson(null);
                 callPhoneRecord.setRecordServerUrl(null);

+ 5 - 0
ruoyi-admin/src/main/java/com/ruoyi/aicall/controller/CcCallPhoneController.java

@@ -28,6 +28,7 @@ import com.ruoyi.aicall.domain.CcCallPhone;
 import com.ruoyi.aicall.service.ICcCallPhoneService;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.CommonUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
 
@@ -76,6 +77,8 @@ public class CcCallPhoneController extends BaseController
                 data.setWavfile(data.getWavfile().substring(1));
             }
             data.setWavfile("/recordings/files?filename=" + data.getWavfile());
+            data.setTelephone(CommonUtils.maskPhoneNumber(data.getTelephone()));
+            data.setCallerNumber(CommonUtils.maskPhoneNumber(data.getCallerNumber()));
             String batchName = batchNameMap.getOrDefault(data.getBatchId(), "");
             if (StringUtils.isBlank(batchName)) {
                 CcCallTask ccCallTask = ccCallTaskService.selectCcCallTaskByBatchId(data.getBatchId());
@@ -129,6 +132,8 @@ public class CcCallPhoneController extends BaseController
         Map<Long, String> batchNameMap = new HashMap<>();
         List<CallPhoneExportVo> dataList = new ArrayList<>();
         for (CcCallPhone data: list) {
+            data.setTelephone(CommonUtils.maskPhoneNumber(data.getTelephone()));
+            data.setCallerNumber(CommonUtils.maskPhoneNumber(data.getCallerNumber()));
             String batchName = batchNameMap.getOrDefault(data.getBatchId(), "");
             if (StringUtils.isBlank(batchName)) {
                 CcCallTask ccCallTask = ccCallTaskService.selectCcCallTaskByBatchId(data.getBatchId());

+ 5 - 0
ruoyi-admin/src/main/java/com/ruoyi/cc/controller/CcInboundCdrController.java

@@ -15,6 +15,7 @@ import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.CommonUtils;
 import com.ruoyi.common.utils.ExceptionUtil;
 import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -107,6 +108,7 @@ public class CcInboundCdrController extends BaseController
         List<CcInboundCdr> records = (List<CcInboundCdr>) tableDataInfo.getRows();
         for (CcInboundCdr data: records) {
             data.setWavFileUrl("/recordings/files?filename=" + data.getWavFile());
+            data.setCaller(CommonUtils.maskPhoneNumber(data.getCaller()));
             String groupName = groupNames.getOrDefault(data.getGroupId(), "");
             if (StringUtils.isBlank(groupName)) {
                 CcBizGroup ccBizGroup = groupService.selectCcBizGroupByGroupId(data.getGroupId());
@@ -157,6 +159,9 @@ public class CcInboundCdrController extends BaseController
     public AjaxResult export(CcInboundCdr ccInboundCdr)
     {
         List<CcInboundCdr> list = ccInboundCdrService.selectCcInboundCdrList(ccInboundCdr);
+        for (CcInboundCdr data: list) {
+            data.setCaller(CommonUtils.maskPhoneNumber(data.getCaller()));
+        }
         ExcelUtil<CcInboundCdr> util = new ExcelUtil<CcInboundCdr>(CcInboundCdr.class);
         return util.exportExcel(list, "呼入记录数据");
     }

+ 5 - 0
ruoyi-admin/src/main/java/com/ruoyi/cc/controller/CcOutboundCdrController.java

@@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.CommonUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.service.ISysDeptService;
@@ -95,6 +96,7 @@ public class CcOutboundCdrController extends BaseController
         List<CcOutboundCdr> list = ccOutboundCdrService.selectCcOutboundCdrList(ccOutboundCdr);
         for (CcOutboundCdr data: list) {
             data.setWavFileUrl("/recordings/files?filename=" + data.getRecordFilename());
+            data.setCallee(CommonUtils.maskPhoneNumber(data.getCallee()));
         }
         return getDataTable(list);
     }
@@ -109,6 +111,9 @@ public class CcOutboundCdrController extends BaseController
     public AjaxResult export(CcOutboundCdr ccOutboundCdr)
     {
         List<CcOutboundCdr> list = ccOutboundCdrService.selectCcOutboundCdrList(ccOutboundCdr);
+        for (CcOutboundCdr data: list) {
+            data.setCallee(CommonUtils.maskPhoneNumber(data.getCallee()));
+        }
         ExcelUtil<CcOutboundCdr> util = new ExcelUtil<CcOutboundCdr>(CcOutboundCdr.class);
         return util.exportExcel(list, "外呼记录数据");
     }

+ 2 - 2
ruoyi-admin/src/main/resources/application-test.yml

@@ -7,9 +7,9 @@ spring:
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://127.0.0.1:3306/easycallcenter365?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://129.28.193.130:3306/easycallcenter365?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
-        password: root
+        password: easycallcenter365
       # 从库数据源
       slave:
         # 从数据源开关/默认关闭

+ 2 - 2
ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/moon/style.css

@@ -95,7 +95,7 @@ body .layer-ext-moon .layui-layer-btn a {
 	padding: 0 15px;
 	color: #fff;
 	border: 1px solid #0064b6;
-	background: #0071ce;
+	background: #6f5df6;
 	border-radius: 3px;
 	display: inline-block;
 	height: 30px;
@@ -110,7 +110,7 @@ body .layer-ext-moon .layui-layer-btn a {
 	box-sizing: content-box;
 }
 body .layer-ext-moon .layui-layer-btn .layui-layer-btn0 {
-	background: #0071ce;
+	background: #6f5df6;
 }
 body .layer-ext-moon .layui-layer-btn .layui-layer-btn1 {
 	background: #fff;

+ 3 - 8
ruoyi-admin/src/main/resources/static/css/style.css

@@ -3023,7 +3023,7 @@ body.full-height-layout #wrapper, body.full-height-layout #page-wrapper {
 }
 
 body.boxed-layout #wrapper {
-    background-color: #2f4050;
+
     max-width: 1200px;
     margin: 0 auto;
 }
@@ -3149,7 +3149,7 @@ video {
 #wrapper {
     width: 100%;
     overflow-x: hidden;
-    background-color: #2f4050;
+
 }
 
 .wrapper {
@@ -3186,11 +3186,7 @@ ul.unstyled, ol.unstyled {
 }
 /* FOOTER */
 .footer {
-    background: none repeat scroll 0 0 white;
-    border-top: 1px solid #e7eaec;
-    overflow: hidden;
-    padding: 10px 20px;
-    margin: 0 -15px;
+
     height: 36px;
 }
 
@@ -3244,7 +3240,6 @@ body.body-small .footer.fixed {
 /*CONTENTTABS*/
 .content-tabs {
     position: relative;
-    height: 39px;
     background: #fafafa;
     line-height: 39px;
 }

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
ruoyi-admin/src/main/resources/static/css/style.min.css


+ 1 - 1
ruoyi-admin/src/main/resources/static/phone-bar/page.css

@@ -112,7 +112,7 @@ div,select,textarea,table td,table td,table tr{font-family:myFirstFont;font-size
 .dial{ float:left;}
 .dial dt{ padding-bottom:2px;}
 .dial dt input{vertical-align:middle;}
-.tel_txt{ border:1px solid #dfe5e7; border-radius:3px;  height:35px; font-size:16px; background:#FFF; color:#768595; text-indent:5px; width:120px;}
+.tel_txt{ border:1px solid #dfe5e7; border-radius:3px;  height:35px; font-size:16px; background:#FFF; color:#768595; text-indent:5px; }
 .keyboard{ background:url(./images/keyboard.png) no-repeat; border:0; width:25px; height:18px; cursor:pointer; margin:auto 10px auto 2px;}
 .next_btn{border-radius:5px; background: url(./images/next.png) no-repeat 10px 5px #8b9eb6; width:120px; height:25px; line-height:25px; border:0; color:#FFF;  text-align:center; cursor:pointer; text-indent:20px;}
 .dial dd input,.dial dd ul{ float:left;}

+ 1 - 1
ruoyi-admin/src/main/resources/templates/include.html

@@ -12,6 +12,7 @@
 	<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css?v=1.22.6}" rel="stylesheet"/>
 	<link th:href="@{/css/animate.min.css?v=20210831}" rel="stylesheet"/>
 	<link th:href="@{/css/style.min.css?v=20210831}" rel="stylesheet"/>
+	<link th:href="@{/css/theme-modern.css?v=20260524}" rel="stylesheet"/>
 	<link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.10}" rel="stylesheet"/>
 </head>
 
@@ -258,4 +259,3 @@
 	<script th:src="@{/js/video.min.js?v=7.10.2}"></script>
 </div>
 
-

+ 13 - 13
ruoyi-admin/src/main/resources/templates/index-topnav.html

@@ -277,14 +277,14 @@
 								<a onclick="resetPwd()">
 								<i class="fa fa-key"></i> 修改密码</a>
 							</li>
-							<li>
+							<!-- <li>
 								<a onclick="switchSkin()">
 								<i class="fa fa-dashboard"></i> 切换主题</a>
-							</li>
-							<li>
-								<a onclick="toggleMenu()">
-								<i class="fa fa-toggle-off"></i> 左侧菜单</a>
-							</li>
+							</li> -->
+<!--							<li>-->
+<!--								<a onclick="toggleMenu()">-->
+<!--								<i class="fa fa-toggle-off"></i> 左侧菜单</a>-->
+<!--							</li>-->
 							<li class="divider"></li>
 							<li>
 								<a th:href="@{logout}">
@@ -368,13 +368,13 @@ function resetPwd() {
 }
 /* 切换主题 */
 function switchSkin() {
-    layer.open({
-		type : 2,
-		shadeClose : true,
-		title : "切换主题",
-		area : ["530px", "386px"],
-		content : [ctx + "system/switchSkin", 'no']
-	})
+<!--    layer.open({-->
+<!--		type : 2,-->
+<!--		shadeClose : true,-->
+<!--		title : "切换主题",-->
+<!--		area : ["530px", "386px"],-->
+<!--		content : [ctx + "system/switchSkin", 'no']-->
+<!--	})-->
 }
 
 /* 切换菜单 */

+ 19 - 26
ruoyi-admin/src/main/resources/templates/index.html

@@ -19,6 +19,7 @@
     <link th:href="@{/css/animate.min.css}" rel="stylesheet"/>
     <link th:href="@{/css/style.min.css}" rel="stylesheet"/>
     <link th:href="@{/css/skins.css}" rel="stylesheet"/>
+    <link th:href="@{/css/theme-modern.css?v=20260524}" rel="stylesheet"/>
     <link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.10}" rel="stylesheet"/>
 	<style type="text/css">
 		.logo-img {
@@ -43,21 +44,21 @@
 		</a>
         <div class="sidebar-collapse">
             <ul class="nav" id="side-menu">
-            	<li>
-            		<div class="user-panel">
-            			<a class="menuItem noactive" th:title="#{top.menu.personCenter}" th:href="@{/system/user/profile}">
-            				<div class="hide" th:text="#{top.menu.personCenter}"></div>
-					        <div class="pull-left image">
-		                    	<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.png} : @{${user.avatar}}" th:onerror="this.src='img/profile.png'" class="img-circle" alt="User Image">
-					        </div>
-				        </a>
-				        <div class="pull-left info">
-				          <p>[[${user.loginName}]]</p>
-				          <a href="javascript:;" ><i class="fa fa-circle text-success"></i><span th:text="#{top.btn.online}"/></a>
-				          <a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i><span th:text="#{top.btn.logout}"/></a>
-				        </div>
-				    </div>
-            	</li>
+<!--            	<li>-->
+<!--            		<div class="user-panel">-->
+<!--            			<a class="menuItem noactive" th:title="#{top.menu.personCenter}" th:href="@{/system/user/profile}">-->
+<!--            				<div class="hide" th:text="#{top.menu.personCenter}"></div>-->
+<!--					        <div class="pull-left image">-->
+<!--		                    	<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.png} : @{${user.avatar}}" th:onerror="this.src='img/profile.png'" class="img-circle" alt="User Image">-->
+<!--					        </div>-->
+<!--				        </a>-->
+<!--				        <div class="pull-left info">-->
+<!--				          <p>[[${user.loginName}]]</p>-->
+<!--				          <a href="javascript:;" ><i class="fa fa-circle text-success"></i><span th:text="#{top.btn.online}"/></a>-->
+<!--				          <a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i><span th:text="#{top.btn.logout}"/></a>-->
+<!--				        </div>-->
+<!--				    </div>-->
+<!--            	</li>-->
                 <li>
                     <a class="menuItem" th:href="@{/system/main}"><i class="fa fa-home"></i> <span class="nav-label"  th:text="#{_menu.home}"></span> </a>
                 </li>
@@ -225,14 +226,6 @@
 								<a onclick="resetPwd()" >
 								<i class="fa fa-key"></i><span th:text="#{top.menu.resetPass}"/></a>
 							</li>
-							<li>
-								<a onclick="switchSkin()" >
-								<i class="fa fa-dashboard"></i><span th:text="#{top.menu.switchSkin}"/></a>
-							</li>
-							<li>
-								<a onclick="toggleMenu()" >
-								<i class="fa fa-toggle-off"></i><span th:text="#{top.menu.toggleMenu}"/></a>
-							</li>
 							<li class="divider"></li>
 							<li>
 								<a th:href="@{logout}" >
@@ -265,9 +258,9 @@
                 th:src="@{/system/main}" frameborder="0" seamless></iframe>
         </div>
 
-        <div th:if="${footer}" class="footer">
-            <div class="pull-right"> [[${sysVersion}]] </div>
-        </div>
+<!--        <div th:if="${footer}" class="footer">-->
+<!--            <div class="pull-right"> [[${sysVersion}]] </div>-->
+<!--        </div>-->
     </div>
     <!--右侧部分结束-->
 </div>

+ 1 - 0
ruoyi-admin/src/main/resources/templates/login.html

@@ -14,6 +14,7 @@
     <link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
     <link href="../static/css/style.min.css" th:href="@{/css/style.min.css}" rel="stylesheet"/>
     <link href="../static/css/login.min.css" th:href="@{/css/login.min.css}" rel="stylesheet"/>
+    <link href="../static/css/theme-modern.css" th:href="@{/css/theme-modern.css?v=20260524}" rel="stylesheet"/>
     <link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.7.10}" rel="stylesheet"/>
     <!-- 360浏览器急速模式 -->
     <meta name="renderer" content="webkit">

+ 2 - 1
ruoyi-admin/src/main/resources/templates/main.html

@@ -14,6 +14,7 @@
     <link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
     <link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
     <link href="../static/css/style.min.css" th:href="@{/css/style.min.css}" rel="stylesheet"/>
+    <link href="../static/css/theme-modern.css" th:href="@{/css/theme-modern.css?v=20260524}" rel="stylesheet"/>
     <link rel="stylesheet" th:href="@{/phone-bar/page.css?v=1.0.4}"></link>
     <script th:src="@{/phone-bar/ccPhoneBarSocket.js?v=1.0.4}"></script>
     <script>
@@ -947,4 +948,4 @@
 
 </script>
 </body>
-</html>
+</html>

+ 21 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/CommonUtils.java

@@ -87,6 +87,27 @@ public class CommonUtils {
         }
     }
 
+    /**
+     * 手机号脱敏,常规保留前3位和后4位。
+     * 对于较短号码,尽量保留首尾各1位。
+     */
+    public static String maskPhoneNumber(String phoneNumber) {
+        if (phoneNumber == null || phoneNumber.isEmpty()) {
+            return phoneNumber;
+        }
+
+        String value = phoneNumber.trim();
+        int length = value.length();
+        if (length <= 2) {
+            return value;
+        }
+        if (length <= 7) {
+            return value.substring(0, 1) + repeatString("*", length - 2) + value.substring(length - 1);
+        }
+
+        return value.substring(0, 3) + "****" + value.substring(length - 4);
+    }
+
     /**
      * 手动实现字符串重复方法(兼容Java 8以下)
      * @param str

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.