diff --git a/.gradle/5.6.4/executionHistory/executionHistory.bin b/.gradle/5.6.4/executionHistory/executionHistory.bin
index c04208a..feb11e5 100644
Binary files a/.gradle/5.6.4/executionHistory/executionHistory.bin and b/.gradle/5.6.4/executionHistory/executionHistory.bin differ
diff --git a/.gradle/5.6.4/executionHistory/executionHistory.lock b/.gradle/5.6.4/executionHistory/executionHistory.lock
index 074327b..8cbee94 100644
Binary files a/.gradle/5.6.4/executionHistory/executionHistory.lock and b/.gradle/5.6.4/executionHistory/executionHistory.lock differ
diff --git a/.gradle/5.6.4/fileHashes/fileHashes.bin b/.gradle/5.6.4/fileHashes/fileHashes.bin
index 6c57fab..188ce20 100644
Binary files a/.gradle/5.6.4/fileHashes/fileHashes.bin and b/.gradle/5.6.4/fileHashes/fileHashes.bin differ
diff --git a/.gradle/5.6.4/fileHashes/fileHashes.lock b/.gradle/5.6.4/fileHashes/fileHashes.lock
index 288ab31..ef32a28 100644
Binary files a/.gradle/5.6.4/fileHashes/fileHashes.lock and b/.gradle/5.6.4/fileHashes/fileHashes.lock differ
diff --git a/.gradle/5.6.4/fileHashes/resourceHashesCache.bin b/.gradle/5.6.4/fileHashes/resourceHashesCache.bin
index a972c97..b809d08 100644
Binary files a/.gradle/5.6.4/fileHashes/resourceHashesCache.bin and b/.gradle/5.6.4/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/5.6.4/javaCompile/classAnalysis.bin b/.gradle/5.6.4/javaCompile/classAnalysis.bin
index 511d57d..e825db5 100644
Binary files a/.gradle/5.6.4/javaCompile/classAnalysis.bin and b/.gradle/5.6.4/javaCompile/classAnalysis.bin differ
diff --git a/.gradle/5.6.4/javaCompile/jarAnalysis.bin b/.gradle/5.6.4/javaCompile/jarAnalysis.bin
index 9516cd5..416c859 100644
Binary files a/.gradle/5.6.4/javaCompile/jarAnalysis.bin and b/.gradle/5.6.4/javaCompile/jarAnalysis.bin differ
diff --git a/.gradle/5.6.4/javaCompile/javaCompile.lock b/.gradle/5.6.4/javaCompile/javaCompile.lock
index db95d70..85f7e02 100644
Binary files a/.gradle/5.6.4/javaCompile/javaCompile.lock and b/.gradle/5.6.4/javaCompile/javaCompile.lock differ
diff --git a/.gradle/5.6.4/javaCompile/taskHistory.bin b/.gradle/5.6.4/javaCompile/taskHistory.bin
index 5444142..97131a8 100644
Binary files a/.gradle/5.6.4/javaCompile/taskHistory.bin and b/.gradle/5.6.4/javaCompile/taskHistory.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 4788cbb..b7bc006 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 743c8d3..52ccd73 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index fb7f4a8..61a9130 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml b/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml
index f3b8f0d..e5e1578 100644
--- a/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml
+++ b/.idea/libraries/Gradle__com_amitshekhar_android_debug_db_base_1_0_6_aar.xml
@@ -16,6 +16,9 @@
+
+
+
diff --git a/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml b/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml
index d906fe9..cd3fd47 100644
--- a/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml
+++ b/.idea/libraries/Gradle__com_facebook_stetho_stetho_1_5_1_aar.xml
@@ -6,6 +6,7 @@
+
@@ -23,6 +24,9 @@
+
+
+
diff --git a/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml b/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml
index 84a76eb..c2169c8 100644
--- a/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml
+++ b/.idea/libraries/Gradle__com_github_yuweiguocn_GreenDaoUpgradeHelper_v2_2_1_aar.xml
@@ -16,6 +16,9 @@
+
+
+
diff --git a/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml b/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml
index 947cd4e..55cd282 100644
--- a/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml
+++ b/.idea/libraries/Gradle__com_orhanobut_logger_2_2_0_aar.xml
@@ -16,6 +16,9 @@
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index bc01c18..87da9c4 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/.idea/modules/app/taxiapp-ktl.app.iml b/.idea/modules/app/taxiapp-ktl.app.iml
index 2f6ae57..832d093 100644
--- a/.idea/modules/app/taxiapp-ktl.app.iml
+++ b/.idea/modules/app/taxiapp-ktl.app.iml
@@ -31,7 +31,7 @@
-
+
@@ -94,11 +94,11 @@
+
+
-
-
diff --git a/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml b/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml
index ead3360..e505853 100644
--- a/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml
+++ b/.idea/modules/kurolibrary/taxiapp-ktl.kurolibrary.iml
@@ -87,11 +87,11 @@
+
+
+
-
-
-
diff --git a/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml b/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml
index 516480a..2d5d1e4 100644
--- a/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml
+++ b/.idea/modules/kurotool/taxiapp-ktl.kurotool.iml
@@ -89,10 +89,10 @@
-
-
+
+
diff --git a/app/build.gradle b/app/build.gradle
index c1f02aa..889db35 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,8 +21,8 @@ android {
applicationId "net.sysolution.taxiapp"
minSdkVersion 21
targetSdkVersion 29
- versionCode 240
- versionName "3.3.3-beta26.3.9.97-debug"
+ versionCode 242
+ versionName "3.3.3-beta26.3.9.99-debug"
//alphaxx - 预览版本,不会对外发布,由测试人员测试,会有很多bug
//Betaxx - 公开测试版本,会发给其他工作人员,会有较多版本
@@ -58,7 +58,8 @@ android {
3.3.3-beta26.3.9.3.94 新增播放日志开关,gps开关查询,直接清除所有广告功能
3.3.3-beta26.3.9.3.95 修复日志重复上传问题
26.3.9.96 播放时长为广告素材的播放时长
- 26.3.9.97 记录taxiApp当天的运行时间
+ 26.3.9.98 记录taxiApp当天的运行时间
+ 26.3.9.99 优化日志上传,改为一天只传一次昨天的播放记录。
**/
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -172,7 +173,6 @@ dependencies {
// implementation 'androidx.room:room-runtime:2.2.5'//room
// kapt "androidx.room:room-compiler:2.2.5"
-
//lifecycle协程
implementation "androidx.lifecycle:lifecycle-livedata-core-ktx:$livedata"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$livedata"
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java b/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java
index 03da3a6..bea5694 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/Configurations.java
@@ -396,6 +396,28 @@ public class Configurations {
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putString("runtimeJsonString", s).apply();
}
+ public String logSummaryJsonString(){
+
+ return context.getSharedPreferences("config", Context.MODE_PRIVATE).getString("logSummaryJsonString", "");
+ }
+
+ public void logSummaryJsonStringSave(String s){
+ context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putString("logSummaryJsonString", s).apply();
+ }
+
+ /**
+ * taxiApp当天第一次运行时间
+ * @return
+ */
+ public long firstRunTime(){
+ long defaultValue = System.currentTimeMillis();
+ return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("firstRunTime",defaultValue);
+ }
+
+ public void firstRunTimeSave(Long runTime){
+ context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("firstRunTime", runTime).apply();
+ }
+
}
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/TaxiApp.kt b/app/src/main/java/cn/trans88/taxiappkotlin/TaxiApp.kt
index 5644c86..dba1b16 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/TaxiApp.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/TaxiApp.kt
@@ -75,7 +75,9 @@ class TaxiApp:Application() {
// lateinit var listener:Player.Listener
// var player: SimpleExoPlayer? = null
// lateinit var factory: ProgressiveMediaSource.Factory
+ var sendLogTimes = 0
+ var isPositionRefresh = false
companion object{
private var instance:Application? =null
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/Repository.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/Repository.kt
index 01cf57c..233afbd 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/Repository.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/Repository.kt
@@ -72,6 +72,11 @@ object Repository {
currentSyncTime = syncTime
}
+ fun cancelTimer(){
+ kuroTimer.cancel()
+ kuroTimer.purge()
+ }
+
fun getAdvertiseTEST(): Advertise? {
synchronized(TaxiApp::class.java){
val list = myListMap[getTestPlayLevels()]
@@ -571,7 +576,13 @@ object Repository {
currentListOrder = 0
refreshMyList()
// "sync:${Configurations.config(TaxiApp.instance()).sync()}".loge()
- if (Configurations.config(TaxiApp.instance()).sync() && getTestPlayLevels() == AdvertiseType.GROUP.ordinal) {
+ //#edit by ljh @2023/12/12 定点刷新
+ if (taxiApp.isPositionRefresh){
+ //非同步播放或者定点播放
+ YoungUtil.YoungLog("非同步刷新")
+ playViewModel!!.refreshAdvertise()
+ taxiApp.isPositionRefresh = false
+ } else if (Configurations.config(TaxiApp.instance()).sync() && getTestPlayLevels() == AdvertiseType.GROUP.ordinal) {
//设置同步播放并且是分组广告
// if (Settings.sync) {
val syncTimeModel = getSyncSingleTime(currentSyncTime, getTestPlayCircularList())
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt
index f539d63..b85ea37 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/model/LogSummary.kt
@@ -9,5 +9,9 @@ package cn.trans88.taxiappkotlin.logic.model
data class LogSummary(
val ad_id: String,
val play_num:Int,
- val duration:Long
+ val duration:Long,
+ val ad_type:Int,
+ val media_url:String,
+ val begin_play_ts:Long,
+ val end_play_ts:Long
)
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt
index f2f365f..970eacc 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ConnManger.kt
@@ -18,6 +18,7 @@ import cn.trans88.taxiappkotlin.logic.dao.DaoUtil
import cn.trans88.taxiappkotlin.logic.model.*
import cn.trans88.taxiappkotlin.play.RefreshPlayer
import cn.trans88.taxiappkotlin.ui.play.PlayActivity
+import cn.trans88.taxiappkotlin.ui.play.isSendedLog
import cn.trans88.taxiappkotlin.util.KuroTimer
import cn.trans88.taxiappkotlin.util.KuroTimerTask
import cn.trans88.taxiappkotlin.util.YoungUtil
@@ -39,8 +40,11 @@ import okhttp3.RequestBody.Companion.asRequestBody
import java.io.File
import java.io.IOException
import java.util.*
+import java.util.concurrent.Executors
import java.util.concurrent.ThreadPoolExecutor
+import java.util.concurrent.TimeUnit
import java.util.stream.Collectors
+import kotlin.concurrent.thread
/**
* @author TRS
@@ -53,7 +57,7 @@ object ConnManger {
var isBindOrTransfer = false
//保存到conn的实体类信息
var connectMessage:ConnectMessage = ConnectMessage()
-// private val handler =Handler()
+// private val handler = Handler()
var testToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50X2lkIjoiNWY5ZmE0ZTI1NzIzMDkzZGM5MGMwYTA0IiwiZ3JvdXBfaWQiOiI2MmNmZGUzMzU3MjMwOTQ1NDM3MGFjNjIiLCJ1c2VyX2lkIjoiNjMyN2Q5NmI1NzIzMDkxYmJhZTM2MTkyIn0.6fQ1PsV3FM_C-I7yVd_7VpQIwLLMofF-8bKerpXmq_M"
var defaultToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50X2lkIjoiNWY4OTNiODE1NzIzMDk0YWQzZmM5MTI0IiwiZ3JvdXBfaWQiOiI1Zjg5M2I4MTU3MjMwOTRhZDNmYzkxMjYiLCJ1c2VyX2lkIjoiNWY4OTNiODE1NzIzMDk0YWQzZmM5MTI1In0.o2M6CE2yFi7dvjILb485sQF436eMDdKwzTryK4rw3W0"
@@ -189,7 +193,7 @@ object ConnManger {
}
}
- sendLogger()
+// sendLogger()
sendLocation()
//edit by ljh @2023/9/1
WsManager.isRegister = false
@@ -684,71 +688,136 @@ object ConnManger {
*/
fun sendLogsSummary(){
YoungUtil.YoungLog("sendLogger in Thread is ${Looper.getMainLooper().thread === Thread.currentThread()}")
- val playLoggers = DaoUtil.getPlayLoggers()
- if (playLoggers.isNotEmpty()) {
- //#edit by ljh @2023/6/5 改成大批量看是否能减小流量消耗
- val requestJson = ProcessingCommands.gson.toJson(playLoggers)
-
- for (playLogger in playLoggers) {
- DaoUtil.getPlayLogger().delete(playLogger)
+ thread {
+ val playLoggers = DaoUtil.getPlayLoggers()
+ "playLoggers size: ${playLoggers.size}".logd()
+ val requestJson = getLogSummaryJson(playLoggers)
+ if (requestJson.isNotEmpty()){
+ sendLogsSummaryToWeb(requestJson)
}
-
- val okHttpClient = OkHttpClient()
- YoungUtil.YoungLog("准备上传日志")
- val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
- val body = RequestBody.create(parse, requestJson)
- YoungUtil.YoungLog("sendLogger:${requestJson}")
- val request: Request = Request.Builder()
- .url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLog") //要访问的链接
- .addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
- .addHeader("Accept-Encoding", "gzip")
- .post(body)
- .build()
- val call = okHttpClient.newCall(request)
- call.enqueue(object : Callback {
-
- override fun onFailure(call: Call, e: IOException) {
- YoungUtil.YoungLog("上传日志失败:${e.message}")
- }
-
- override fun onResponse(call: Call, response: Response) {
- YoungUtil.YoungLog("上传日志成功:${response.message},response isSuccessful ${response.isSuccessful}${response.code}")
-
-// if (response.code == 200) {
-// //#edit by ljh @2023/6/5 删除批量上传的日志
-// DaoUtil.getPlayLogger().deleteAll()
-// }
- "删除已上传的日志".logd()
- }
- })
}
-
}
-
- private fun getLogSummaryJson(){
- val playLoggers = DaoUtil.getPlayLoggers()
- val maxEndPlayTs = playLoggers.map {
- it.end_play_ts
- }.max()
- val minBeginPlayTs = playLoggers.map {
- it.begin_play_ts
- }.min()
- "开始播放时间:$minBeginPlayTs,最后一条日志的播放时间:$maxEndPlayTs".loge()
- if (playLoggers.isNotEmpty()) {
+ /**
+ * 上传日志概要到平台
+ * @param jsonStr String
+ */
+ var logsSummaryTimer:Timer? = null
+ fun sendLogsSummaryToWeb(requestJson:String){
+ val okHttpClient = OkHttpClient.Builder()
+ .connectTimeout(80, TimeUnit.SECONDS)
+ .readTimeout(80, TimeUnit.SECONDS)
+ .writeTimeout(80, TimeUnit.SECONDS)
+ .build()
+ YoungUtil.YoungLog("准备上传日志摘要")
+ val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
+ val body = RequestBody.create(parse, requestJson)
+ YoungUtil.YoungLog("sendLogger:${requestJson}")
+ val request: Request = Request.Builder()
+ .url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLogPlus") //要访问的链接
+ .addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
+ .addHeader("Accept-Encoding", "gzip")
+ .post(body)
+ .build()
+ val call = okHttpClient.newCall(request)
+ call.enqueue(object : Callback {
+
+ override fun onFailure(call: Call, e: IOException) {
+ YoungUtil.YoungLog("上传日志失败:${e.message}")
+ e.printStackTrace()
+ "3s后重新上传日志摘要".loge()
+ logsSummaryTimer?.let {
+ it.cancel()
+ it.purge()
+ }
+ logsSummaryTimer = Timer()
+ logsSummaryTimer?.schedule(object :TimerTask(){
+ override fun run() {
+ sendLogsSummaryToWeb(requestJson)
+ }
+ },3000L)
+ }
+
+ override fun onResponse(call: Call, response: Response) {
+ YoungUtil.YoungLog("上传日志成功:${response.message},response isSuccessful ${response.isSuccessful}${response.code}")
+ if (response.code == 200) {
+ Configurations.config(taxiApp).logSummaryJsonStringSave("")
+ isSendedLog = false
+ } else {
+ "服务器没回复200,重新上传日志摘要".loge()
+ "3s后重新上传日志摘要".loge()
+ logsSummaryTimer?.let {
+ it.cancel()
+ it.purge()
+ }
+ logsSummaryTimer = Timer()
+ logsSummaryTimer?.schedule(object :TimerTask(){
+ override fun run() {
+ sendLogsSummaryToWeb(requestJson)
+ }
+ },3000L)
+ }
+ }
+ })
+ }
+
+ /**
+ * 获取昨天的日志概要Json数据
+ */
+ private fun getLogSummaryJson(playLoggers:List):String{
+ val cacheJson = Configurations.config(taxiApp).logSummaryJsonString()
+ if (!cacheJson.isNullOrEmpty()){
+ "cacheJson:$cacheJson".logd()
+ return cacheJson
+ }
+ var jsonStr = ""
+ if (!playLoggers.isNullOrEmpty()){
+ val summaryList = ArrayList()
+// val endPlayTime = playLoggers.map {
+// it.end_play_ts
+// }.max() ?: 0L
+// val beginPlayTime = playLoggers.map {
+// it.begin_play_ts
+// }.min() ?: 0L
+
+ val logsGroup = playLoggers.groupBy { it.ad_id }
+ logsGroup.keys.forEach {
+ val adId = it
+ logsGroup.get(it)?.let { playLoggers ->
+ val beginPlayTime = playLoggers.map { it.begin_play_ts }.min() ?: 0L
+ val endPlayTime = playLoggers.map { it.end_play_ts }.max() ?: 0L
+ val playNums = playLoggers.size
+ val playLogger = playLoggers.get(0)
+ val ad_type = playLogger.ad_type
+ val media_url = playLogger.media_url
+ val duration = playLogger.duration
+ val summary = LogSummary(adId,playNums,duration,ad_type,media_url,beginPlayTime,endPlayTime)
+ "开始播放时间:$beginPlayTime,结束播放时间:$endPlayTime".loge()
+ "添加一条日志摘要:${summary.toString()}".loge()
+ summaryList.add(summary)
+ }
+ }
for (playLogger in playLoggers) {
DaoUtil.getPlayLogger().delete(playLogger)
}
-
+ jsonStr = Gson().toJson(summaryList)
+ Configurations.config(taxiApp).logSummaryJsonStringSave(jsonStr)
}
+ "日志概要json:$jsonStr".loge()
+ return jsonStr
}
/**
* 上报运行时长
*/
+ var runtimeTimer:Timer? = null
fun sendRuntimeToWeb(){
val jsonStr = Configurations.config(taxiApp).runtimeJsonString() ?: ""
- val okHttpClient = OkHttpClient()
+ val okHttpClient = OkHttpClient.Builder()
+ .connectTimeout(80, TimeUnit.SECONDS)
+ .readTimeout(80, TimeUnit.SECONDS)
+ .writeTimeout(80, TimeUnit.SECONDS)
+ .build()
YoungUtil.YoungLog("准备上报运行时长")
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
val body = RequestBody.create(parse, jsonStr)
@@ -764,12 +833,18 @@ object ConnManger {
override fun onFailure(call: Call, e: IOException) {
YoungUtil.YoungLog("上传运行时长失败:${e.message}")
- Timer().schedule(object :TimerTask(){
+ e.printStackTrace()
+ "3s后重新上报运行时长".loge()
+ runtimeTimer?.let {
+ it.cancel()
+ it.purge()
+ }
+ runtimeTimer = Timer()
+ runtimeTimer?.schedule(object :TimerTask(){
override fun run() {
- "重新上报运行时长".loge()
sendRuntimeToWeb()
}
- },5000)
+ },3000L)
}
override fun onResponse(call: Call, response: Response) {
@@ -777,6 +852,18 @@ object ConnManger {
if (response.code == 200) {
"清除上传成功的运行时长数据".loge()
Configurations.config(taxiApp).runtimeJsonStringSave("")
+ } else {
+ "3s后重新上报运行时长".loge()
+ runtimeTimer?.let {
+ it.cancel()
+ it.purge()
+ }
+ runtimeTimer = Timer()
+ runtimeTimer?.schedule(object :TimerTask(){
+ override fun run() {
+ sendRuntimeToWeb()
+ }
+ },3000L)
}
}
})
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt
index bc05868..081dcc4 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/logic/network/ProcessingCommands.kt
@@ -193,6 +193,26 @@ object ProcessingCommands {
sanleResponse.turn_on = turn_on
val response = gson.toJson(sanleResponse)
send(response)
+
+ //debug
+ val lat2 = 22.665534200203726
+ val lon2 = 113.91975187778473
+ val lat3 = 23.665534200203726
+ val lon3 = 114.91975187778473
+ var isRun = true
+ Timer().schedule(object :TimerTask(){
+ override fun run() {
+ if (isRun){
+ "进圈".loge()
+ taxiApp.activity?.getViewModel()?.onLocationChanged(lon2,lat2,2.0f,66.0f,1)
+ isRun = false
+ } else {
+ "出圈".loge()
+ taxiApp.activity?.getViewModel()?.onLocationChanged(lon3,lat3,2.0f,66.0f,1)
+ isRun = true
+ }
+ }
+ },0,3000L)
}
/**
@@ -228,7 +248,8 @@ object ProcessingCommands {
if (loggerSwitch.isTurn_on){
// ConnManger.loggerTimer?.cancel()
// ConnManger.loggerTimer?.purge()
- ConnManger.sendLogger()
+
+// ConnManger.sendLogger()
}
baseResponse.type = type
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt
index 280b0b7..bebd575 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayActivity.kt
@@ -170,7 +170,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
customView()
- Thread(Runnable { clearOverdueLogger() }).start()
+// Thread(Runnable { clearOverdueLogger() }).start()
val serverIntent = Intent(this, PlayServer::class.java)
startService(serverIntent)
//开机不管同步不同步直接先放
@@ -199,7 +199,8 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
var cacheStartTime:Long = configurations.startRunTime()
var currentTime = System.currentTimeMillis()
"saveStartTime ---> currentTime:$currentTime".loge()
- if (currentTime>23646086L){
+
+ if (currentTime > 23646086L && currentTime > cacheStartTime){
startSaveRunTimer?.let {
it.purge()
@@ -210,13 +211,28 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
var dayType = DateUtil.getDaysDiff(currentTime,cacheStartTime)
when(dayType){
DayType.IS_OTHER_DAY.ordinal -> { //如果缓存的启动时间是三天前(或更久)了,或者为零,直接覆盖
+ configurations.logSummaryJsonStringSave("")
+ Thread(Runnable { clearOverdueLogger() }).start()
+ isSendedLog = false
"startRunTime,endRunTime初始化为:$currentTime".loge()
configurations.startRunTimeSave(currentTime)
configurations.endRunTimeSave(currentTime)
+ configurations.firstRunTimeSave(currentTime)
configurations.sumRunTimeSave(0L)
+ configurations.runtimeJsonStringSave("")
startRuntimeTimer()
}
DayType.IS_SAME_DAY.ordinal -> {//同一天重启
+ //测试日志上传
+ ConnManger.sendLogsSummary()
+ isSendedLog = false
+// val logSummaryJson = configurations.logSummaryJsonString()
+// if (!logSummaryJson.isNullOrEmpty()){
+// "同一天重启,之前的日志数据没传,重新上传".loge()
+// ConnManger.sendLogsSummary()
+// } else {
+// isSendedLog = false
+// }
//先计算上次重启前的运行时间
val lastSumTime = configurations.sumRunTime()
val lastStartRuntime = configurations.startRunTime()
@@ -229,7 +245,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
"程序启动,目前运行时间(毫秒):${todaySumRuntime}".loge()
//测试上报接口
-// val runtimeJson = RuntimeJson(configurations.cardId(),todaySumRuntime,System.currentTimeMillis())
+// val runtimeJson = RuntimeJson(configurations.cardId(),todaySumRuntime,lastStartRuntime)
// configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
if (!configurations.runtimeJsonString().isNullOrEmpty()){
ConnManger.sendRuntimeToWeb()
@@ -241,6 +257,8 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
startRuntimeTimer()
}
DayType.IS_SECOND_DAY.ordinal -> {
+ ConnManger.sendLogsSummary()
+
//先计算上次重启前的运行时间
val lastSumTime = configurations.sumRunTime()
val lastStartRuntime = configurations.startRunTime()
@@ -251,18 +269,21 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
val yesterdaySumTime = lastRunTime + lastSumTime
"程序启动,昨天运行时间(毫秒):${yesterdaySumTime}".loge()
//提交昨天一整天的运行时间
- val runtimeJson = RuntimeJson(configurations.cardId(),yesterdaySumTime,System.currentTimeMillis())
+ val firstRuntime = configurations.firstRunTime()
+ val runtimeJson = RuntimeJson(configurations.cardId(),yesterdaySumTime,firstRuntime)
configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
ConnManger.sendRuntimeToWeb()
//保存新的开始运行时间,和结束时间
configurations.startRunTimeSave(currentTime)
configurations.endRunTimeSave(currentTime)
+ configurations.firstRunTimeSave(currentTime)
configurations.sumRunTimeSave(0L)
startRuntimeTimer()
}
else -> {
configurations.startRunTimeSave(currentTime)
configurations.endRunTimeSave(currentTime)
+ configurations.firstRunTimeSave(currentTime)
configurations.sumRunTimeSave(0L)
}
}
@@ -293,17 +314,41 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
override fun run() {
val endRuntime = configurations.endRunTime()
val startRuntime = configurations.startRunTime()
+ val currentTime = System.currentTimeMillis()
"RuntimeTimer --> currentEndRuntime:$endRuntime".loge()
val type = DateUtil.getDaysDiff(endRuntime,startRuntime)
- if (DayType.IS_SECOND_DAY.ordinal == type) {
+ val currentType = DateUtil.getDaysDiff(currentTime,startRuntime)
+ val isSecond = DayType.IS_SECOND_DAY.ordinal == currentType
+ if (isSecond && Repository.taxiApp.sendLogTimes == 0) {
+ //当前时间被手动设置成第二天了,提交一次运行时长数据
+ isSendedLog = true
val lastRunTime = endRuntime - startRuntime
val yesterdayRuntime = configurations.sumRunTime() + lastRunTime
//提交昨天一整天的运行时间
- val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,System.currentTimeMillis())
+ val firstRuntime = configurations.firstRunTime()
+ val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,firstRuntime)
+ configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
+ ConnManger.sendRuntimeToWeb()
+
+ //提交一次日志数据
+ ConnManger.sendLogsSummary()
+
+ Repository.taxiApp.sendLogTimes = 1
+ }
+ if (DayType.IS_SECOND_DAY.ordinal == type) {
+
+ ConnManger.sendLogsSummary()
+
+ val lastRunTime = endRuntime - startRuntime
+ val yesterdayRuntime = configurations.sumRunTime() + lastRunTime
+ //提交昨天一整天的运行时间
+ val firstRuntime = configurations.firstRunTime()
+ val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,firstRuntime)
configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
ConnManger.sendRuntimeToWeb()
//保存新的开始运行时间,和结束时间
configurations.startRunTimeSave(endRuntime)
+ configurations.firstRunTimeSave(endRuntime)
configurations.sumRunTimeSave(0L)
}
@@ -351,6 +396,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
YoungUtil.YoungLog("bindService onServiceConnected")
+
connService = ConnService.Stub.asInterface(service)
ConnManger.setConnService(connService)
ConnManger.registerApp()
@@ -409,7 +455,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
val overdueTime = currentTimeMillis - 30 * 24 * 60 * 60 * 1000
//lt < gt > ge >= le <=
DaoUtil.getPlayLoggerDao().queryBuilder().where(PlayLoggerDao.Properties.Created_at.lt(overdueTime)).buildDelete().executeDeleteWithoutDetachingEntities()
-
+ "清除日志后,当前日志数量:${DaoUtil.getPlayLoggers().size}".logd()
}
/**
@@ -445,7 +491,6 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
busLayoutParams.width = Configurations.config(TaxiApp.instance()).screenSizeX() / 7
busLayoutParams.height = Configurations.config(TaxiApp.instance()).screenSizeY()
-
img_bus_top.visibility = View.VISIBLE
val program = File(TaxiApp.instance().filesDir, TaxiApp.instance().getString(string.dir_program))
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt
index c49a337..a017e91 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/ui/play/PlayViewModel.kt
@@ -72,6 +72,7 @@ import cn.trans88.taxiappkotlin.util.YoungUtil
import kotlinx.android.synthetic.main.activity_main.*
import org.greenrobot.greendao.query.LazyList
import java.io.ByteArrayOutputStream
+import java.io.File
import java.util.*
@@ -80,6 +81,8 @@ import java.util.*
* 所有与界面相关的数据都应该放在ViewModel中
*/
//todo 这里不应该持有ui,应该要建立对应的livedata去回调给ui
+//如果是第二天,但是第一天日志没传完,就设为true
+var isSendedLog: Boolean = true
class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout, private val imageView: ImageView) : ViewModel(), GpsInformationListener, IPlay, LifecycleObserver {
private val providerMap = HashMap()
@@ -569,6 +572,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
//view.startAnimation(addAnim)
fl_play.addView(view)
+// fl_play.addView(view)
removeView()
@@ -786,6 +790,8 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
}
}
+
+ var cachePlayLoggers = ArrayList()
/**
* 将curLogger设置为播放完成后存储到LoggerContainer中,并将curLogger清空
*/
@@ -796,9 +802,27 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
curLogger!!.end_play_ts = System.currentTimeMillis()
// val roundingDuration = Math.ceil((curLogger!!.duration.toDouble() / 1000)) * 1000
// curLogger!!.duration = roundingDuration.toLong()
+// DaoUtil.getPlayLoggerDao().insert(curLogger)
+// "存储日志:${curLogger?.begin_play_ts}".loge()
+// "当前日志数量:${DaoUtil.getPlayLoggers().size}".logd()
+ if (isSendedLog){
+ cachePlayLoggers.add(curLogger!!)
+ "缓存日志数据:${curLogger.toString()}".loge()
+ } else {
+ "存储日志数据:${curLogger.toString()}".loge()
+ val logs = DaoUtil.getPlayLoggers()
+ "当前日志数据size:${logs.size}".logd()
+ for (log in logs) {
+ "日志数据:${log.toString()}"
+ }
+ DaoUtil.getPlayLoggerDao().insert(curLogger)
+ for (cachePlayLogger in cachePlayLoggers) {
+ "存储缓存的日志数据insert cachePlayLogger${cachePlayLogger.toString()}".logd()
+ DaoUtil.getPlayLoggerDao().insert(cachePlayLogger)
+ }
+ cachePlayLoggers.clear()
+ }
- DaoUtil.getPlayLoggerDao().insert(curLogger)
- "存储日志:${curLogger?.begin_play_ts}".loge()
}
curLogger = null
}
@@ -898,6 +922,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
list
}
"regions.size:${regions.size}".logd()
+ var isRefresh = false
for (region in regions) {
"regionAdId:${region.regionAdId},index:${regions.indexOf(region)}".logd()
YoungUtil.YoungLog("当前两点间距离:${DistanceUtil.getDistance(region.lat, region.lng, latitude, longitude)}")
@@ -941,7 +966,11 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
//edit by ljh @2023/8/15
taxiApp.daoAds.clear()
- RefreshPlayer.refresh()
+ //edit by ljh @2023/12/12 刷新定点广告
+ Repository.cancelTimer()
+ isRefresh = true
+
+// RefreshPlayer.refresh()
} else {
YoungUtil.YoungLog("positionAdvertise is null");
}
@@ -957,7 +986,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
val reg = DaoUtil.getRegion().queryBuilder().where(RegionsDao.Properties.AutoId.eq(region.autoId)).unique()
if (reg != null){
- reg.isInRegion = true
+ reg.isInRegion = false
DaoUtil.getRegion().update(reg)
} else {
taxiApp.regionsList.clear()
@@ -972,13 +1001,21 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
//edit by ljh @2023/8/14
taxiApp.daoAds.clear()
+ //edit by ljh @2023/12/12
+ Repository.cancelTimer()
+ isRefresh = true
DaoUtil.getAdvertise().queryBuilder().where(AdvertiseDao.Properties.Ad_id.eq(region.regionAdId)).buildDelete()
.executeDeleteWithoutDetachingEntities()
YoungUtil.YoungLog("没进圈删除定点广告:${region.regionAdId}")
- RefreshPlayer.refresh()
+ taxiApp.isPositionRefresh = true
+// RefreshPlayer.refresh()
}
}
}
+ if (isRefresh){
+ "定点变动,刷新列表".loge()
+ RefreshPlayer.refresh()
+ }
}
@@ -1002,6 +1039,9 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
})
}
+ /**
+ * 清除旧的定点广告
+ */
fun clearAreaAdvertise() {
val list = getAdvertise().queryBuilder().where(Properties.BelongTo.eq(AREA.ordinal)).list()
list?.let {
@@ -1009,11 +1049,11 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
taxiApp.daoAds.clear()
for (advertise in it) {
getAdvertise().delete(advertise)
- try {
- RefreshPlayer.refresh()
- } catch (e: InterruptedException) {
- e.printStackTrace()
- }
+ }
+ try {
+ RefreshPlayer.refresh()
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
}
}
@@ -1159,6 +1199,13 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
this.latitude = latitude
}
+ //edit by ljh @2023/12/12
+ val file = File(advertise.pathName)
+ if (file.exists()) {
+ "定点广告的素材已下载".loge()
+ advertise.isDownloaded = true
+ }
+
YoungUtil.YoungLog("setAdvertiseByPosition adid:${advertise.ad_id}")
advertise.toString().loge()
diff --git a/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java b/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java
index f6ce6fe..477dfce 100644
--- a/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java
+++ b/app/src/main/java/cn/trans88/taxiappkotlin/util/DateUtil.java
@@ -112,7 +112,7 @@ public class DateUtil {
* @return
*/
public static int getDaysDiff(long currentTime, long cacheTime){
- Log.d("yzd_t", "currentTime: " + currentTime + ", cacheTime: " + cacheTime);
+ Log.d("yzd_t", "currentTime: " + currentTime + ", cacheStartTime: " + cacheTime);
int dayType = DayType.IS_OTHER_DAY.ordinal();
// long currentTimeStamp = 1699723270L; // 替换为currentTimeStamp的值 2023/11/12
// long lastTimeStamp = 1699690270L; // 替换为lastTimeStamp的值 2023/11/11
diff --git a/debug/output.json b/debug/output.json
index dcc3682..82e9216 100644
--- a/debug/output.json
+++ b/debug/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":240,"versionName":"3.3.3-beta26.3.9.97-debug","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.97-debug{240}.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.97-debug{240}.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":242,"versionName":"3.3.3-beta26.3.9.99-debug","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.99-debug{242}.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.99-debug{242}.apk","properties":{}}]
\ No newline at end of file
diff --git a/his-version-apk/TaxiApp_v3.3.3-beta26.3.9.98-release{242}.zip b/his-version-apk/TaxiApp_v3.3.3-beta26.3.9.98-release{242}.zip
new file mode 100644
index 0000000..a78413f
Binary files /dev/null and b/his-version-apk/TaxiApp_v3.3.3-beta26.3.9.98-release{242}.zip differ
diff --git a/local.properties b/local.properties
index 2777e6b..e020d37 100644
--- a/local.properties
+++ b/local.properties
@@ -4,5 +4,5 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
-#Mon Nov 06 09:42:57 GMT+08:00 2023
+#Sat Dec 02 11:15:51 GMT+08:00 2023
sdk.dir=D\:\\Android\\sdk
diff --git a/release/output.json b/release/output.json
deleted file mode 100644
index 501d24c..0000000
--- a/release/output.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":239,"versionName":"3.3.3-beta26.3.9.96-release","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.96-release{239}.apk","fullName":"release","baseName":"release","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.96-release{239}.apk","properties":{}}]
\ No newline at end of file