From 27a3e0f31fc211591c1bb2a556f4d7d59b74b2a9 Mon Sep 17 00:00:00 2001 From: wlh <646507849@qq.com> Date: Wed, 10 Jan 2024 09:34:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=BB=BA365-=E5=AE=B6=E4=BA=BA?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E6=B5=8B=E9=87=8F=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dc/fragment/DynamicManagementFrag.kt | 1 - .../mipmap-xxhdpi/icon_location_market.png | Bin 0 -> 5129 bytes .../act/familyhealth/FamilyHealthAct.kt | 4 +- .../familyhealth/FamilyHealthRealTimeAct.kt | 129 ++++++++++++++++-- .../FamilyHealthRealTimeAdapter.kt | 55 +++++++- .../zj365/health/vm/FamilyHealthRealTimeVm.kt | 34 +++++ .../layout/act_family_health_real_time.xml | 4 +- .../layout/item_family_health_real_time.xml | 7 +- .../main/java/com/xty/network/ApiInterface.kt | 12 ++ .../com/xty/network/model/FamilyHealthBean.kt | 2 + .../xty/network/model/WatchCurrentTimeBean.kt | 17 +++ 11 files changed, 242 insertions(+), 23 deletions(-) create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_location_market.png create mode 100644 health/src/main/java/com/zj365/health/vm/FamilyHealthRealTimeVm.kt create mode 100644 network/src/main/java/com/xty/network/model/WatchCurrentTimeBean.kt diff --git a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt index ea78f59..c438a89 100644 --- a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt @@ -805,7 +805,6 @@ class DynamicManagementFrag : BaseVmFrag(){ healthMonitoringListExceed.clear() mHealthAdapter.mainBean.clear() - LogUtils.e("DynamicManagementFrag","11111111") val healthMonitoringListData = mViewModel.setHealthMonitoringListData( requireContext(), diff --git a/common/src/main/res/mipmap-xxhdpi/icon_location_market.png b/common/src/main/res/mipmap-xxhdpi/icon_location_market.png new file mode 100644 index 0000000000000000000000000000000000000000..8070a201cca43b64b92f0857b423e55a7d5be178 GIT binary patch literal 5129 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 literal 0 HcmV?d00001 diff --git a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt index e6c6e7f..ae22f0f 100644 --- a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt +++ b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt @@ -94,7 +94,9 @@ class FamilyHealthAct : BaseListAct() { RouteManager.goAct(ARouterUrl.FAMILY_GUARDIAN_LIST_ACT) } R.id.tv_current_time ->{ - // RouteManager.goAct(ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT) + bundle.clear() + bundle.putLong("id",familyHealthBean.userId) + RouteManager.goAct(ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT,bundle) } R.id.tv_watch ->{ diff --git a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthRealTimeAct.kt b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthRealTimeAct.kt index cb0d845..8957fa7 100644 --- a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthRealTimeAct.kt +++ b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthRealTimeAct.kt @@ -1,60 +1,110 @@ package com.zj365.health.act.familyhealth -import android.graphics.Rect +import android.annotation.SuppressLint +import android.os.Bundle +import android.os.CountDownTimer +import android.util.Log import android.view.View +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView import com.alibaba.android.arouter.facade.annotation.Route +import com.amap.api.location.AMapLocationClient +import com.amap.api.location.AMapLocationClientOption import com.amap.api.maps.AMap import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.UiSettings +import com.amap.api.maps.model.BitmapDescriptor +import com.amap.api.maps.model.BitmapDescriptorFactory import com.amap.api.maps.model.CameraPosition import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Marker +import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.MyLocationStyle import com.xty.base.act.BaseVmAct -import com.xty.base.vm.BaseVm import com.xty.common.arouter.ARouterUrl +import com.xty.network.model.WatchCurrentTimeBean import com.zj365.health.R import com.zj365.health.adapter.familyhealth.FamilyHealthRealTimeAdapter import com.zj365.health.databinding.ActFamilyHealthRealTimeBinding +import com.zj365.health.vm.FamilyHealthRealTimeVm +import java.util.Timer +import java.util.TimerTask /** * 家人健康-实时 */ @Route(path = ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT) -class FamilyHealthRealTimeAct : BaseVmAct() { +class FamilyHealthRealTimeAct : BaseVmAct() { val binding by lazy { ActFamilyHealthRealTimeBinding.inflate(layoutInflater) } val mAdapter by lazy { FamilyHealthRealTimeAdapter() } + private var bitmapDescriptor: BitmapDescriptor? = null private var aMap: AMap? = null - private var latLng = LatLng(28.206548, 112.893712) //坐标 + var userId:Long = 0 + + var measureBeanList = ArrayList() + var myLocationStyle = MyLocationStyle() + + var countDownTimer:CountDownTimer? = null + + override fun liveObserver() { + mViewModel.watchCurrentTimeLiveData.observe(this){ + measureBeanList.clear() + var latLng = LatLng(it.data.gps.lat, it.data.gps.lng) + locationPoint(R.mipmap.icon_location_market,latLng) + + measureBeanList.add(WatchCurrentTimeBean.MeasureBean(1,it.data.tiwen.time,it.data.tiwen.v)) + measureBeanList.add(WatchCurrentTimeBean.MeasureBean(2,it.data.xinlv.time,it.data.xinlv.v)) + measureBeanList.add(WatchCurrentTimeBean.MeasureBean(3,it.data.xueya.time,it.data.xueya.v)) + + measureBeanList.add(WatchCurrentTimeBean.MeasureBean(4,it.data.xueyang.time,it.data.xueyang.v)) + binding.tvTips.visibility = View.GONE + + mAdapter.setNewInstance(measureBeanList) + + + + } + } + + fun timeStart() { + countDownTimer =object : CountDownTimer(60*1000,1000){//1000ms运行一次onTick里面的方法 + override fun onFinish() { + loadingView.dismiss() + mViewModel.getWatchCurrentTime(userId) + } + + override fun onTick(millisUntilFinished: Long) { + loadingView.binding.tipTextView.text = "测量中" + loadingView.show() + } + }.start() } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding.mapView.onCreate(savedInstanceState) + } + override fun initView() { super.initView() statusBar(binding.title.mView) binding.title.mTvTitle.text ="实时详情" + userId = intent.extras!!.getLong("id") binding.title.mIvBack.setOnClickListener { finish() } initAdapter() - + myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_location_market)) + mViewModel.getWatchCurrentTime(userId) aMap = binding.mapView.map - aMap?.let { - val uiSettings: UiSettings = it.uiSettings - uiSettings.setLogoBottomMargin(-50) //隐藏logo - uiSettings.isZoomControlsEnabled=false - var cameraUpdate = CameraUpdateFactory.newCameraPosition( - CameraPosition(latLng, 15f, 0f, 0f) - ) - it.moveCamera(cameraUpdate) - } } fun initAdapter(){ @@ -64,8 +114,57 @@ class FamilyHealthRealTimeAct : BaseVmAct() { dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.shape_ebf_0_5)) binding.recycler.addItemDecoration(dividerItemDecoration) mAdapter.addChildClickViewIds(R.id.tv_real_time_mearsure) + mAdapter.setOnItemChildClickListener{adapter, view, position -> + val measureBean = adapter.data[position] as WatchCurrentTimeBean.MeasureBean + timeStart() + mViewModel.measureData(userId,measureBean.type) + binding.tvTips.visibility = View.VISIBLE + } } override fun setLayout() = binding.root + + private fun locationPoint(makerRes:Int,latLng:LatLng) { + + aMap?.let { + bitmapDescriptor=BitmapDescriptorFactory + .fromResource(makerRes) + + val cameraUpdate = CameraUpdateFactory.newCameraPosition(CameraPosition(latLng,15f,0f,0f)) + it.moveCamera(cameraUpdate) + + it.clear() + it.addMarker(MarkerOptions().position(latLng) + .icon(bitmapDescriptor) + ) + } + + + + } + + override fun onDestroy() { + super.onDestroy() + binding.mapView.onDestroy() + countDownTimer?.cancel() + countDownTimer = null + } + + override fun onPause() { + super.onPause() + binding.mapView.onPause() + } + + + override fun onResume() { + super.onResume() + binding.mapView.onResume() + } + + @SuppressLint("MissingSuperCall") + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + binding.mapView.onSaveInstanceState(outState) + } } \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthRealTimeAdapter.kt b/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthRealTimeAdapter.kt index f31e1cf..c5c1fd1 100644 --- a/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthRealTimeAdapter.kt +++ b/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthRealTimeAdapter.kt @@ -1,11 +1,62 @@ package com.zj365.health.adapter.familyhealth +import android.graphics.Typeface +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat import com.chad.library.adapter.base.viewholder.BaseViewHolder import com.xty.base.adapter.BaseAdapter +import com.xty.common.util.SpannableUtils +import com.xty.network.model.WatchCurrentTimeBean import com.zj365.health.R -class FamilyHealthRealTimeAdapter : BaseAdapter(R.layout.item_family_health_real_time) { - override fun convert(holder: BaseViewHolder, item: Any) { +class FamilyHealthRealTimeAdapter : BaseAdapter(R.layout.item_family_health_real_time) { + //器官名 + private val units = arrayOf( + R.string.info_4_unit, R.string.info_1_unit, R.string.info_2_unit, R.string.info_3_unit + + ) + + override fun convert(holder: BaseViewHolder, item: WatchCurrentTimeBean.MeasureBean) { + + var imgTarget = holder.getView(R.id.img_body) + holder.setText(R.id.tv_update,"更新时间:${item.time}") + var tvValue = holder.getView(R.id.tv_body_name) + var typeName = "心率:" + when(item.type){ + 1 ->{ + imgTarget.setImageResource(R.mipmap.ic_temp) + typeName = "体温:" + + } + + 2 ->{ + imgTarget.setImageResource(R.mipmap.ic_xl) + typeName = "心率:" + } + + 3 ->{ + imgTarget.setImageResource(R.mipmap.ic_xya) + typeName = "血压:" + + } + + 4 ->{ + imgTarget.setImageResource(R.mipmap.ic_oo) + typeName = "血氧:" + } + } + + tvValue.text = SpannableUtils.setStrSpan( + "${typeName}${item.value}${context.getString(units[item.type-1])}", + 14, + ContextCompat.getColor( + context, R.color.col_313 + ), + Typeface.BOLD, + 0, + "${typeName}${item.value}${context.getString(units[item.type-1])}".length - + context.getString(units[item.type-1]).length) } } \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/FamilyHealthRealTimeVm.kt b/health/src/main/java/com/zj365/health/vm/FamilyHealthRealTimeVm.kt new file mode 100644 index 0000000..46e80a6 --- /dev/null +++ b/health/src/main/java/com/zj365/health/vm/FamilyHealthRealTimeVm.kt @@ -0,0 +1,34 @@ +package com.zj365.health.vm + +import androidx.lifecycle.MutableLiveData +import com.alibaba.fastjson.JSONObject +import com.xty.base.vm.BaseVm +import com.xty.network.model.RespBody +import com.xty.network.model.WatchCurrentTimeBean + +class FamilyHealthRealTimeVm : BaseVm() { + + val watchCurrentTimeLiveData by lazy { MutableLiveData>() } + val measureLiveData by lazy { MutableLiveData>() } + + fun getWatchCurrentTime(id:Long){ + startHttp { + var json = JSONObject() + json.put("id",id) + val request = apiInterface().getWatchCurrentTime(retrofits.getRequestBody(json.toString())) + request.getCodeStatus(watchCurrentTimeLiveData,nowData) + + } + } + + fun measureData(id:Long,type:Int){ + startHttp (false){ + var json = JSONObject() + json.put("id",id) + json.put("type",type) + val request = apiInterface().measureWatchData(retrofits.getRequestBody(json.toString())) + request.getCodeStatus(measureLiveData,nowData) + + } + } +} \ No newline at end of file diff --git a/health/src/main/res/layout/act_family_health_real_time.xml b/health/src/main/res/layout/act_family_health_real_time.xml index 683a6c1..8b1b97c 100644 --- a/health/src/main/res/layout/act_family_health_real_time.xml +++ b/health/src/main/res/layout/act_family_health_real_time.xml @@ -11,7 +11,7 @@ + android:layout_height="@dimen/dp_350"/> @@ -36,9 +37,9 @@ android:text="实时测量" android:gravity="center" android:textColor="@color/col_02c" - android:textSize="12sp" + android:textSize="@dimen/sp_12" android:layout_alignParentEnd="true" - android:textStyle="bold"/> + /> diff --git a/network/src/main/java/com/xty/network/ApiInterface.kt b/network/src/main/java/com/xty/network/ApiInterface.kt index 3d812fb..c0db521 100644 --- a/network/src/main/java/com/xty/network/ApiInterface.kt +++ b/network/src/main/java/com/xty/network/ApiInterface.kt @@ -1750,6 +1750,18 @@ interface ApiInterface { @GET("customer/family/remove") suspend fun exitCustody(@Query("id") id: String): RespBody + /** + * 获取手表实时数据 + */ + @POST("customer/watch/realData") + suspend fun getWatchCurrentTime(@Body rb: RequestBody):RespBody + + /** + * 实时测量 + */ + @POST("customer/watch/realmeas") + suspend fun measureWatchData(@Body rb: RequestBody):RespBody + /** * 获取演示模式 diff --git a/network/src/main/java/com/xty/network/model/FamilyHealthBean.kt b/network/src/main/java/com/xty/network/model/FamilyHealthBean.kt index 87087ea..c46ffaa 100644 --- a/network/src/main/java/com/xty/network/model/FamilyHealthBean.kt +++ b/network/src/main/java/com/xty/network/model/FamilyHealthBean.kt @@ -8,6 +8,8 @@ data class FamilyHealthBean ( var avatarUrl:String, var isMy:Int, //是否本人0,否,1,是 var power:String?, //电量 + var isRealTime:Int ,//是否实时,0,否,1,是 + var dataList: ArrayList ,//数据列表 var avatarList:ArrayList? ) { diff --git a/network/src/main/java/com/xty/network/model/WatchCurrentTimeBean.kt b/network/src/main/java/com/xty/network/model/WatchCurrentTimeBean.kt new file mode 100644 index 0000000..233e335 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/WatchCurrentTimeBean.kt @@ -0,0 +1,17 @@ +package com.xty.network.model + +data class WatchCurrentTimeBean( + var xueya:BodyDataBean, + var xueyang:BodyDataBean, + var xinlv:BodyDataBean, + var tiwen:BodyDataBean, + var gps:GPSBean + +) { + + data class BodyDataBean(val v:String,val time:String) + + data class GPSBean(val lng:Double,val lat:Double) + + data class MeasureBean(var type:Int,var time:String,var value:String) +} \ No newline at end of file