Commit 383461a4 authored by steve's avatar steve

完成-取得卡多宝装置资料与sim卡资料

parent d5c13807
......@@ -2,4 +2,7 @@ package com.example.simboxapi
object Constants {
var BASE_URL:String = "https://voip-tsm.ucloudlink.com/"
val CONTENT_TYPE = "application/json"
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.ui.changeSim.ChangeSimViewModel
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoViewModel
import com.example.simboxapi.ui.queryDeviceList.QueryDeviceListViewModel
import java.lang.IllegalArgumentException
class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : ViewModelProvider.Factory {
......@@ -18,7 +19,7 @@ class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : V
return when {
modelClass.isAssignableFrom(QueryCountryInfoViewModel::class.java) -> QueryCountryInfoViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(ChangeSimViewModel::class.java) -> ChangeSimViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(QueryCountryInfoViewModel::class.java) -> QueryCountryInfoViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(QueryDeviceListViewModel::class.java) -> QueryDeviceListViewModel(viewModelRepository) as T
else -> throw IllegalArgumentException("unKnow class name")
}
......
......@@ -2,15 +2,20 @@ package com.example.simboxapi.data
import androidx.lifecycle.LiveData
import androidx.lifecycle.liveData
import cn.hutool.http.body.RequestBody
import com.example.simboxapi.Constants
import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.api.ApiService
import com.example.simboxapi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.DeviceDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import kotlinx.coroutines.Dispatchers
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONArray
import org.json.JSONObject
import retrofit2.http.Body
import retrofit2.http.Header
import java.lang.Exception
class ViewModelRepository(private val apiService: ApiService) {
......@@ -32,17 +37,23 @@ class ViewModelRepository(private val apiService: ApiService) {
}
}
fun apiPostQueryCountryInfo(langType: String, loginCustomerId: String, partnerCode: String, streamNo: String, cookie: String, voipId: String): LiveData<ResourceViewModel<BaseResponse<ArrayList<CountryDataBean>>>> {
fun apiPostQueryCountryInfo(
langType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
cookie: String, voipId: String
): LiveData<ResourceViewModel<BaseResponse<ArrayList<CountryDataBean>>>> {
val jsonObject = JSONObject()
jsonObject.put("langType", langType)
jsonObject.put("loginCustomerId", loginCustomerId)
jsonObject.put("partnerCode", partnerCode)
jsonObject.put("streamNo", streamNo)
val body = jsonObject.toString().toRequestBody("application/json".toMediaTypeOrNull())
val body = jsonObject.toString().toRequestBody(Constants.CONTENT_TYPE.toMediaTypeOrNull())
return execute { apiService.apiQueryCountryInfo(body, cookie, voipId) }
}
fun apiPostOnOffImsi(imei: String, loginCustomerId: String, offImsiList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String, cookie: String, voipId: String, userLabel: String): LiveData<ResourceViewModel<BaseResponse<ArrayList<OnOffImisDataBean>>>> {
fun apiPostOnOffImsi(
imei: String, loginCustomerId: String, offImsiList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String,
cookie: String, voipId: String, userLabel: String
): LiveData<ResourceViewModel<BaseResponse<ArrayList<OnOffImisDataBean>>>> {
val jsonObject = JSONObject()
jsonObject.put("imei", imei)
jsonObject.put("loginCustomerId", loginCustomerId)
......@@ -50,8 +61,20 @@ class ViewModelRepository(private val apiService: ApiService) {
jsonObject.put("onImsiList", JSONArray(onImsiList))
jsonObject.put("partnerCode", partnerCode)
jsonObject.put("streamNo", streamNo)
val body = jsonObject.toString().toRequestBody("application/json".toMediaTypeOrNull())
return execute { apiService.apiOnOffImsi(body,cookie,voipId,userLabel) }
val body = jsonObject.toString().toRequestBody(Constants.CONTENT_TYPE.toMediaTypeOrNull())
return execute { apiService.apiOnOffImsi(body, cookie, voipId, userLabel) }
}
fun apiPostQueryDeviceList(
deviceType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
cookie: String, voipId: String, userLabel: String
): LiveData<ResourceViewModel<BaseResponse<ArrayList<DeviceDataBean>>>> {
val jsonObject = JSONObject()
jsonObject.put("deviceType", deviceType)
jsonObject.put("loginCustomerId", loginCustomerId)
jsonObject.put("partnerCode", partnerCode)
jsonObject.put("streamNo", streamNo)
val body = jsonObject.toString().toRequestBody(Constants.CONTENT_TYPE.toMediaTypeOrNull())
return execute { apiService.apiQueryDeviceList(body, cookie, voipId, userLabel) }
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.example.simboxapi.data.api
import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.DeviceDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import okhttp3.RequestBody
import retrofit2.http.Body
......@@ -32,7 +33,14 @@ interface ApiService {
@POST(ApiPath.ON_OFF_IMSI)
suspend fun apiOnOffImsi(@Body body: RequestBody, @Header("Cookie") cookie: String, @Header("voipId") voipId: String, @Header("userLabel") userLabel: String): BaseResponse<ArrayList<OnOffImisDataBean>>
// suspend fun apiQueryDeviceList(@Body body: RequestBody,@)
@Headers(
"Content-Type:application/json",
"Partner-code:simbox",
"Accept-Language:zh-CN",
"langType:zh-CN",
"app-Version:1.9.03"
)
@POST(ApiPath.QUERY_DEVICE_LIST)
suspend fun apiQueryDeviceList(@Body body: RequestBody, @Header("Cookie") cookie: String, @Header("voipId") voipId: String, @Header("userLabel") userLabel: String): BaseResponse<ArrayList<DeviceDataBean>>
}
\ No newline at end of file
......@@ -13,4 +13,16 @@ data class DeviceDataBean(
@SerializedName("deviceVersion")
val deviceVersion:String,
@SerializedName("deviceType")
val deviceType:String,
@SerializedName("deviceSipState")
val deviceSipState:String,
@SerializedName("flowShare")
val flowShare:String,
@SerializedName("cardInfoList")
val cardInfoList:ArrayList<SimCardDataBean>
)
\ No newline at end of file
package com.example.simboxapi.data.entirys
import com.google.gson.annotations.SerializedName
import javax.net.ssl.SSLEngineResult
data class SimCardDataBean(
@SerializedName("imsi")
val imis: String = "",
@SerializedName("cardName")
val cardName: String="",
@SerializedName("useDeviceName")
val useDeviceName: String="",
@SerializedName("imei")
val imei: String="",
@SerializedName("countryCode")
val countryCode: String="",
@SerializedName("networkStatus")
val networkStatus: String="",
@SerializedName("csImei")
val csImei: String="",
@SerializedName("csUserCode")
val csUserCode: String="",
@SerializedName("isMasterCard")
val isMasterCard: String="",
@SerializedName("phone")
val phone: String="",
/**
* 0表示没卡, 1表示有卡
*/
@SerializedName("slotNo")
val slotNo: String="",
@SerializedName("corporation")
val corporation: String="",
@SerializedName("pin")
val pin: String,
@SerializedName("trafficShare")
val trafficShare: String,
@SerializedName("flowShare")
val flowShare: String,
/**
* 0表示未启动, 1表示启动
*/
@SerializedName("usingStatus")
val usingSatus: String
)
\ No newline at end of file
......@@ -7,6 +7,7 @@ import com.example.simboxapi.databinding.ActivityMainBinding
import com.example.simboxapi.ui.changeSim.ChangeSimActivity
import com.example.simboxapi.ui.login.LoginActivity
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoActivity
import com.example.simboxapi.ui.queryDeviceList.QueryDeviceListActivity
class MainActivity : BaseActivity(), View.OnClickListener {
......@@ -29,6 +30,9 @@ class MainActivity : BaseActivity(), View.OnClickListener {
mVB.btnMainChangeSim -> {
ChangeSimActivity.intentToChangeSimActivity(this)
}
mVB.btnMainQueryDevicesList -> {
QueryDeviceListActivity.intentToQueryDeviceListActivity(this)
}
}
}
......@@ -36,5 +40,6 @@ class MainActivity : BaseActivity(), View.OnClickListener {
mVB.btnMainQueryCountry.setOnClickListener(this)
mVB.btnMainLogin.setOnClickListener(this)
mVB.btnMainChangeSim.setOnClickListener(this)
mVB.btnMainQueryDevicesList.setOnClickListener(this)
}
}
\ No newline at end of file
......@@ -7,18 +7,13 @@ import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.view.View
import androidx.lifecycle.ViewModelProvider
import cn.hutool.json.JSON
import com.example.simboxapi.data.Status
import com.example.simboxapi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityChangeSimBinding
import com.example.simboxapi.utils.DatePattern
import com.example.simboxapi.utils.StreamNoUtil
import com.google.gson.GsonBuilder
import org.json.JSONObject
import java.text.SimpleDateFormat
import java.util.*
import kotlin.collections.ArrayList
class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
......@@ -36,7 +31,7 @@ class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mVB.root)
setViewModel()
initViewModel()
initView()
}
......@@ -61,7 +56,7 @@ class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
}
}
private fun setViewModel() {
private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService)
mChangeSimViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[ChangeSimViewModel::class.java]
}
......@@ -71,7 +66,10 @@ class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
mVB.btnChangeSimPostApi.setOnClickListener(this)
}
private fun apiPostOnOffImsi(imei: String, loginCustomId: String, offImsiList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String, cookie: String, voipId: String, userLabel: String) {
private fun apiPostOnOffImsi(
imei: String, loginCustomId: String, offImsiList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String,
cookie: String, voipId: String, userLabel: String
) {
mChangeSimViewModel.apiPostOnOffImsi(imei, loginCustomId, offImsiList, onImsiList, partnerCode, streamNo, cookie, voipId, userLabel).observe(this) {
when (it.status) {
Status.SUCCESS -> {
......
......@@ -12,11 +12,8 @@ import com.example.simboxapi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityQueryCountryInfoBinding
import com.example.simboxapi.utils.DatePattern
import com.example.simboxapi.utils.StreamNoUtil
import com.google.gson.GsonBuilder
import java.text.SimpleDateFormat
import java.util.*
class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
......@@ -33,7 +30,7 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mVB.root)
setViewModel()
initViewModel()
initView()
}
......@@ -55,7 +52,7 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
}
}
private fun setViewModel() {
private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService)
mQueryCountryInfo = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[QueryCountryInfoViewModel::class.java]
}
......
......@@ -9,7 +9,10 @@ import com.example.simboxapi.data.entirys.CountryDataBean
class QueryCountryInfoViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostQueryCountryInfo(langType: String, loginCustomerId: String, partnerCode: String, streamNo: String, cookie: String, voipId: String): LiveData<ResourceViewModel<BaseResponse<ArrayList<CountryDataBean>>>> {
fun apiPostQueryCountryInfo(
langType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
cookie: String, voipId: String
): LiveData<ResourceViewModel<BaseResponse<ArrayList<CountryDataBean>>>> {
return viewModelRepository.apiPostQueryCountryInfo(langType, loginCustomerId, partnerCode, streamNo, cookie, voipId)
}
......
package com.example.simboxapi.ui.queryDeviceList
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.data.Status
import com.example.simboxapi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityQueryDeviceListBinding
import com.example.simboxapi.utils.StreamNoUtil
import com.google.gson.GsonBuilder
class QueryDeviceListActivity : AppCompatActivity(),View.OnClickListener{
class QueryDeviceListActivity : AppCompatActivity(), View.OnClickListener {
private val mVB by lazy { ActivityQueryDeviceListBinding.inflate(layoutInflater) }
companion object {
fun intentToQueryDeviceListActivity(context: Context) {
val intent = Intent(context, QueryDeviceListActivity::class.java)
context.startActivity(intent)
}
}
private val mVB by lazy { ActivityQueryDeviceListBinding.inflate(layoutInflater) }
private lateinit var mQueryDeviceListViewModel: QueryDeviceListViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mVB.root)
initViewModel()
initView()
}
override fun onClick(view: View?) {
when(view){
when (view) {
mVB.btnQueryDevicePostApi -> {
val deviceType = ""
val loginCustomerId = "6209e2ea1b7f0d319febe2b2"
val partnerCode = "GCGROUP"
val streamNo = "SIMBOX${StreamNoUtil.getData()}${((Math.random() * 9.toDouble() + 1.toDouble()) * 100000.toDouble()).toInt()}"
val cookie = "access_token=TGT-2398391-2usdACdYsxPGbfXXnenVOIYRu6fZKFdZHpEAHczU0Sc4BfUZZR"
val voidId = "80000076419"
val userLabel = "businessUser"
apiPostQueryDeviceList(deviceType, loginCustomerId, partnerCode, streamNo, cookie, voidId, userLabel)
}
}
}
private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService)
mQueryDeviceListViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[QueryDeviceListViewModel::class.java]
}
private fun initView() {
mVB.tvQueryDevicePostApi.movementMethod = ScrollingMovementMethod()
mVB.btnQueryDevicePostApi.setOnClickListener(this)
}
private fun apiPostQueryDeviceList(
deviceType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
cookie: String, voipId: String, userLabel: String
) {
mQueryDeviceListViewModel.apiPostQueryDeviceList(deviceType, loginCustomerId, partnerCode, streamNo, cookie, voipId, userLabel).observe(this) {
when (it.status) {
Status.SUCCESS -> {
if (it.data?.resultCode == "00000000") {
val data = GsonBuilder().setPrettyPrinting().create().toJson(it.data)
mVB.tvQueryDevicePostApi.text = data
return@observe
}
mVB.tvQueryDevicePostApi.text = it.data?.resultDesc ?: ""
}
Status.ERROR -> {
mVB.tvQueryDevicePostApi.text = it.e?.message.toString()
}
Status.LOADING -> {
}
}
}
}
}
\ No newline at end of file
package com.example.simboxapi.ui.queryDeviceList
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.ResourceViewModel
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.entirys.DeviceDataBean
class QueryDeviceListViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostQueryDeviceList(
deviceType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
cookie: String, voipId: String, userLabel: String
): LiveData<ResourceViewModel<BaseResponse<ArrayList<DeviceDataBean>>>> {
return viewModelRepository.apiPostQueryDeviceList(deviceType, loginCustomerId, partnerCode, streamNo, cookie, voipId, userLabel)
}
}
\ No newline at end of file
......@@ -19,6 +19,8 @@
<TextView
android:id="@+id/tvChangSimContent"
android:layout_width="0dp"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_20"
android:scrollbars="vertical"
......
......@@ -7,7 +7,7 @@
tools:context=".ui.login.LoginActivity">
<TextView
android:text="login"
android:text="暂时中止"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
......
......@@ -20,6 +20,8 @@
android:id="@+id/tvQueryCountryResponse"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintBottom_toBottomOf="parent"
android:scrollbars = "vertical"
......
......@@ -7,6 +7,7 @@
tools:context=".ui.queryDeviceList.QueryDeviceListActivity">
<Button
android:id="@+id/btnQueryDevicePostApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
......@@ -15,4 +16,17 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvQueryDevicePostApi"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_10"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnQueryDevicePostApi" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment