Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
YDL-Component-Medical
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
杨凯
YDL-Component-Medical
Commits
6f802002
Commit
6f802002
authored
Mar 14, 2022
by
刘鹏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat : 星链 倾诉日志
parent
aa851d91
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
597 additions
and
144 deletions
+597
-144
WVClickAbstractListener.java
app/src/main/java/com/ydl/component/service/web/WVClickAbstractListener.java
+0
-5
config.gradle
config.gradle
+6
-6
AudioHomeActivity.kt
m-audioim/src/main/java/com/ydl/audioim/AudioHomeActivity.kt
+72
-47
AudioApiRequestUtil.kt
m-audioim/src/main/java/com/ydl/audioim/http/AudioApiRequestUtil.kt
+10
-0
AudioNetAPi.kt
m-audioim/src/main/java/com/ydl/audioim/http/AudioNetAPi.kt
+11
-0
ConsultantAudioHomeActivity.kt
m-audioim/src/main/java/com/ydl/consultantim/ConsultantAudioHomeActivity.kt
+98
-7
ConfideHomeApi.kt
m-confide/src/main/java/com/ydl/confide/home/http/ConfideHomeApi.kt
+9
-5
ConfideHomeHttpImpl.kt
m-confide/src/main/java/com/ydl/confide/home/http/ConfideHomeHttpImpl.kt
+18
-18
IConfideHomeHttp.kt
m-confide/src/main/java/com/ydl/confide/home/http/IConfideHomeHttp.kt
+4
-3
ConfideWebServiceImpl.kt
m-confide/src/main/java/com/ydl/confide/home/modular/service/ConfideWebServiceImpl.kt
+36
-41
TimeUtil.java
m-im/src/main/java/com/yidianling/avchatkit/common/util/TimeUtil.java
+17
-12
TimeUtil.java
ydl-platform/src/main/java/com/ydl/ydlcommon/utils/TimeUtil.java
+316
-0
No files found.
app/src/main/java/com/ydl/component/service/web/WVClickAbstractListener.java
View file @
6f802002
...
...
@@ -361,12 +361,7 @@ public class WVClickAbstractListener implements WebViewClientClickListener {
@Override
public
void
confideConnect
(
H5JsBean
.
H5JsCmd
.
Params
jsData
)
{
// ModularServiceManager.INSTANCE.provide(IConfideService.class).connectionJava(jsData.getId(),jsData.getConfideType(),mContext,null,jsData.getCallType());
((
IConfideService
)
ARouter
.
getInstance
().
build
(
"/confide/ConfideService"
).
navigation
()).
connectionJava
(
jsData
.
getId
(),
3
,
mContext
,
null
,
jsData
.
getCallType
());
}
@Override
...
...
config.gradle
View file @
6f802002
...
...
@@ -5,7 +5,7 @@ ext {
ydlPublishVersion
=
[
// -------------- 业务模块 --------------
//第三步 若干
"m-confide"
:
"0.0.49.2
1
"
,
"m-confide"
:
"0.0.49.2
5
"
,
"m-consultant"
:
"0.0.60.03"
,
"m-fm"
:
"0.0.30.04"
,
"m-user"
:
"0.0.61.94"
,
...
...
@@ -33,13 +33,13 @@ ext {
//-------------- 功能组件 --------------
//第一步
"ydl-platform"
:
"0.0.40.7
6
"
,
"ydl-platform"
:
"0.0.40.7
7
"
,
//第二步 若干
"ydl-webview"
:
"0.0.38.47"
,
"ydl-media"
:
"0.0.21.42"
,
"ydl-pay"
:
"0.0.18.19"
,
"m-audioim"
:
"0.0.49.29.4
5
"
,
"m-audioim"
:
"0.0.49.29.4
6
"
,
"ydl-flutter-base"
:
"0.0.14.38"
,
//以下 几乎不会动
...
...
@@ -88,7 +88,7 @@ ext {
// -------------- 业务模块 --------------
//第三步 若干
"m-confide"
:
"0.0.49.2
1
"
,
"m-confide"
:
"0.0.49.2
5
"
,
"m-consultant"
:
"0.0.60.03"
,
"m-fm"
:
"0.0.30.07"
,
"m-user"
:
"0.0.61.94"
,
...
...
@@ -115,13 +115,13 @@ ext {
//-------------- 功能组件 --------------
//第一步
"ydl-platform"
:
"0.0.40.7
6
"
,
"ydl-platform"
:
"0.0.40.7
7
"
,
//第二步 若干
"ydl-webview"
:
"0.0.38.47"
,
"ydl-media"
:
"0.0.21.42"
,
"ydl-pay"
:
"0.0.18.19"
,
"m-audioim"
:
"0.0.49.29.4
5
"
,
"m-audioim"
:
"0.0.49.29.4
6
"
,
"ydl-flutter-base"
:
"0.0.14.38"
,
//以下 几乎不会动
...
...
m-audioim/src/main/java/com/ydl/audioim/AudioHomeActivity.kt
View file @
6f802002
package
com.ydl.audioim
import
android.Manifest
import
android.annotation.SuppressLint
import
android.app.Service
import
android.content.Context
...
...
@@ -17,17 +16,17 @@ import android.os.Handler
import
android.os.PowerManager
import
android.os.Vibrator
import
android.provider.Settings
import
androidx.core.content.ContextCompat
import
android.text.TextUtils
import
android.view.View
import
android.view.animation.AccelerateInterpolator
import
androidx.core.content.ContextCompat
import
com.alibaba.android.arouter.facade.annotation.Route
import
com.google.gson.Gson
import
com.hjq.permissions.OnPermissionCallback
import
com.hjq.permissions.XXPermissions
import
com.tbruyelle.rxpermissions2.RxPermissions
import
com.ydl.audioim.bean.AgoraLogInfoBean
import
com.ydl.audioim.contract.IAudioHomeActivityContract
import
com.ydl.audioim.http.AudioApiRequestUtil
import
com.ydl.audioim.http.command.ConnectCommand
import
com.ydl.audioim.http.command.ConnectExceptionCommand
import
com.ydl.audioim.http.command.NoticePushCommand
...
...
@@ -225,22 +224,7 @@ class AudioHomeActivity :
//106:打开频道超时。查找到指定频道后,SDK 接着打开该频道,超时一般是因为网络太差,连接不到服务器
//107:打开频道请求被服务器拒绝。服务器可能没有办法处理该请求或该请求是非法的
// 声网发出警告错误码,不应该直接离开房间
// runOnUiThread {
// when (warn) {
// 103, 105, 107 -> {
// writeAgoraLog("通话挂断:网络异常(${warn})")
// showToast("当前网络较差,请更换网络!")
// //通话结束或挂断时,上传日志文件
// uploadLog()
// leaveChannel()
// YDLavManager.instances.callEndStatusUpdate(
// channelId!!,
// 4,
// "收到频道回调警告信息$warn"
// )
// }
// }
// }
}
override
fun
onError
(
err
:
Int
)
{
...
...
@@ -261,32 +245,7 @@ class AudioHomeActivity :
//110:生成的 Token 无效
//123:此用户被服务器禁止
LogUtil
.
e
(
"[agora]发生错误回调$err"
)
runOnUiThread
{
when
(
err
)
{
3
,
7
,
109
,
110
->
{
showToast
(
"请退出应用,重新打开"
)
leaveChannel
()
}
10
->
{
showToast
(
"当前网络较差,请更换网络"
)
leaveChannel
()
}
101
->
{
showToast
(
"安装包有问题,请联系技术"
)
leaveChannel
()
}
102
->
{
showToast
(
"频道错误,请联系技术"
)
leaveChannel
()
}
123
->
{
// showToast("当前用户不允许接听电话,请联系客服")
// leaveChannel()
}
}
YDLavManager
.
instances
.
callEndStatusUpdate
(
channelId
!!
,
4
,
"频道的错误回调信息$err"
)
}
YDLavManager
.
instances
.
callEndStatusUpdate
(
channelId
!!
,
4
,
"频道的错误回调信息$err"
)
}
override
fun
onApiCallExecuted
(
error
:
Int
,
api
:
String
?,
result
:
String
?)
{
...
...
@@ -299,6 +258,8 @@ class AudioHomeActivity :
override
fun
onJoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onJoinChannelSuccess
(
channel
,
uid
,
elapsed
)
callEventSave
(
"40"
,
"$uid 用户声网加入频道成功:channel=$channel"
)
LogUtil
.
e
(
"[agora]$uid 用户声网加入频道成功:channel=$channel"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"$uid 用户声网加入频道成功:channel=$channel"
)
...
...
@@ -316,6 +277,8 @@ class AudioHomeActivity :
override
fun
onRejoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onRejoinChannelSuccess
(
channel
,
uid
,
elapsed
)
callEventSave
(
"70"
,
"$uid 用户声网加入频道成功:channel=$channel"
)
LogUtil
.
e
(
"[agora]$uid 用户声网重新加入频道成功:channel=$channel"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"$uid 用户声网重新加入频道成功:channel=$channel"
)
...
...
@@ -349,6 +312,7 @@ class AudioHomeActivity :
super
.
onConnectionStateChanged
(
state
,
reason
)
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if
(
reason
==
3
)
{
callEventSave
(
"60"
,
"通话结束:网络连接被服务器中止 该情况现在是因为后端踢人逻辑,原因(${reason}"
)
writeAgoraLog
(
"通话结束:网络连接被服务器中止 该情况现在是因为后端踢人逻辑,原因(${reason})"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
...
...
@@ -365,6 +329,8 @@ class AudioHomeActivity :
override
fun
onLeaveChannel
(
stats
:
IRtcEngineEventHandler
.
RtcStats
?)
{
super
.
onLeaveChannel
(
stats
)
callEventSave
(
"50"
,
"离开频道回调stats=${stats}"
)
LogUtil
.
e
(
"[agora]离开频道回调"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"离开频道回调"
)
...
...
@@ -375,6 +341,7 @@ class AudioHomeActivity :
override
fun
onUserJoined
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserJoined
(
uid
,
elapsed
)
callEventSave
(
"40"
,
"${uid}加入频道回调"
)
LogUtil
.
e
(
"[agora]远端用户/主播加入频道回调"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"远端用户/主播加入频道回调"
)
...
...
@@ -382,6 +349,8 @@ class AudioHomeActivity :
override
fun
onUserOffline
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserOffline
(
uid
,
elapsed
)
callEventSave
(
"50"
,
"uid:${uid}离开频道回调 elapsed:${elapsed}"
)
LogUtil
.
e
(
"[agora]远端用户$uid 离开频道回调"
)
writeAgoraLog
(
"接通后通话结束:对方已挂断"
)
AliYunRichLogsHelper
.
getInstance
()
...
...
@@ -447,7 +416,7 @@ class AudioHomeActivity :
}
}
}
//
//
override
fun
createPresenter
():
IAudioHomeActivityContract
.
Presenter
{
return
AudioHomePresenterImpl
()
...
...
@@ -464,6 +433,8 @@ class AudioHomeActivity :
initSensorManager
()
//页面传递数据初始化
initIntentData
()
callEventSave
(
"80"
,
"通话页面打开"
)
writeAgoraLog
(
"通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
RTM
,
"通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}"
)
...
...
@@ -522,6 +493,8 @@ class AudioHomeActivity :
listenId
=
intent
.
getStringExtra
(
IntentConstants
.
INTENT_LISTEN_ID
)
commentUrl
=
intent
.
getStringExtra
(
IntentConstants
.
INTENT_COMMENT_URL
)
dialStatus
=
intent
.
getStringExtra
(
IntentConstants
.
INTENT_DIALSTATUS
)
callEventSave
(
"90"
,
"专家的通话状态dialStatus:$dialStatus"
)
writeAgoraLog
(
"专家的通话状态dialStatus:$dialStatus"
,
false
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"专家的通话状态dialStatus:$dialStatus"
)
...
...
@@ -538,6 +511,8 @@ class AudioHomeActivity :
listenId
)
val
content
=
Gson
().
toJson
(
logBean
)
callEventSave
(
"80"
,
"主叫方发送的邀请通话消息内容:$content"
)
writeAgoraLog
(
"主叫方发送的邀请通话消息内容:$content"
,
true
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"主叫方发送的邀请通话消息内容:$content"
)
...
...
@@ -547,6 +522,8 @@ class AudioHomeActivity :
}
private
fun
reLoginRTM
()
{
callEventSave
(
"80"
,
"RMT状态:${YDLavManager.sdkStatus},重新登录RMT"
)
writeAgoraLog
(
"RMT状态:${YDLavManager.sdkStatus},重新登录RMT"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
RTM
,
"RMT状态:${YDLavManager.sdkStatus},重新登录RMTt"
)
...
...
@@ -607,6 +584,8 @@ class AudioHomeActivity :
return
@setOnClickListener
}
if
(
isConnectSuccess
)
{
callEventSave
(
"50"
,
"已接通:主叫主动挂断"
)
writeAgoraLog
(
"已接通:主叫主动挂断"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"已接通:主叫主动挂断"
)
...
...
@@ -660,6 +639,8 @@ class AudioHomeActivity :
.
permission
(
com
.
hjq
.
permissions
.
Permission
.
RECORD_AUDIO
)
.
request
(
object
:
OnPermissionCallback
{
override
fun
onGranted
(
p0
:
MutableList
<
String
>?,
p1
:
Boolean
)
{
callEventSave
(
"80"
,
"请求音频权限通过"
)
writeAgoraLog
(
"请求音频权限通过"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"请求音频权限通过"
)
...
...
@@ -674,6 +655,8 @@ class AudioHomeActivity :
YDLavManager
.
AUDIO_NO_AUTH_ERROR_CODE
,
null
)
callEventSave
(
"80"
,
"拒绝请求音频权限"
)
writeAgoraLog
(
"拒绝请求音频权限"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"拒绝请求音频权限"
)
...
...
@@ -688,7 +671,9 @@ class AudioHomeActivity :
}
})
}
catch
(
e
:
Exception
){
}
catch
(
e
:
Exception
)
{
callEventSave
(
"80"
,
"请求音频权限异常${e.message}"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"请求音频权限异常${e.message}"
)
init
()
...
...
@@ -740,6 +725,8 @@ class AudioHomeActivity :
}
},
{
callEventSave
(
"80"
,
"倒计时异常${it.message}"
)
LogUtil
.
d
(
it
.
message
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"倒计时异常${it.message}"
)
...
...
@@ -748,6 +735,8 @@ class AudioHomeActivity :
if
(!
isConnectSuccess
)
{
//关闭音乐
stopPlaying
()
callEventSave
(
"50"
,
"未接通挂断:50s等待倒计时结束挂断"
)
writeAgoraLog
(
"未接通挂断:50s等待倒计时结束挂断"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"未接通挂断:50s等待倒计时结束挂断"
)
...
...
@@ -758,6 +747,8 @@ class AudioHomeActivity :
channelId
!!
,
sendDoctocrMsg
!!
)
{
msg
,
code
->
callEventSave
(
"50"
,
"未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断"
)
writeAgoraLog
(
"未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
...
...
@@ -798,6 +789,8 @@ class AudioHomeActivity :
* 声网加入频道
*/
fun
joinChannel
()
{
callEventSave
(
"40"
,
"对方(专家)接受了通话邀请,主叫(用户)开始加入频道:$channelId"
)
writeAgoraLog
(
"对方(专家)接受了通话邀请,主叫(用户)开始加入频道:$channelId"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"对方(专家)接受了通话邀请,主叫(用户)开始加入频道:$channelId"
)
...
...
@@ -815,6 +808,8 @@ class AudioHomeActivity :
*
*/
private
fun
userCloseCalling
()
{
callEventSave
(
"50"
,
"未接听时:主叫(用户)主动挂断,取消呼叫"
)
writeAgoraLog
(
"未接听时:主叫(用户)主动挂断,取消呼叫"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"未接听时:主叫(用户)主动挂断,取消呼叫"
)
...
...
@@ -825,6 +820,8 @@ class AudioHomeActivity :
channelId
!!
,
sendDoctocrMsg
!!
)
{
msg
,
code
->
callEventSave
(
"50"
,
"未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断"
)
writeAgoraLog
(
"未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断"
)
...
...
@@ -873,6 +870,8 @@ class AudioHomeActivity :
val
dialog
=
AxbConfirmDialog
(
mContext
,
type
,
object
:
AxbConfirmDialog
.
OnClickEnsureListener
{
override
fun
onClickEnsure
()
{
callEventSave
(
"80"
,
"主叫点击切换AXB按钮"
)
writeAgoraLog
(
"主叫点击切换AXB按钮"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"主叫点击切换AXB按钮"
)
...
...
@@ -897,6 +896,8 @@ class AudioHomeActivity :
if
(
isConnectSuccess
)
{
uploadException
(
""
,
"zhu"
,
"108"
,
object
:
YDLavManager
.
UploadExceptionCallback
{
override
fun
onSuccess
()
{
callEventSave
(
"80"
,
"离开房间成功,主叫切换AXB之后"
)
writeAgoraLog
(
"离开房间成功,主叫切换AXB之后"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"离开房间成功,主叫切换AXB之后"
)
...
...
@@ -932,6 +933,8 @@ class AudioHomeActivity :
channelId
!!
,
sendDoctocrMsg
!!
)
{
msg
,
code
->
callEventSave
(
"80"
,
"未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断"
)
writeAgoraLog
(
"未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断"
)
...
...
@@ -1094,6 +1097,8 @@ class AudioHomeActivity :
},
{
LogUtil
.
d
(
it
.
message
)
},
{
callEventSave
(
"60"
,
"倾诉时间已用完"
)
YDLavManager
.
instances
.
callEndStatusUpdate
(
channelId
!!
,
3
,
"倾诉时间已用完"
)
//注意:自动挂断时,如果对方离开频道的回调已经触发,就不要再重复调用接口
showToast
(
"通话已结束"
)
...
...
@@ -1366,4 +1371,24 @@ class AudioHomeActivity :
//重写物理返回按钮
override
fun
onBackPressed
()
{
}
/**
* 倾诉日志
* @param session 通话业务id
* @param status 状态:01通话中(不影响通话的事件) 10:拨打 20未拨通 30未接通 40 接通 50挂断 60断线 70重连 80 呼叫方信号 90 被呼叫方信号
* @param res 上报的详细
* @param line 载体:1.网易 2.中国移动(双呼)3.联通 4.华为 5.糖猫-联通 7:声网 8:微信 10:新移动
* */
private
fun
callEventSave
(
status
:
String
,
res
:
String
,
session
:
String
?
=
channelId
,
line
:
String
=
"7"
)
{
AudioApiRequestUtil
.
callEventSave
(
session
,
line
,
status
,
res
)
.
subscribeOn
(
Schedulers
.
io
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
()
}
}
m-audioim/src/main/java/com/ydl/audioim/http/AudioApiRequestUtil.kt
View file @
6f802002
...
...
@@ -12,6 +12,7 @@ import com.ydl.ydlcommon.data.http.BaseAPIResponse
import
com.ydl.ydlcommon.data.http.BaseResponse
import
com.ydl.ydlcommon.data.http.RxUtils
import
com.ydl.ydlcommon.utils.NetworkParamsUtils
import
com.ydl.ydlcommon.utils.TimeUtil
import
com.ydl.ydlnet.YDLHttpUtils
import
io.reactivex.Observable
import
okhttp3.MediaType
...
...
@@ -100,5 +101,13 @@ class AudioApiRequestUtil {
fun
callEndStatusUpdate
(
channelId
:
String
,
endStatus
:
Int
,
msg
:
String
):
Observable
<
BaseAPIResponse
<
Any
>>
{
return
YDLHttpUtils
.
obtainApi
(
AudioNetAPi
::
class
.
java
).
callEndStatusUpdate
(
channelId
,
endStatus
,
msg
)
}
fun
callEventSave
(
session
:
String
?,
line
:
String
,
status
:
String
,
reponse
:
String
):
Observable
<
BaseAPIResponse
<
Any
>>
{
var
eventTime
=
TimeUtil
.
getNowDatetime
()
return
YDLHttpUtils
.
obtainApi
(
AudioNetAPi
::
class
.
java
).
callEventSave
(
session
,
eventTime
,
line
,
status
,
reponse
)
}
}
}
\ No newline at end of file
m-audioim/src/main/java/com/ydl/audioim/http/AudioNetAPi.kt
View file @
6f802002
...
...
@@ -73,4 +73,14 @@ interface AudioNetAPi {
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
)
fun
callEndStatusUpdate
(
@Query
(
"channelId"
)
channelId
:
String
,
@Query
(
"endStatus"
)
endStatus
:
Int
,
@Query
(
"msg"
)
msg
:
String
):
Observable
<
BaseAPIResponse
<
Any
>>
//倾诉事件上报接口
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@POST
(
"call/v1/event/save"
)
fun
callEventSave
(
@Query
(
"session"
)
session
:
String
?,
@Query
(
"eventTime"
)
eventTime
:
String
,
@Query
(
"line"
)
line
:
String
,
@Query
(
"status"
)
status
:
String
,
@Query
(
"reponse"
)
reponse
:
String
):
Observable
<
BaseAPIResponse
<
Any
>>
}
\ No newline at end of file
m-audioim/src/main/java/com/ydl/consultantim/ConsultantAudioHomeActivity.kt
View file @
6f802002
...
...
@@ -13,10 +13,10 @@ import android.hardware.SensorManager
import
android.net.Uri
import
android.os.PowerManager
import
android.provider.Settings
import
androidx.core.content.ContextCompat
import
android.text.TextUtils
import
android.view.View
import
android.view.animation.AccelerateInterpolator
import
androidx.core.content.ContextCompat
import
com.alibaba.android.arouter.facade.annotation.Route
import
com.alibaba.android.arouter.launcher.ARouter
import
com.google.gson.Gson
...
...
@@ -24,6 +24,7 @@ import com.tbruyelle.rxpermissions2.RxPermissions
import
com.ydl.audioim.BuildConfig
import
com.ydl.audioim.R
import
com.ydl.audioim.YDLavManager
import
com.ydl.audioim.http.AudioApiRequestUtil
import
com.ydl.audioim.http.command.ConnectExceptionCommand
import
com.ydl.audioim.http.command.PayLoad
import
com.ydl.audioim.player.AudioPlayer
...
...
@@ -130,6 +131,7 @@ class ConsultantAudioHomeActivity :
* @param muted 该用户是否静音:true: 该用户已静音音频 false: 该用户已取消音频静音
*/
override
fun
onUserMuteAudio
(
uid
:
Int
,
muted
:
Boolean
)
{
callEventSave
(
"80"
,
"uid:${uid} 开启了静音 = ${muted}"
)
// runOnUiThread {
// showToast("对方静音了,提醒他打开!")
// }
...
...
@@ -137,9 +139,12 @@ class ConsultantAudioHomeActivity :
override
fun
onJoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onJoinChannelSuccess
(
channel
,
uid
,
elapsed
)
callEventSave
(
"40"
,
"uid:${uid} 加入声网($channel)频道成功"
)
LogUtil
.
e
(
"[agora]$uid 加入频道回调"
)
writeAgoraLog
(
"被叫(用户)加入声网($channel)频道成功"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"被叫(用户)加入声网($channel)频道成功"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"被叫(用户)加入声网($channel)频道成功"
)
runOnUiThread
{
// 加入频道后再通知用户已接受
// YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId)
...
...
@@ -165,6 +170,8 @@ class ConsultantAudioHomeActivity :
*/
override
fun
onRejoinChannelSuccess
(
channel
:
String
?,
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onRejoinChannelSuccess
(
channel
,
uid
,
elapsed
)
callEventSave
(
"70"
,
"uid:${uid} 被叫(用户${uid})重新加入声网频道($channel)成功"
)
LogUtil
.
e
(
"[agora]$uid 重新加入频道回调"
)
writeAgoraLog
(
"被叫(用户)重新加入声网频道($channel)成功"
)
AliYunRichLogsHelper
.
getInstance
()
...
...
@@ -185,6 +192,8 @@ class ConsultantAudioHomeActivity :
override
fun
onUserJoined
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserJoined
(
uid
,
elapsed
)
callEventSave
(
"80"
,
"uid:${uid} 主叫(专家)加入声网频道成功"
)
LogUtil
.
e
(
"[agora]远端用户加入频道回调"
)
writeAgoraLog
(
"主叫(专家)加入声网频道成功"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"主叫(专家)加入声网频道成功"
)
...
...
@@ -207,6 +216,8 @@ class ConsultantAudioHomeActivity :
super
.
onConnectionStateChanged
(
state
,
reason
)
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if
(
reason
==
3
)
{
callEventSave
(
"50"
,
"通话挂断:网络连接被服务器(后端)中止"
)
showToast
(
"对方已挂断"
)
YDLavManager
.
instances
.
callEndStatusUpdate
(
mAudioMessageBean
?.
channelId
!!
,
...
...
@@ -229,6 +240,8 @@ class ConsultantAudioHomeActivity :
*/
override
fun
onLeaveChannel
(
stats
:
IRtcEngineEventHandler
.
RtcStats
?)
{
super
.
onLeaveChannel
(
stats
)
callEventSave
(
"50"
,
"自己离开频道回调"
)
LogUtil
.
e
(
"[agora]自己离开频道回调"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"自己离开频道回调"
)
...
...
@@ -250,6 +263,21 @@ class ConsultantAudioHomeActivity :
override
fun
onUserOffline
(
uid
:
Int
,
elapsed
:
Int
)
{
super
.
onUserOffline
(
uid
,
elapsed
)
LogUtil
.
e
(
"[agora]$uid 主播离开频道回调"
)
when
(
elapsed
)
{
0
->
{
callEventSave
(
"50"
,
"用户主动离开"
)
}
1
->
{
callEventSave
(
"60"
,
"因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线"
)
}
2
->
{
callEventSave
(
"60"
,
"用户身份从主播切换为观众(直播模式下)"
)
}
}
runOnUiThread
{
YDLavManager
.
instances
.
callEndStatusUpdate
(
mAudioMessageBean
?.
channelId
!!
,
...
...
@@ -258,7 +286,8 @@ class ConsultantAudioHomeActivity :
)
showToast
(
"对方已挂断"
)
writeAgoraLog
(
"通话接通后挂断:主叫(专家)离开频道"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"通话接通后挂断:主叫(专家)离开频道"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"通话接通后挂断:主叫(专家)离开频道"
)
if
(
null
!=
totalDisposable
)
{
totalDisposable
!!
.
dispose
()
...
...
@@ -303,7 +332,8 @@ class ConsultantAudioHomeActivity :
uploadException
(
"mRtcEventHandler-onError:errorCode--%${err}"
)
LogUtil
.
e
(
"[agora] 发生错误回调 =$err"
)
writeAgoraLog
(
"声网错误回调errorCode--%${err}"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"声网错误回调errorCode--%${err}"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"声网错误回调errorCode--%${err}"
)
//3:SDK 初始化失败。Agora 建议尝试以下处理方法
//7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化
...
...
@@ -321,20 +351,31 @@ class ConsultantAudioHomeActivity :
3
,
7
,
109
,
110
->
{
showToast
(
"请退出应用,重新打开"
)
close
(
RESULT_NOT_ANSWERED_CODE
,
"咨询师已挂断"
)
callEventSave
(
"30"
,
"err:${err} 3:SDK 初始化失败|7:SDK 尚未初始化|109:当前使用的 Token 过期|110:生成的 Token 无效"
)
}
10
->
{
callEventSave
(
"30"
,
"err:${err} 专家网络较差"
)
showToast
(
"当前网络较差,请更换网络"
)
close
(
RESULT_NOT_ANSWERED_CODE
,
"专家网络较差"
)
}
101
->
{
callEventSave
(
"30"
,
"err:${err} 不是有效的 APP ID"
)
showToast
(
"安装包有问题,请联系技术"
)
close
(
RESULT_NOT_ANSWERED_CODE
,
"安装包有问题,请联系技术"
)
}
102
->
{
callEventSave
(
"30"
,
"err:${err} 不是有效的 频道名"
)
showToast
(
"频道错误,请联系技术"
)
close
(
RESULT_NOT_ANSWERED_CODE
,
"频道错误,请联系技术"
)
}
123
->
{
callEventSave
(
"30"
,
"err:${err}此用户被服务器禁止"
)
// showToast("对方不允许接听电话,请联系客服")
// close(RESULT_NOT_ANSWERED_CODE, "该专家不允许接听电话,请联系客服")
}
...
...
@@ -348,11 +389,13 @@ class ConsultantAudioHomeActivity :
)
}
}
//本地音频状态监听
override
fun
onLocalAudioStateChanged
(
localVideoState
:
Int
,
error
:
Int
)
{
super
.
onLocalAudioStateChanged
(
localVideoState
,
error
)
writeAgoraLog
(
"本地音频回调$error"
)
}
override
fun
onNetworkQuality
(
uid
:
Int
,
txQuality
:
Int
,
rxQuality
:
Int
)
{
super
.
onNetworkQuality
(
uid
,
txQuality
,
rxQuality
)
var
status
=
-
1
...
...
@@ -444,6 +487,8 @@ class ConsultantAudioHomeActivity :
mAudioMessageBean
=
Gson
().
fromJson
(
json
,
AudioMessageBean
::
class
.
java
)
if
(
YDLavManager
.
sdkStatus
!=
Constants
.
CONNECTION_STATE_CONNECTED
)
{
callEventSave
(
"90"
,
"RMT状态:${YDLavManager.sdkStatus},重新登录RMT"
)
writeAgoraLog
(
"RMT状态:${YDLavManager.sdkStatus},重新登录RMT"
)
val
uid
=
ModularServiceManager
.
provide
(
IUserService
::
class
.
java
).
getUserInfo
()
?.
uid
...
...
@@ -457,6 +502,8 @@ class ConsultantAudioHomeActivity :
}
}
}
else
{
callEventSave
(
"90"
,
"通话异常"
)
close
(
RESULT_NOT_ANSWERED_CODE
,
"通话异常"
)
return
}
...
...
@@ -497,6 +544,8 @@ class ConsultantAudioHomeActivity :
}
tv_name
.
text
=
userName
writeAgoraLog
(
"用户接收电话界面开启"
)
callEventSave
(
"90"
,
"用户接收电话界面开启"
)
}
private
fun
initData
()
{
...
...
@@ -527,6 +576,8 @@ class ConsultantAudioHomeActivity :
override
fun
channelTokenResponse
(
token
:
String
?,
needJoinChannel
:
Boolean
)
{
if
(
TextUtils
.
isEmpty
(
token
))
{
callEventSave
(
"90"
,
"通话频道不存在"
)
LogUtil
.
e
(
"[agora]token not null"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"token isEmpty "
)
...
...
@@ -560,9 +611,15 @@ class ConsultantAudioHomeActivity :
rxPermissions
.
requestEach
(
Manifest
.
permission
.
RECORD_AUDIO
).
subscribe
{
permission
->
when
{
//权限已申请 进行初始化操作
permission
.
granted
->
init
()
permission
.
granted
->
{
init
()
callEventSave
(
"90"
,
"申请音频权限成功"
)
}
//权限为申请 重新申请
permission
.
shouldShowRequestPermissionRationale
->
requestPermission
()
permission
.
shouldShowRequestPermissionRationale
->
{
requestPermission
()
callEventSave
(
"90"
,
"权限 重新申请"
)
}
//跳转设置界面
else
->
{
ToastHelper
.
show
(
getString
(
R
.
string
.
audioim_need_storage_permission_hint
))
...
...
@@ -602,8 +659,11 @@ class ConsultantAudioHomeActivity :
private
fun
joinChannel
()
{
val
account
=
YdlCommonRouterManager
.
getYdlCommonRoute
().
getUid
()
if
(!
TextUtils
.
isEmpty
(
mAudioMessageBean
?.
channelId
))
{
callEventSave
(
"40"
,
"加入频道joinChannel:$account"
)
LogUtil
.
e
(
"[agora] joinChannel:$account"
)
AliYunRichLogsHelper
.
getInstance
().
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"joinChannel:$account"
)
AliYunRichLogsHelper
.
getInstance
()
.
sendRichLog
(
AliYunLogConfig
.
AGORA
,
"joinChannel:$account"
)
voiceManage
?.
getVoiceApi
()
?.
joinChannel
(
channelToken
...
...
@@ -613,6 +673,8 @@ class ConsultantAudioHomeActivity :
}
override
fun
executeFinish
()
{
callEventSave
(
"50"
,
"对方已挂断"
)
showToast
(
"对方已挂断"
)
close
(
RESULT_ANSWERED_CODE
,
""
)
}
...
...
@@ -645,10 +707,14 @@ class ConsultantAudioHomeActivity :
private
fun
showStopService
()
{
if
(
status
==
STATUS_NOT_ANSWERED
)
{
YDLavManager
.
instances
.
callEndStatusUpdate
(
mAudioMessageBean
?.
channelId
!!
,
2
,
"被叫主动拒绝"
)
callEventSave
(
"30"
,
"通话未接通挂断:用户主动挂断"
)
writeAgoraLog
(
"通话未接通挂断:用户主动挂断"
)
//当未接听 直接挂断 要发送给老师一条消息
close
(
RESULT_NOT_ANSWERED_CODE
,
"用户已挂断"
)
}
else
if
(
status
==
STATUS_ANSWERED
)
{
callEventSave
(
"50"
,
"通话接通后挂断:专家主动挂断"
)
YDLavManager
.
instances
.
callEndStatusUpdate
(
mAudioMessageBean
?.
channelId
!!
,
3
,
"被叫主动拒绝"
)
writeAgoraLog
(
"通话接通后挂断:专家主动挂断"
)
//正常接听 挂断电话 需要重置信令管理类状态
...
...
@@ -668,6 +734,8 @@ class ConsultantAudioHomeActivity :
return
}
showStopService
()
callEventSave
(
"50"
,
"用户点击挂断按钮"
)
writeAgoraLog
(
"用户点击挂断按钮"
)
ActionCountUtils
.
count
(
"shengwang_popup_layer_page|shengwang_popup_layer_refuse_click"
,
...
...
@@ -691,6 +759,7 @@ class ConsultantAudioHomeActivity :
// ?: "")
executeCall
(
true
)
callEventSave
(
"90"
,
"用户点击接听按钮"
)
ActionCountUtils
.
count
(
...
...
@@ -708,6 +777,8 @@ class ConsultantAudioHomeActivity :
//停止震动
VibratorUtil
.
StopVibrate
(
this
)
if
(!
canExcute
)
{
callEventSave
(
"80"
,
"对方已挂断"
)
showToast
(
"对方已挂断"
)
finish
()
}
else
{
...
...
@@ -1026,4 +1097,24 @@ class ConsultantAudioHomeActivity :
}
super
.
onDestroy
()
}
/**
* 倾诉日志
* @param session 通话业务id
* @param status 状态:01通话中(不影响通话的事件) 10:拨打 20未拨通 30未接通 40 接通 50挂断 60断线 70重连 80 呼叫方信号 90 被呼叫方信号
* @param res 上报的详细
* @param line 载体:1.网易 2.中国移动(双呼)3.联通 4.华为 5.糖猫-联通 7:声网 8:微信 10:新移动
* */
private
fun
callEventSave
(
status
:
String
,
res
:
String
,
session
:
String
?
=
channelToken
,
line
:
String
=
"7"
)
{
AudioApiRequestUtil
.
callEventSave
(
session
,
line
,
status
,
res
)
.
subscribeOn
(
Schedulers
.
io
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
()
}
}
m-confide/src/main/java/com/ydl/confide/home/http/ConfideHomeApi.kt
View file @
6f802002
...
...
@@ -15,19 +15,22 @@ import retrofit2.http.*
* @Company 壹点灵
* @date 2018/8/10
*/
interface
ConfideHomeApi
{
interface
ConfideHomeApi
{
//倾诉首页
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@GET
fun
confideHome
(
@Url
url
:
String
,
@Query
(
"cateSource"
)
cateSource
:
Int
):
Observable
<
BaseAPIResponse
<
MutableList
<
ConfideHomeDataBean
>>>
fun
confideHome
(
@Url
url
:
String
,
@Query
(
"cateSource"
)
cateSource
:
Int
):
Observable
<
BaseAPIResponse
<
MutableList
<
ConfideHomeDataBean
>>>
//每日精选 换一批
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@GET
fun
recommedChange
(
@Url
url
:
String
):
Observable
<
BaseAPIResponse
<
ConfideHomeDataBean
>>
//连接-java接口
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
,
"Content-Type:application/json"
)
@GET
(
"auth/listen/dial"
)
fun
connectJava
(
@QueryMap
params
:
Map
<
String
,
String
>):
Observable
<
BaseAPIResponse
<
ConfideConnectResponse
>>
}
\ No newline at end of file
m-confide/src/main/java/com/ydl/confide/home/http/ConfideHomeHttpImpl.kt
View file @
6f802002
...
...
@@ -16,7 +16,7 @@ import io.reactivex.Observable
* @Company 壹点灵
* @date 2018/7/26
*/
class
ConfideHomeHttpImpl
private
constructor
()
:
IConfideHomeHttp
{
class
ConfideHomeHttpImpl
private
constructor
()
:
IConfideHomeHttp
{
companion
object
{
fun
getInstance
():
ConfideHomeHttpImpl
{
...
...
@@ -34,40 +34,39 @@ class ConfideHomeHttpImpl private constructor(): IConfideHomeHttp{
override
fun
confideHomeRequest
():
Observable
<
BaseAPIResponse
<
MutableList
<
ConfideHomeDataBean
>>>
{
return
RxUtils
.
mapObservable
(
ConfideHomeParam
(
0
))
.
flatMap
{
confideHomeApi
.
confideHome
(
HttpConfig
.
JAVA_BASE_URL
+
"auth/listen/home"
,
2
)
}
.
flatMap
{
confideHomeApi
.
confideHome
(
HttpConfig
.
JAVA_BASE_URL
+
"auth/listen/home"
,
2
)
}
}
override
fun
recommendList
(
param
:
ConfideRecommendParam
):
Observable
<
BaseAPIResponse
<
ConfideHomeDataBean
>>
{
override
fun
recommendList
(
param
:
ConfideRecommendParam
):
Observable
<
BaseAPIResponse
<
ConfideHomeDataBean
>>
{
val
inUid
=
StringBuffer
()
for
(
i
in
param
.
notInUid
.
indices
)
{
inUid
.
append
(
param
.
notInUid
[
i
])
if
(
i
<
param
.
notInUid
.
size
-
1
)
{
if
(
i
<
param
.
notInUid
.
size
-
1
)
{
inUid
.
append
(
","
)
}
}
val
sb
=
StringBuffer
()
sb
.
append
(
"page"
).
append
(
"="
).
append
(
param
.
page
).
append
(
"&"
)
.
append
(
"sortType"
).
append
(
"="
).
append
(
param
.
getSortType
()).
append
(
"&"
)
.
append
(
"sexType"
).
append
(
"="
).
append
(
param
.
getSexType
()).
append
(
"&"
)
.
append
(
"ageType"
).
append
(
"="
).
append
(
param
.
getAgeType
()).
append
(
"&"
)
.
append
(
"goodType"
).
append
(
"="
).
append
(
param
.
getGoodType
()).
append
(
"&"
)
.
append
(
"notInUid"
).
append
(
"="
).
append
(
inUid
.
toString
()).
append
(
"&"
)
.
append
(
"sortType"
).
append
(
"="
).
append
(
param
.
getSortType
()).
append
(
"&"
)
.
append
(
"sexType"
).
append
(
"="
).
append
(
param
.
getSexType
()).
append
(
"&"
)
.
append
(
"ageType"
).
append
(
"="
).
append
(
param
.
getAgeType
()).
append
(
"&"
)
.
append
(
"goodType"
).
append
(
"="
).
append
(
param
.
getGoodType
()).
append
(
"&"
)
.
append
(
"notInUid"
).
append
(
"="
).
append
(
inUid
.
toString
()).
append
(
"&"
)
val
confideParam
=
sb
.
toString
()
return
RxUtils
.
mapObservable
(
param
)
.
flatMap
{
confideHomeApi
.
recommedChange
(
HttpConfig
.
JAVA_BASE_URL
+
"auth/listen/nsearch?"
+
confideParam
)
}
.
flatMap
{
confideHomeApi
.
recommedChange
(
HttpConfig
.
JAVA_BASE_URL
+
"auth/listen/nsearch?"
+
confideParam
)
}
}
override
fun
connectionJava
(
connectParam
:
ConnectParamJava
):
Observable
<
BaseAPIResponse
<
ConfideConnectResponse
>>
{
return
RxUtils
.
mapObservable
(
connectParam
)
.
flatMap
{
it
->
YDLHttpUtils
.
obtainApi
(
ConfideHomeApi
::
class
.
java
).
connectJava
(
it
)
}
.
flatMap
{
it
->
YDLHttpUtils
.
obtainApi
(
ConfideHomeApi
::
class
.
java
).
connectJava
(
it
)
}
}
}
\ No newline at end of file
m-confide/src/main/java/com/ydl/confide/home/http/IConfideHomeHttp.kt
View file @
6f802002
...
...
@@ -13,7 +13,7 @@ import io.reactivex.Observable
* @Company 壹点灵
* @date 2018/7/26
*/
interface
IConfideHomeHttp
{
interface
IConfideHomeHttp
{
/**
* 倾诉首页请求
*/
...
...
@@ -22,8 +22,8 @@ interface IConfideHomeHttp{
/**
* 为你推荐列表
*/
fun
recommendList
(
param
:
ConfideRecommendParam
):
Observable
<
BaseAPIResponse
<
ConfideHomeDataBean
>>
fun
recommendList
(
param
:
ConfideRecommendParam
):
Observable
<
BaseAPIResponse
<
ConfideHomeDataBean
>>
//倾诉链接,java接口,支持axb和声网
fun
connectionJava
(
connectParam
:
ConnectParamJava
)
:
Observable
<
BaseAPIResponse
<
ConfideConnectResponse
>>
fun
connectionJava
(
connectParam
:
ConnectParamJava
):
Observable
<
BaseAPIResponse
<
ConfideConnectResponse
>>
}
\ No newline at end of file
m-confide/src/main/java/com/ydl/confide/home/modular/service/ConfideWebServiceImpl.kt
View file @
6f802002
...
...
@@ -13,15 +13,12 @@ import com.ydl.audioim.widget.AxbConfirmDialog
import
com.ydl.confide.home.bean.ConnectParamJava
import
com.ydl.confide.home.constants.FinalString
import
com.ydl.confide.home.http.ConfideHomeDataManager
import
com.ydl.confide.home.util.ConfideNetworkUtil
import
com.ydl.webview.H5Params
import
com.ydl.webview.NewH5Activity
import
com.ydl.webview.TellData
import
com.ydl.ydlcommon.base.BaseApp
import
com.ydl.ydlcommon.modular.ModularServiceManager
import
com.ydl.ydlcommon.utils.remind.ToastHelper
import
com.ydl.ydlcommon.view.dialog.CommonDialog
import
com.yidianling.common.tools.RxSPTool
import
com.yidianling.common.tools.ToastUtil
import
com.yidianling.user.api.service.IUserService
import
com.yidianling.ydl_pay.pay.payDialog.CallBack
...
...
@@ -111,7 +108,7 @@ class ConfideWebServiceImpl {
if
(
it
.
data
?.
dialDetail
?.
callConnectType
?:
-
1
==
3
)
{
//声网
it
.
data
?.
dialDetail
?.
agoraExpertInfo
?:
return
@subscribe
if
(!
YDLavManager
.
isOnlineRtm
){
// 判断如果账号在其它设备登录rtm是否在线
if
(!
YDLavManager
.
isOnlineRtm
)
{
// 判断如果账号在其它设备登录rtm是否在线
ToastUtil
.
toastShort
(
"网络通话错误代码001"
)
return
@subscribe
}
...
...
@@ -170,43 +167,41 @@ class ConfideWebServiceImpl {
isShowAXB
:
Boolean
,
dialStatus
:
String
)
{
if
(
expertInfo
.
listenerStatus
!=
1
)
{
ToastHelper
.
show
(
"老师正在通话中,请稍后重试"
)
return
}
if
(
TextUtils
.
isEmpty
(
expertInfo
.
channelId
))
{
ToastHelper
.
show
(
"服务端返回参数异常,请刷新页面后重试"
)
return
}
if
(
expertInfo
.
remainingTime
?.
remainingTime
==
null
)
{
expertInfo
.
remainingTime
=
ExpertInfoBean
.
ListenRemainingTime
(
expertInfo
.
totalDuration
);
}
ARouter
.
getInstance
().
build
(
"/av/AudioHomeActivity"
)
.
withString
(
IntentConstants
.
INTENT_EXPERT_HEAD_URL
,
expertInfo
.
expertHeadUrl
)
.
withString
(
IntentConstants
.
INTENT_EXPERT_NAME
,
expertInfo
.
expertName
)
.
withString
(
IntentConstants
.
INTENT_EXPERT_TIPS
,
expertInfo
.
expertTips
)
.
withString
(
IntentConstants
.
INTENT_ROOM_ID
,
expertInfo
.
channelId
)
.
withString
(
IntentConstants
.
INTENT_REMAIN_TIME
,
expertInfo
.
remainingTime
.
remainingTime
)
.
withString
(
IntentConstants
.
INTENT_CALL_ID
,
call_id
)
.
withString
(
IntentConstants
.
INTENT_RELATION_ID
,
"${relation_id}"
)
.
withString
(
IntentConstants
.
INTENT_TOKEN
,
expertInfo
.
token
)
.
withString
(
IntentConstants
.
INTENT_SIGNAL_TOKEN
,
expertInfo
.
signalToken
)
.
withString
(
IntentConstants
.
INTENT_LISTENER_UID
,
expertInfo
.
listenerUid
)
.
withString
(
IntentConstants
.
INTENT_TOTAL_DURATION
,
expertInfo
.
totalDuration
)
.
withString
(
IntentConstants
.
INTENT_COMMENT_URL
,
expertInfo
.
commentUrl
)
.
withString
(
IntentConstants
.
INTENT_LISTEN_ID
,
confideId
.
toString
())
.
withString
(
IntentConstants
.
INTENT_DIALSTATUS
,
dialStatus
)
.
withBoolean
(
IntentConstants
.
INTENT_ISSHOWAXB
,
isShowAXB
)
.
navigation
(
activity
)
if
(
expertInfo
.
listenerStatus
!=
1
)
{
ToastHelper
.
show
(
"老师正在通话中,请稍后重试"
)
return
}
if
(
TextUtils
.
isEmpty
(
expertInfo
.
channelId
))
{
ToastHelper
.
show
(
"服务端返回参数异常,请刷新页面后重试"
)
return
}
if
(
expertInfo
.
remainingTime
?.
remainingTime
==
null
)
{
expertInfo
.
remainingTime
=
ExpertInfoBean
.
ListenRemainingTime
(
expertInfo
.
totalDuration
);
}
ARouter
.
getInstance
().
build
(
"/av/AudioHomeActivity"
)
.
withString
(
IntentConstants
.
INTENT_EXPERT_HEAD_URL
,
expertInfo
.
expertHeadUrl
)
.
withString
(
IntentConstants
.
INTENT_EXPERT_NAME
,
expertInfo
.
expertName
)
.
withString
(
IntentConstants
.
INTENT_EXPERT_TIPS
,
expertInfo
.
expertTips
)
.
withString
(
IntentConstants
.
INTENT_ROOM_ID
,
expertInfo
.
channelId
)
.
withString
(
IntentConstants
.
INTENT_REMAIN_TIME
,
expertInfo
.
remainingTime
.
remainingTime
)
.
withString
(
IntentConstants
.
INTENT_CALL_ID
,
call_id
)
.
withString
(
IntentConstants
.
INTENT_RELATION_ID
,
"${relation_id}"
)
.
withString
(
IntentConstants
.
INTENT_TOKEN
,
expertInfo
.
token
)
.
withString
(
IntentConstants
.
INTENT_SIGNAL_TOKEN
,
expertInfo
.
signalToken
)
.
withString
(
IntentConstants
.
INTENT_LISTENER_UID
,
expertInfo
.
listenerUid
)
.
withString
(
IntentConstants
.
INTENT_TOTAL_DURATION
,
expertInfo
.
totalDuration
)
.
withString
(
IntentConstants
.
INTENT_COMMENT_URL
,
expertInfo
.
commentUrl
)
.
withString
(
IntentConstants
.
INTENT_LISTEN_ID
,
confideId
.
toString
())
.
withString
(
IntentConstants
.
INTENT_DIALSTATUS
,
dialStatus
)
.
withBoolean
(
IntentConstants
.
INTENT_ISSHOWAXB
,
isShowAXB
)
.
navigation
(
activity
)
}
}
m-im/src/main/java/com/yidianling/avchatkit/common/util/TimeUtil.java
View file @
6f802002
...
...
@@ -9,6 +9,10 @@ import java.util.GregorianCalendar;
import
java.util.Locale
;
import
java.util.TimeZone
;
/**
* @author liupeng
* 日期转换工具
*/
public
class
TimeUtil
{
public
static
boolean
isEarly
(
int
days
,
long
time
)
{
...
...
@@ -235,15 +239,12 @@ public class TimeUtil {
cal2
.
setTime
(
date2
);
int
subYear
=
cal1
.
get
(
Calendar
.
YEAR
)
-
cal2
.
get
(
Calendar
.
YEAR
);
if
(
0
==
subYear
)
{
if
(
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
))
return
true
;
return
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
else
if
(
1
==
subYear
&&
11
==
cal2
.
get
(
Calendar
.
MONTH
))
{
// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
if
(
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
))
return
true
;
return
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
else
if
(-
1
==
subYear
&&
11
==
cal1
.
get
(
Calendar
.
MONTH
))
{
if
(
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
))
return
true
;
return
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
return
false
;
}
...
...
@@ -262,17 +263,18 @@ public class TimeUtil {
int
hour
=
0
;
int
minute
=
0
;
int
second
=
0
;
if
(
time
<=
0
)
if
(
time
<=
0
)
{
return
"00:00"
;
else
{
}
else
{
minute
=
time
/
60
;
if
(
minute
<
60
)
{
second
=
time
%
60
;
timeStr
=
unitFormat
(
minute
)
+
":"
+
unitFormat
(
second
);
}
else
{
hour
=
minute
/
60
;
if
(
hour
>
99
)
if
(
hour
>
99
)
{
return
"99:59:59"
;
}
minute
=
minute
%
60
;
second
=
time
-
hour
*
3600
-
minute
*
60
;
timeStr
=
unitFormat
(
hour
)
+
":"
+
unitFormat
(
minute
)
+
":"
+
unitFormat
(
second
);
...
...
@@ -283,17 +285,20 @@ public class TimeUtil {
public
static
String
unitFormat
(
int
i
)
{
String
retStr
=
null
;
if
(
i
>=
0
&&
i
<
10
)
if
(
i
>=
0
&&
i
<
10
)
{
retStr
=
"0"
+
Integer
.
toString
(
i
);
else
retStr
=
""
+
i
;
}
else
{
retStr
=
""
+
i
;
}
return
retStr
;
}
public
static
String
getElapseTimeForShow
(
int
milliseconds
)
{
StringBuilder
sb
=
new
StringBuilder
();
int
seconds
=
milliseconds
/
1000
;
if
(
seconds
<
1
)
if
(
seconds
<
1
)
{
seconds
=
1
;
}
int
hour
=
seconds
/
(
60
*
60
);
if
(
hour
!=
0
)
{
sb
.
append
(
hour
).
append
(
"小时"
);
...
...
ydl-platform/src/main/java/com/ydl/ydlcommon/utils/TimeUtil.java
0 → 100644
View file @
6f802002
package
com
.
ydl
.
ydlcommon
.
utils
;
import
java.math.BigDecimal
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
import
java.util.Locale
;
import
java.util.TimeZone
;
/**
* @author liupeng
* 日期转换工具
*/
public
class
TimeUtil
{
public
static
boolean
isEarly
(
int
days
,
long
time
)
{
return
(
currentTimeMillis
()
-
time
)
>
(
days
*
24
*
3600
*
1000
);
}
public
static
int
currentTimeSecond
()
{
return
(
int
)
(
System
.
currentTimeMillis
()
/
1000
);
}
public
static
long
currentTimeMillis
()
{
return
System
.
currentTimeMillis
();
}
public
static
long
[]
getTsTimes
()
{
long
[]
times
=
new
long
[
2
];
Calendar
calendar
=
Calendar
.
getInstance
();
times
[
0
]
=
calendar
.
getTimeInMillis
()
/
1000
;
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
times
[
1
]
=
calendar
.
getTimeInMillis
()
/
1000
;
return
times
;
}
public
static
String
getFormatDatetime
(
int
year
,
int
month
,
int
day
)
{
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
return
formatter
.
format
(
new
GregorianCalendar
(
year
,
month
,
day
).
getTime
());
}
public
static
Date
getDateFromFormatString
(
String
formatDate
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
try
{
return
sdf
.
parse
(
formatDate
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
String
getNowDatetime
()
{
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
,
Locale
.
getDefault
());
return
(
formatter
.
format
(
new
Date
()));
}
public
static
int
getNow
()
{
return
(
int
)
((
new
Date
()).
getTime
()
/
1000
);
}
public
static
String
getNowDateTime
(
String
format
)
{
Date
date
=
new
Date
();
SimpleDateFormat
df
=
new
SimpleDateFormat
(
format
,
Locale
.
getDefault
());
return
df
.
format
(
date
);
}
public
static
String
getDateString
(
long
milliseconds
)
{
return
getDateTimeString
(
milliseconds
,
"yyyyMMdd"
);
}
public
static
String
getTimeString
(
long
milliseconds
)
{
return
getDateTimeString
(
milliseconds
,
"HHmmss"
);
}
public
static
String
getBeijingNowTimeString
(
String
format
)
{
TimeZone
timezone
=
TimeZone
.
getTimeZone
(
"Asia/Shanghai"
);
Date
date
=
new
Date
(
currentTimeMillis
());
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
format
,
Locale
.
getDefault
());
formatter
.
setTimeZone
(
timezone
);
GregorianCalendar
gregorianCalendar
=
new
GregorianCalendar
();
gregorianCalendar
.
setTimeZone
(
timezone
);
String
prefix
=
gregorianCalendar
.
get
(
Calendar
.
AM_PM
)
==
Calendar
.
AM
?
"上午"
:
"下午"
;
return
prefix
+
formatter
.
format
(
date
);
}
public
static
String
getBeijingNowTime
(
String
format
)
{
TimeZone
timezone
=
TimeZone
.
getTimeZone
(
"Asia/Shanghai"
);
Date
date
=
new
Date
(
currentTimeMillis
());
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
format
,
Locale
.
getDefault
());
formatter
.
setTimeZone
(
timezone
);
return
formatter
.
format
(
date
);
}
public
static
String
getDateTimeString
(
long
milliseconds
,
String
format
)
{
Date
date
=
new
Date
(
milliseconds
);
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
format
,
Locale
.
getDefault
());
return
formatter
.
format
(
date
);
}
public
static
String
getFavoriteCollectTime
(
long
milliseconds
)
{
String
showDataString
=
""
;
Date
today
=
new
Date
();
Date
date
=
new
Date
(
milliseconds
);
Date
firstDateThisYear
=
new
Date
(
today
.
getYear
(),
0
,
0
);
if
(!
date
.
before
(
firstDateThisYear
))
{
SimpleDateFormat
dateformatter
=
new
SimpleDateFormat
(
"MM-dd"
,
Locale
.
getDefault
());
showDataString
=
dateformatter
.
format
(
date
);
}
else
{
SimpleDateFormat
dateformatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
,
Locale
.
getDefault
());
showDataString
=
dateformatter
.
format
(
date
);
}
return
showDataString
;
}
public
static
String
getTimeShowString
(
long
milliseconds
,
boolean
abbreviate
)
{
String
dataString
;
String
timeStringBy24
;
Date
currentTime
=
new
Date
(
milliseconds
);
Date
today
=
new
Date
();
Calendar
todayStart
=
Calendar
.
getInstance
();
todayStart
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
todayStart
.
set
(
Calendar
.
MINUTE
,
0
);
todayStart
.
set
(
Calendar
.
SECOND
,
0
);
todayStart
.
set
(
Calendar
.
MILLISECOND
,
0
);
Date
todaybegin
=
todayStart
.
getTime
();
Date
yesterdaybegin
=
new
Date
(
todaybegin
.
getTime
()
-
3600
*
24
*
1000
);
Date
preyesterday
=
new
Date
(
yesterdaybegin
.
getTime
()
-
3600
*
24
*
1000
);
if
(!
currentTime
.
before
(
todaybegin
))
{
dataString
=
"今天"
;
}
else
if
(!
currentTime
.
before
(
yesterdaybegin
))
{
dataString
=
"昨天"
;
}
else
if
(!
currentTime
.
before
(
preyesterday
))
{
dataString
=
"前天"
;
}
else
if
(
isSameWeekDates
(
currentTime
,
today
))
{
dataString
=
getWeekOfDate
(
currentTime
);
}
else
{
SimpleDateFormat
dateformatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
,
Locale
.
getDefault
());
dataString
=
dateformatter
.
format
(
currentTime
);
}
SimpleDateFormat
timeformatter24
=
new
SimpleDateFormat
(
"HH:mm"
,
Locale
.
getDefault
());
timeStringBy24
=
timeformatter24
.
format
(
currentTime
);
if
(
abbreviate
)
{
if
(!
currentTime
.
before
(
todaybegin
))
{
return
getTodayTimeBucket
(
currentTime
);
}
else
{
return
dataString
;
}
}
else
{
return
dataString
+
" "
+
timeStringBy24
;
}
}
/**
* 根据不同时间段,显示不同时间
*
* @param date
* @return
*/
public
static
String
getTodayTimeBucket
(
Date
date
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
SimpleDateFormat
timeformatter0to11
=
new
SimpleDateFormat
(
"KK:mm"
,
Locale
.
getDefault
());
SimpleDateFormat
timeformatter1to12
=
new
SimpleDateFormat
(
"hh:mm"
,
Locale
.
getDefault
());
int
hour
=
calendar
.
get
(
Calendar
.
HOUR_OF_DAY
);
if
(
hour
>=
0
&&
hour
<
5
)
{
return
"凌晨 "
+
timeformatter0to11
.
format
(
date
);
}
else
if
(
hour
>=
5
&&
hour
<
12
)
{
return
"上午 "
+
timeformatter0to11
.
format
(
date
);
}
else
if
(
hour
>=
12
&&
hour
<
18
)
{
return
"下午 "
+
timeformatter1to12
.
format
(
date
);
}
else
if
(
hour
>=
18
&&
hour
<
24
)
{
return
"晚上 "
+
timeformatter1to12
.
format
(
date
);
}
return
""
;
}
/**
* 根据日期获得星期
*
* @param date
* @return
*/
public
static
String
getWeekOfDate
(
Date
date
)
{
String
[]
weekDaysName
=
{
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
};
// String[] weekDaysCode = { "0", "1", "2", "3", "4", "5", "6" };
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
int
intWeek
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
return
weekDaysName
[
intWeek
];
}
public
static
boolean
isSameDay
(
long
time1
,
long
time2
)
{
return
isSameDay
(
new
Date
(
time1
),
new
Date
(
time2
));
}
public
static
boolean
isSameDay
(
Date
date1
,
Date
date2
)
{
Calendar
cal1
=
Calendar
.
getInstance
();
Calendar
cal2
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date1
);
cal2
.
setTime
(
date2
);
boolean
sameDay
=
cal1
.
get
(
Calendar
.
YEAR
)
==
cal2
.
get
(
Calendar
.
YEAR
)
&&
cal1
.
get
(
Calendar
.
DAY_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
DAY_OF_YEAR
);
return
sameDay
;
}
/**
* 判断两个日期是否在同一周
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isSameWeekDates
(
Date
date1
,
Date
date2
)
{
Calendar
cal1
=
Calendar
.
getInstance
();
Calendar
cal2
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date1
);
cal2
.
setTime
(
date2
);
int
subYear
=
cal1
.
get
(
Calendar
.
YEAR
)
-
cal2
.
get
(
Calendar
.
YEAR
);
if
(
0
==
subYear
)
{
return
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
else
if
(
1
==
subYear
&&
11
==
cal2
.
get
(
Calendar
.
MONTH
))
{
// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
return
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
else
if
(-
1
==
subYear
&&
11
==
cal1
.
get
(
Calendar
.
MONTH
))
{
return
cal1
.
get
(
Calendar
.
WEEK_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
return
false
;
}
public
static
long
getSecondsByMilliseconds
(
long
milliseconds
)
{
long
seconds
=
new
BigDecimal
((
float
)
((
float
)
milliseconds
/
(
float
)
1000
)).
setScale
(
0
,
BigDecimal
.
ROUND_HALF_UP
).
intValue
();
// if (seconds == 0) {
// seconds = 1;
// }
return
seconds
;
}
public
static
String
secToTime
(
int
time
)
{
String
timeStr
=
null
;
int
hour
=
0
;
int
minute
=
0
;
int
second
=
0
;
if
(
time
<=
0
)
{
return
"00:00"
;
}
else
{
minute
=
time
/
60
;
if
(
minute
<
60
)
{
second
=
time
%
60
;
timeStr
=
unitFormat
(
minute
)
+
":"
+
unitFormat
(
second
);
}
else
{
hour
=
minute
/
60
;
if
(
hour
>
99
)
{
return
"99:59:59"
;
}
minute
=
minute
%
60
;
second
=
time
-
hour
*
3600
-
minute
*
60
;
timeStr
=
unitFormat
(
hour
)
+
":"
+
unitFormat
(
minute
)
+
":"
+
unitFormat
(
second
);
}
}
return
timeStr
;
}
public
static
String
unitFormat
(
int
i
)
{
String
retStr
=
null
;
if
(
i
>=
0
&&
i
<
10
)
{
retStr
=
"0"
+
Integer
.
toString
(
i
);
}
else
{
retStr
=
""
+
i
;
}
return
retStr
;
}
public
static
String
getElapseTimeForShow
(
int
milliseconds
)
{
StringBuilder
sb
=
new
StringBuilder
();
int
seconds
=
milliseconds
/
1000
;
if
(
seconds
<
1
)
{
seconds
=
1
;
}
int
hour
=
seconds
/
(
60
*
60
);
if
(
hour
!=
0
)
{
sb
.
append
(
hour
).
append
(
"小时"
);
}
int
minute
=
(
seconds
-
60
*
60
*
hour
)
/
60
;
if
(
minute
!=
0
)
{
sb
.
append
(
minute
).
append
(
"分"
);
}
int
second
=
(
seconds
-
60
*
60
*
hour
-
60
*
minute
);
if
(
second
!=
0
)
{
sb
.
append
(
second
).
append
(
"秒"
);
}
return
sb
.
toString
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment