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 0000000..8070a20 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_location_market.png differ 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