lizhanwei
2020-04-03 5298fcdbf375eacda1e19a79aca821a30f590e62
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package safeluck.drive.evaluation.DB.rtktb
 
import android.content.Context
import android.os.Looper
import android.text.TextUtils
import android.util.Log
import android.widget.Toast
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.anyun.exam.lib.AYSdk
import com.anyun.exam.lib.MyLog
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.bean.ExamPlatformData
import safeluck.drive.evaluation.httpmodule.HttpCarRespBean
import safeluck.drive.evaluation.httpmodule.HttpRequetBean
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.FileUtil
import java.io.IOException
 
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)
            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)
 
            if (!FileUtil.isMapExist(applicationContext,"map.json")){
                MyLog.i("地图文件不存在,去平台取")
                getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, "place")).enqueue(object : Callback<ResponseBody> {
                    override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                        var str: String? = null
                        try {
                            str = response.body()!!.string()
                        } catch (e: IOException) {
                            e.printStackTrace()
                        }
                        Log.i(TAG, "服务器返回的body=$str")
                        if (Looper.myLooper() == Looper.getMainLooper()) {
                            Toast.makeText(applicationContext, "主线程", Toast.LENGTH_SHORT).show()
                        }
                    }
 
                    override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                        Log.i(TAG, t.localizedMessage)
                    }
                })
            }
            if (!FileUtil.isMapExist(applicationContext,"car.json")){
                MyLog.i("车辆模型文件不存在,去平台取")
                getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, "car")).enqueue(object : Callback<ResponseBody> {
                    override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                        var str: String? = null
                        try {
                            str = response.body()!!.string()
                            Log.i(TAG, "服务器返回的body=$str")
                            val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java)
                            if (car.isResult){
                                if (car.data !=null){
                                    str = gson.toJson(car.data.map_json)
                                    Log.i(TAG, "解析之后的车模型=$str")
                                    FileUtil.writeTxtFileToSD(applicationContext,"car.json",str,"")
                                }
                            }
                        } catch (e: IOException) {
                            e.printStackTrace()
                        }
 
                        if (Looper.myLooper() == Looper.getMainLooper()) {
                            Toast.makeText(applicationContext, "主线程", Toast.LENGTH_SHORT).show()
                        }
                    }
 
                    override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                        Log.i(TAG, t.localizedMessage)
                    }
                })
            }
 
            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 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未取到数据")
        }
    }
 
}