package safeluck.drive.evaluation.DB.rtktb
|
|
import android.content.Context
|
import android.os.Environment
|
import android.text.TextUtils
|
import android.util.Log
|
import android.widget.Toast
|
import androidx.work.Worker
|
import androidx.work.WorkerParameters
|
import com.anyun.basecommonlib.MyLog
|
import com.anyun.exam.lib.AYSdk
|
import com.google.gson.Gson
|
import okhttp3.ResponseBody
|
import org.json.JSONException
|
import org.json.JSONObject
|
import retrofit2.Call
|
import retrofit2.Callback
|
import retrofit2.Response
|
import safeluck.drive.evaluation.DB.Constant
|
import safeluck.drive.evaluation.DB.WorkRoomDataBase
|
import safeluck.drive.evaluation.app
|
import safeluck.drive.evaluation.bean.BaseDataUIBean
|
import safeluck.drive.evaluation.bean.ExamPlatformData
|
import safeluck.drive.evaluation.bean.MapInfoHead
|
import safeluck.drive.evaluation.httpmodule.HttpCarRespBean
|
import safeluck.drive.evaluation.httpmodule.HttpRequetBean
|
import safeluck.drive.evaluation.httpmodule.HttpRoadMapRsp
|
import safeluck.drive.evaluation.httpmodule.HttpYardRsp
|
import safeluck.drive.evaluation.httpmodule.RetrofitCreator.Companion.getRestService
|
import safeluck.drive.evaluation.im.IMSClientBootstrap
|
import safeluck.drive.evaluation.platformMessage.PlatFormConstant
|
import safeluck.drive.evaluation.util.CThreadPoolExecutor
|
import safeluck.drive.evaluation.util.FileUtil
|
import java.io.IOException
|
import java.net.URLDecoder
|
|
class RTKConfigUpdateWorker(context:Context, workerParams: WorkerParameters) :Worker(context, workerParams){
|
|
val TAG:String = "RTKConfigUpdateWorker"
|
private val gson = Gson()
|
|
override fun doWork(): Result {
|
|
// var data = inputData.getString(Constant.RTK_CONFIG_UPDATE_JSON)
|
// MyLog.i(PlatFormConstant.RTK,"更新RTK_config imei phone sn="+data)
|
|
var imei:String=""
|
var phone:String=""
|
var sn:String=""
|
// if (!TextUtils.isEmpty(data)){
|
// var jsonObject: JSONObject? = null
|
// jsonObject = JSONObject(data)
|
// sn = jsonObject.getString(Constant.RTK_CONFIG_SN)
|
sn = ExamPlatformData.getInstance().mcuSN
|
ExamPlatformData.getInstance().setPhone(sn);
|
Log.i(TAG,"sn="+sn)
|
imei = sn.substring(1)
|
Log.i(TAG,"imei="+imei)
|
/**
|
* SN与电话号码的关系(以AYKJ-4为例):
|
0311200200000011,前4位是设备编码,接下来4位是年月,后面8位是流水号;
|
电话号码前2位固定13,第三位取SN的第4位,第4-7位取SN的年月,第8-11位取SN流水号的后4位;即13120020011
|
*/
|
phone = sn
|
Log.i(TAG,"phone="+phone)
|
|
getMap(sn, "road")
|
getMap(sn, "yard")
|
getMap(sn, "car")
|
|
MyLog.i(PlatFormConstant.TAG,"重置TCP连接")
|
IMSClientBootstrap.getInstance().resetConnect();
|
// }
|
var rtkConfigDao = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).rtkConfigDao.also {
|
it.update(sn, imei, phone)
|
|
|
}
|
|
sendRtkConfigInfo(WorkRoomDataBase.getWorkRoomDataBase(applicationContext).rtkConfigDao._getRtkConfig())
|
return Result.success()
|
}
|
|
private fun getMap(sn: String, type: String){
|
lateinit var jsonObject1 :JSONObject
|
lateinit var fileName :String
|
when(type){
|
"road" -> fileName = safeluck.drive.evaluation.Constant.ROAD_MAP
|
"yard" -> fileName = safeluck.drive.evaluation.Constant.MAP
|
else -> fileName = safeluck.drive.evaluation.Constant.VEHICLE
|
}
|
// if (!FileUtil.isMapExist(applicationContext,fileName)) {
|
getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, type)).enqueue(object : Callback<ResponseBody> {
|
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
|
MyLog.i(PlatFormConstant.HTTPTAG,t.localizedMessage)
|
}
|
|
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
|
var str: String = response.body()!!.string()
|
MyLog.i(PlatFormConstant.HTTPTAG,str)
|
|
jsonObject1 = JSONObject(str)
|
val result = jsonObject1!!.getBoolean("result")
|
if (result) {
|
var mapInfoHead:MapInfoHead = MapInfoHead("","",BaseDataUIBean.TYPE_.car,"","")
|
|
when(type){
|
"road" ->{
|
|
mapInfoHead.type = BaseDataUIBean.TYPE_.road
|
val map = gson.fromJson<HttpRoadMapRsp>(str, HttpRoadMapRsp::class.java)
|
if (map.isResult) {
|
if (map.data != null) {
|
mapInfoHead.version = map.data.version
|
|
if (map.data.map_json.type.equals("road")) {
|
mapInfoHead.str = map.data.map_json.name
|
mapInfoHead.gps_moinitor_url = URLDecoder.decode( map.data.gps_monitor_url,"UTF-8")
|
mapInfoHead.arcgis_url = map.data.map_url
|
ExamPlatformData.getInstance().setNewRoadMapPath(Environment.getExternalStorageDirectory().absolutePath + "/"
|
+ applicationContext.getPackageName() + "/" + fileName)
|
CThreadPoolExecutor.runInBackground(Runnable {
|
str = gson.toJson(map.data.map_json)
|
MyLog.i(PlatFormConstant.HTTPTAG,"科三道路地图保存成功")
|
FileUtil.writeTxtFileToSD(applicationContext, fileName, str, "")
|
sendRoadMapInfo()
|
})
|
}
|
|
|
}
|
|
|
}}
|
"yard" ->{
|
mapInfoHead.type = BaseDataUIBean.TYPE_.yard
|
val yard = gson.fromJson<HttpYardRsp>(str,HttpYardRsp::class.java)
|
if (yard.isResult){
|
if (yard.data !=null){
|
Log.i(TAG,"yard====")
|
mapInfoHead.version = yard.data.version
|
mapInfoHead.gps_moinitor_url = URLDecoder.decode(yard.data.gps_monitor_url,"UTF-8")
|
Log.i(PlatFormConstant.HTTPTAG,"gps="+mapInfoHead.gps_moinitor_url)
|
|
mapInfoHead.str = yard.data.map_json.name
|
mapInfoHead.arcgis_url = yard.data.map_url
|
ExamPlatformData.getInstance().setNewMapPath(Environment.getExternalStorageDirectory().absolutePath + "/"
|
+ applicationContext.getPackageName() + "/"+fileName)
|
CThreadPoolExecutor.runInBackground(Runnable{
|
MyLog.i(PlatFormConstant.HTTPTAG,"科三场地地图保存成功")
|
str = gson.toJson(yard.data.map_json)
|
FileUtil.writeTxtFileToSD(applicationContext,fileName,str,"")
|
sendMapInfo()
|
})
|
}
|
}
|
}
|
else ->{
|
mapInfoHead.type = BaseDataUIBean.TYPE_.car
|
val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java)
|
|
if (car.isResult){
|
if (car.data !=null){
|
if (car.data.version != null){
|
|
mapInfoHead.version = car.data.version
|
}
|
if (car.data.map_json!= null){
|
mapInfoHead.str = car.data.map_json.name
|
}
|
|
ExamPlatformData.getInstance().carModelPath = Environment.getExternalStorageDirectory().absolutePath + "/" +
|
applicationContext.getPackageName() + "/"+fileName
|
|
Log.i(TAG, "解析之后的车模型=$str")
|
CThreadPoolExecutor.runInBackground(Runnable{
|
str = gson.toJson(car.data.map_json)
|
MyLog.i(PlatFormConstant.HTTPTAG,"车辆模型保存成功")
|
FileUtil.writeTxtFileToSD(applicationContext,fileName,str,"")
|
sendVehicleInfo()
|
})
|
|
}
|
}
|
}
|
}
|
ExamPlatformData.getInstance().setMapHeadInfo(mapInfoHead)
|
} else {
|
// Toast.makeText(applicationContext, jsonObject1!!.getString("data"), Toast.LENGTH_SHORT).show()
|
}
|
}
|
})
|
|
// }else{
|
// MyLog.i(PlatFormConstant.HTTPTAG,"已存在直接发送车辆和地图"+fileName)
|
// when(type){
|
// "road" -> sendRoadMapInfo()
|
// "yard" -> sendMapInfo()
|
// else -> sendVehicleInfo()
|
// }
|
//
|
// }
|
}
|
|
private fun sendRoadMapInfo(){
|
val roadmapPath = ExamPlatformData.getInstance().roadMapPath
|
|
if (!TextUtils.isEmpty(roadmapPath)) {
|
MyLog.i("调用更新RoadMap路径后的地图$roadmapPath")
|
val fileContent = FileUtil.readFile(roadmapPath)
|
if (fileContent != null) {
|
val str = String(fileContent)
|
Log.i(TAG,"文件内容:$str")
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_ROAD_MAP_INFO, str)
|
} else {
|
MyLog.i(String.format("文件:%s不存在", roadmapPath))
|
CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), "文件:" + roadmapPath + "不存在", Toast.LENGTH_SHORT).show() }
|
}
|
} else {
|
val buffer: StringBuffer?
|
buffer = FileUtil.readAssetTxtFile(applicationContext, safeluck.drive.evaluation.Constant.ROAD_MAP)
|
if (buffer != null) {
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_ROAD_MAP_INFO, buffer.toString())
|
} else {
|
MyLog.i(String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName))
|
CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName), Toast.LENGTH_SHORT).show() }
|
}
|
}
|
}
|
|
private fun sendRtkConfigInfo(mRTKConfig: RTKConfig) {
|
if (mRTKConfig != null) {
|
var rtkjson = gson.toJson(mRTKConfig)
|
//去除id字段
|
var jsonObject: JSONObject? = null
|
try {
|
jsonObject = JSONObject(rtkjson)
|
} catch (e: JSONException) {
|
e.printStackTrace()
|
}
|
jsonObject!!.remove("_id")
|
rtkjson = null
|
rtkjson = jsonObject.toString()
|
MyLog.i(TAG, "RTK配置信息:$rtkjson")
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_RTK_PLATFORM_INFO, rtkjson)
|
} else {
|
MyLog.d(TAG, "RTKConfig未取到数据")
|
}
|
}
|
|
|
|
private fun sendMapInfo(){
|
val mapPath = ExamPlatformData.getInstance().mapPath
|
|
|
if (!TextUtils.isEmpty(mapPath)) {
|
MyLog.i("调用更新Map路径后的地图$mapPath")
|
val fileContent = FileUtil.readFile(mapPath)
|
if (fileContent != null) {
|
val str = String(fileContent)
|
Log.i(TAG,"文件内容:$str")
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_MAP_INFO, str)
|
} else {
|
MyLog.i(String.format("文件:%s不存在", mapPath))
|
CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), "文件:" + mapPath + "不存在", Toast.LENGTH_SHORT).show() }
|
}
|
} else {
|
MyLog.i("读取Assert目录下初始化的地图")
|
var buffer: StringBuffer?
|
buffer = FileUtil.readAssetTxtFile(applicationContext, safeluck.drive.evaluation.Constant.MAP)
|
if (buffer != null) {
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_MAP_INFO, buffer.toString())
|
} else {
|
MyLog.i( String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName))
|
CThreadPoolExecutor.runOnMainThread { Toast.makeText(app.getAppContext(), String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName), Toast.LENGTH_SHORT).show() }
|
}
|
}
|
}
|
|
private fun sendVehicleInfo(){
|
val carPath = ExamPlatformData.getInstance().carModelPath
|
if (!TextUtils.isEmpty(carPath)) {
|
MyLog.i("使用更新后的Car模型地图$carPath")
|
val bytes = FileUtil.readFile(carPath)
|
if (bytes != null) {
|
val str = String(bytes)
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_VECHILE_PROFILE, str)
|
} else {
|
MyLog.i(String.format("文件:%s不存在", carPath))
|
}
|
} else {
|
val vebuffer = FileUtil.readAssetTxtFile(applicationContext, safeluck.drive.evaluation.Constant.VEHICLE)
|
if (vebuffer != null) {
|
AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_VECHILE_PROFILE, vebuffer.toString())
|
} else {
|
MyLog.i(String.format("车辆模型模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().absolutePath + "/" + applicationContext.packageName))
|
}
|
}
|
}
|
|
}
|