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) } }