Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / retrofit / RetrofitServiceManager.kt
package com.casic.smarttube.retrofit

import com.casic.smarttube.utils.AuthenticationHelper
import com.casic.smarttube.utils.LocaleConstant
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.File


object RetrofitServiceManager {

    private val api by lazy {
        val httpConfig = SaveKeyValues.getValue(
            LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL
        ) as String
        createRetrofit<RetrofitService>(httpConfig)
    }

    /**
     * 验证PublicKey
     */
    suspend fun authenticate(): String {
        return api.obtainPublicKey()
    }

    /**
     * 登录并获取Token
     */
    suspend fun login(sid: String, account: String, secretKey: String): String {
        return api.obtainLoginResult(sid, account, secretKey)
    }

    /**
     * 退出登录
     */
    suspend fun loginOut(): String {
        return api.loginOut(AuthenticationHelper.token!!)
    }

    /**
     * 获取用户信息
     */
    suspend fun obtainUserDetail(): String {
        return api.obtainUserDetail(AuthenticationHelper.token!!)
    }

    /**
     * 修改密码
     */
    suspend fun changePassword(oldPwd: String, newPwd: String): String {
        return api.changePassword(AuthenticationHelper.token!!, oldPwd, newPwd)
    }

    /**
     * 更新APK版本
     */
    suspend fun updateVersion(): String {
        return api.obtainVersionResult(AuthenticationHelper.token!!)
    }

    /**
     * 地图设备列表
     */
    suspend fun obtainMapDeviceList(): String {
        return api.obtainMapDeviceList(AuthenticationHelper.token!!)
    }

    /**
     * 项目列表
     */
    suspend fun obtainProGroupList(): String {
        return api.obtainProGroupList(AuthenticationHelper.token!!)
    }

    /**
     * 根据项目ID查询该项目下的设备列表
     */
    suspend fun obtainDeviceListByGroup(wellGroupId: String): String {
        return api.obtainDeviceListByGroup(AuthenticationHelper.token!!, wellGroupId)
    }

    /**
     * 获取设备分页列表
     */
    suspend fun obtainDeviceListByPage(groupId: String, order: Int, page: Int): String {
        return api.obtainDeviceListByPage(
            AuthenticationHelper.token!!, groupId, order, page, LocaleConstant.PAGE_LIMIT
        )
    }

    /**
     * 获取设备详情
     */
    suspend fun obtainDeviceDetail(groupId: String, tubeId: String): String {
        return api.obtainDeviceDetail(AuthenticationHelper.token!!, groupId, tubeId)
    }

    /**
     * 根据部门获取区ID
     */
    suspend fun obtainAreaByDept(deptId: String): String {
        return api.obtainAreaByDept(AuthenticationHelper.token!!, deptId)
    }

    /**
     * 获取区/县等
     */
    suspend fun obtainDistrict(pid: String): String {
        return api.obtainDistrict(AuthenticationHelper.token!!, pid)
    }

    /**
     * 获取街道
     */
    suspend fun obtainStreet(pid: String): String {
        return api.obtainStreet(AuthenticationHelper.token!!, pid)
    }

    /**
     * 根据设备编号获取历史数据
     */
    suspend fun obtainDeviceHistoryData(
        groupId: String, devcode: String, beginTime: String?, endTime: String?
    ): String {
        return api.obtainDeviceHistoryData(
            AuthenticationHelper.token!!, groupId, devcode, beginTime, endTime
        )
    }

    /**
     * 上传图片
     */
    suspend fun uploadImage(image: File): String {
        val requestBody = RequestBody.create("image/png".toMediaTypeOrNull(), image)
        val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
        return api.uploadImage(AuthenticationHelper.token!!, imagePart)
    }

    /**
     * 获取设备最新数据
     */
    suspend fun obtainTubeLastData(groupId: String, devcode: String): String {
        return api.obtainTubeLastData(AuthenticationHelper.token!!, groupId, devcode)
    }

    /**
     * 添加设备
     */
    suspend fun addDevice(
        deviceCode: String,
        deviceName: String,
        ownerShip: String,
        interval: String,
        longitude: String,
        latitude: String,
        imagePaths: String,
        scene: String,
        addDeviceTime: String,
        userId: String,
        deptId: String
    ): String {
        val paramObject = JSONObject()
        paramObject.put("deviceCode", deviceCode)
        paramObject.put("deviceName", deviceName)
        paramObject.put("projectName", ownerShip)
        paramObject.put("frequency", interval)
        paramObject.put("lng", longitude)
        paramObject.put("lat", latitude)
        paramObject.put("image", imagePaths)
        paramObject.put("description", scene)
        paramObject.put("createTime", addDeviceTime)
        paramObject.put("ownerId", userId)
        paramObject.put("deptId", deptId)
        paramObject.put("version", "19")
        val requestBody = paramObject.toString().toRequestBody(
            "application/json;charset=UTF-8".toMediaType()
        )
        return api.addDevice(AuthenticationHelper.token!!, requestBody)
    }

    /**
     * 获取项目编号列表
     */
    suspend fun obtainGroupList(): String {
        return api.obtainGroupList(AuthenticationHelper.token!!)
    }

    /**
     * 修改项目编号
     */
    suspend fun changeGroupId(oldGroupId: String, newGroupId: String): String {
        return api.changeGroupId(AuthenticationHelper.token!!, oldGroupId, newGroupId)
    }

    /**
     * 删除设备
     */
    suspend fun deleteDeviceById(ids: List<Long>): String {
        val requestBody = ids.toString().toRequestBody(
            "application/json;charset=UTF-8".toMediaType()
        )
        return api.deleteDeviceById(AuthenticationHelper.token!!, requestBody)
    }
}