diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_7.xml b/app/src/main/res/drawable/dot_7.xml new file mode 100644 index 0000000..93f8781 --- /dev/null +++ b/app/src/main/res/drawable/dot_7.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_7.xml b/app/src/main/res/drawable/dot_7.xml new file mode 100644 index 0000000..93f8781 --- /dev/null +++ b/app/src/main/res/drawable/dot_7.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_gradient.xml b/app/src/main/res/drawable/dot_gradient.xml new file mode 100644 index 0000000..f9c5eef --- /dev/null +++ b/app/src/main/res/drawable/dot_gradient.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_7.xml b/app/src/main/res/drawable/dot_7.xml new file mode 100644 index 0000000..93f8781 --- /dev/null +++ b/app/src/main/res/drawable/dot_7.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_gradient.xml b/app/src/main/res/drawable/dot_gradient.xml new file mode 100644 index 0000000..f9c5eef --- /dev/null +++ b/app/src/main/res/drawable/dot_gradient.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml index ba61145..c3842d1 100644 --- a/app/src/main/res/layout/activity_business_statistics.xml +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -17,7 +17,7 @@ + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_7.xml b/app/src/main/res/drawable/dot_7.xml new file mode 100644 index 0000000..93f8781 --- /dev/null +++ b/app/src/main/res/drawable/dot_7.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_gradient.xml b/app/src/main/res/drawable/dot_gradient.xml new file mode 100644 index 0000000..f9c5eef --- /dev/null +++ b/app/src/main/res/drawable/dot_gradient.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml index ba61145..c3842d1 100644 --- a/app/src/main/res/layout/activity_business_statistics.xml +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -17,7 +17,7 @@ + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + android:layout_height="match_parent" + android:background="@color/mainBackground" + android:orientation="vertical"> - + + + android:layout_height="match_parent"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_7.xml b/app/src/main/res/drawable/dot_7.xml new file mode 100644 index 0000000..93f8781 --- /dev/null +++ b/app/src/main/res/drawable/dot_7.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_gradient.xml b/app/src/main/res/drawable/dot_gradient.xml new file mode 100644 index 0000000..f9c5eef --- /dev/null +++ b/app/src/main/res/drawable/dot_gradient.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml index ba61145..c3842d1 100644 --- a/app/src/main/res/layout/activity_business_statistics.xml +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -17,7 +17,7 @@ + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + android:layout_height="match_parent" + android:background="@color/mainBackground" + android:orientation="vertical"> - + + + android:layout_height="match_parent"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_task_top_layout.xml b/app/src/main/res/layout/include_task_top_layout.xml index ed97997..440ada1 100644 --- a/app/src/main/res/layout/include_task_top_layout.xml +++ b/app/src/main/res/layout/include_task_top_layout.xml @@ -12,21 +12,15 @@ android:src="@mipmap/todo_task" /> - - @@ -37,21 +31,15 @@ android:src="@mipmap/under_task" /> - - @@ -62,20 +50,14 @@ android:src="@mipmap/completed_task" /> - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt index b5e2c3a..a7a603c 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt @@ -7,12 +7,19 @@ import com.casic.xz.meterage.fragment.task.AwaitDetectionFragment import com.casic.xz.meterage.fragment.task.CompletedDetectionFragment import com.casic.xz.meterage.fragment.task.UnderDetectionFragment +import com.casic.xz.meterage.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.fragment_task.* +import kotlinx.android.synthetic.main.include_task_top_layout.* class TaskPageFragment : KotlinBaseFragment() { + companion object { + lateinit var weakReferenceHandler: WeakReferenceHandler + } + private var fragmentPages: ArrayList = ArrayList() init { @@ -22,11 +29,27 @@ } override fun initData() { + weakReferenceHandler = WeakReferenceHandler { + when (it.what) { + LocaleConstant.TASK_AWAIT_DETECTION -> { + awaitDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_UNDER_DETECTION -> { + underDetectionCountView.text = it.obj.toString() + } + LocaleConstant.TASK_COMPLETED_DETECTION -> { + completedDetectionCountView.text = it.obj.toString() + } + } + true + } + val samplePageTitles = arrayOf("待检测", "检测中", "检测完成") sampleViewPager.adapter = SubViewPagerAdapter( childFragmentManager, fragmentPages, samplePageTitles ) + sampleViewPager.offscreenPageLimit = samplePageTitles.size //绑定 topTabLayout.setupWithViewPager(sampleViewPager) } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt index ee85e5c..0683d11 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/outfield/OutfieldDetectionFragment.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.OutfieldDetectionListModel import com.casic.xz.meterage.view.home.OutfieldDetectionDetailActivity -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -29,8 +29,8 @@ class OutfieldDetectionFragment(private val status: String) : KotlinBaseFragment() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel - private lateinit var outfieldDetectionAdapter: NormalRecyclerAdapter + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var detectionAdapter: NormalRecyclerAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false @@ -38,8 +38,8 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] - outfieldDetectionViewModel.outfieldDetectionList.observe(this) { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.outfieldDetectionList.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! when { @@ -88,7 +88,7 @@ } private fun getOutfieldDetectionList() { - outfieldDetectionViewModel.getOutfieldDetectionList( + detectionViewModel.getOutfieldDetectionList( status, "", "", "", pageIndex ) } @@ -107,7 +107,7 @@ when (it.what) { 2023041101 -> { if (isRefresh || isLoadMore) { - outfieldDetectionAdapter.notifyDataSetChanged() + detectionAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("无外场检测申请") { @@ -116,7 +116,7 @@ } } else { emptyView!!.hide() - outfieldDetectionAdapter = object : + detectionAdapter = object : NormalRecyclerAdapter( R.layout.item_outfield_detection_rv_l, dataBeans ) { @@ -160,8 +160,8 @@ outfieldRecyclerView.addItemDecoration( DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) ) - outfieldRecyclerView.adapter = outfieldDetectionAdapter - outfieldDetectionAdapter.setOnItemClickedListener(object : + outfieldRecyclerView.adapter = detectionAdapter + detectionAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener { override fun onItemClicked( position: Int, t: OutfieldDetectionListModel.DataModel.RowsModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt index 8866ce7..b9e59de 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/AwaitDetectionFragment.kt @@ -1,15 +1,107 @@ package com.casic.xz.meterage.fragment.task +import android.os.Handler +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.fragment_task_await.* +import kotlinx.android.synthetic.main.include_empty_view.* class AwaitDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "AwaitDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var detectionAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_AWAIT_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + + //绑定列表 + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + awaitTaskLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows) + awaitTaskLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023042101) + } + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getDetectionListByState() } override fun initEvent() { + awaitTaskLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getDetectionListByState() + } + awaitTaskLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getDetectionListByState() + } + } + + private fun getDetectionListByState() { + detectionViewModel.getDetectionListByState( + "", + "", + "", + "", + "2", + "", + "", + "", + "", + "", + pageIndex + ) } override fun initLayoutView(): Int = R.layout.fragment_task_await @@ -21,4 +113,51 @@ override fun setupTopBarLayout() { } + + private val callback = Handler.Callback { + when (it.what) { + 2023042101 -> { + if (isRefresh || isLoadMore) { + detectionAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无待检测样品") { + pageIndex = 1 + getDetectionListByState() + } + } else { + emptyView!!.hide() + detectionAdapter = object : + NormalRecyclerAdapter( + R.layout.item_await_task_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: DetectionListModel.DataModel.RowsModel + ) { + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.dateView, R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.dateView, R.color.black.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.sampleNameView, item.sampleName) + .setText(R.id.currentLibView, item.currentSegment) + .setText( + R.id.dateView, item.requireOverTime.formatToYearMonthDay() + ) + } + } + awaitTaskRecyclerView.adapter = detectionAdapter + } + } + } + } + true + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt index c410c3d..6eef896 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/CompletedDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class CompletedDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "CompletedDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_COMPLETED_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "4", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt index 61b7719..6bf871f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/task/UnderDetectionFragment.kt @@ -1,11 +1,33 @@ package com.casic.xz.meterage.fragment.task +import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.fragment.TaskPageFragment +import com.casic.xz.meterage.utils.LocaleConstant +import com.casic.xz.meterage.vm.DetectionViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment class UnderDetectionFragment : KotlinBaseFragment() { - override fun initData() { + private val kTag = "UnderDetectionFragment" + private lateinit var detectionViewModel: DetectionViewModel + + override fun initData() { + detectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] + detectionViewModel.detectionList.observe(this) { + if (it.code == 200) { + val message = TaskPageFragment.weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.TASK_UNDER_DETECTION + message.obj = it.data.total + + TaskPageFragment.weakReferenceHandler.sendMessage(message) + } + } + } + + override fun onResume() { + super.onResume() + detectionViewModel.getDetectionListByState("", "", "", "", "3", "", "", "", "", "", 1) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java new file mode 100644 index 0000000..5b2d34b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/DetectionListModel.java @@ -0,0 +1,283 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class DetectionListModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String alreadyCertifications; + private String currentSegment; + private String currentSegmentId; + private String customerId; + private String customerName; + private String customerNo; + private String deliverer; + private String handOutProperty; + private String id; + private String isUrgent; + private String manufacturingNo; + private String measureDeptId; + private String measureDeptName; + private String measurePersonId; + private String measureStatus; + private String orderId; + private String orderNo; + private String requireCertifications; + private String requireOverTime; + private String sampleBelong; + private String sampleBelongName; + private String sampleId; + private String sampleModel; + private String sampleName; + private String sampleNo; + + public String getAlreadyCertifications() { + return alreadyCertifications; + } + + public void setAlreadyCertifications(String alreadyCertifications) { + this.alreadyCertifications = alreadyCertifications; + } + + public String getCurrentSegment() { + return currentSegment; + } + + public void setCurrentSegment(String currentSegment) { + this.currentSegment = currentSegment; + } + + public String getCurrentSegmentId() { + return currentSegmentId; + } + + public void setCurrentSegmentId(String currentSegmentId) { + this.currentSegmentId = currentSegmentId; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNo() { + return customerNo; + } + + public void setCustomerNo(String customerNo) { + this.customerNo = customerNo; + } + + public String getDeliverer() { + return deliverer; + } + + public void setDeliverer(String deliverer) { + this.deliverer = deliverer; + } + + public String getHandOutProperty() { + return handOutProperty; + } + + public void setHandOutProperty(String handOutProperty) { + this.handOutProperty = handOutProperty; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsUrgent() { + return isUrgent; + } + + public void setIsUrgent(String isUrgent) { + this.isUrgent = isUrgent; + } + + public String getManufacturingNo() { + return manufacturingNo; + } + + public void setManufacturingNo(String manufacturingNo) { + this.manufacturingNo = manufacturingNo; + } + + public String getMeasureDeptId() { + return measureDeptId; + } + + public void setMeasureDeptId(String measureDeptId) { + this.measureDeptId = measureDeptId; + } + + public String getMeasureDeptName() { + return measureDeptName; + } + + public void setMeasureDeptName(String measureDeptName) { + this.measureDeptName = measureDeptName; + } + + public String getMeasurePersonId() { + return measurePersonId; + } + + public void setMeasurePersonId(String measurePersonId) { + this.measurePersonId = measurePersonId; + } + + public String getMeasureStatus() { + return measureStatus; + } + + public void setMeasureStatus(String measureStatus) { + this.measureStatus = measureStatus; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getRequireCertifications() { + return requireCertifications; + } + + public void setRequireCertifications(String requireCertifications) { + this.requireCertifications = requireCertifications; + } + + public String getRequireOverTime() { + return requireOverTime; + } + + public void setRequireOverTime(String requireOverTime) { + this.requireOverTime = requireOverTime; + } + + public String getSampleBelong() { + return sampleBelong; + } + + public void setSampleBelong(String sampleBelong) { + this.sampleBelong = sampleBelong; + } + + public String getSampleBelongName() { + return sampleBelongName; + } + + public void setSampleBelongName(String sampleBelongName) { + this.sampleBelongName = sampleBelongName; + } + + public String getSampleId() { + return sampleId; + } + + public void setSampleId(String sampleId) { + this.sampleId = sampleId; + } + + public String getSampleModel() { + return sampleModel; + } + + public void setSampleModel(String sampleModel) { + this.sampleModel = sampleModel; + } + + public String getSampleName() { + return sampleName; + } + + public void setSampleName(String sampleName) { + this.sampleName = sampleName; + } + + public String getSampleNo() { + return sampleNo; + } + + public void setSampleNo(String sampleNo) { + this.sampleNo = sampleNo; + } + } + } +} diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt index 1feffe7..0e4fe97 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt @@ -43,6 +43,9 @@ * */ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 + const val TASK_AWAIT_DETECTION = 2023000001 + const val TASK_UNDER_DETECTION = 2023000002 + const val TASK_COMPLETED_DETECTION = 2023000003 /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt index 1b05568..de0677d 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt @@ -531,6 +531,17 @@ ): String /** + * 根据状态获取检测任务列表 + */ + @POST("/business/labExecutive/myExecutive/list") + suspend fun getDetectionListByState( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** * 获取现场检测详情 */ @POST("/business/siteExecutive/detail") diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index b2fd2cb..0c65764 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -1243,6 +1243,48 @@ } /** + * 根据状态获取检测任务列表 + */ + suspend fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("sampleName", sampleName) + param.addProperty("isUrgent", isUrgent) + param.addProperty("orderNo", orderNo) + param.addProperty("sampleBelong", sampleBelong) + param.addProperty("measureStatus", measureStatus) + param.addProperty("startTime", startTime) + param.addProperty("endTime", endTime) + param.addProperty("sampleNo", sampleNo) + param.addProperty("customerName", customerName) + param.addProperty("customerNo", customerNo) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getDetectionListByState( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** * 获取现场检测详情 */ suspend fun getOutfieldDetectionDetail(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index f595507..3c1c585 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -39,9 +39,11 @@ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) userViewModel.userInfo.observe(this) { if (it.code == 200) { - SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id) + val userId = it.data.id + SaveKeyValues.putValue(LocaleConstant.USER_ID, userId) - fragmentPages.add(HomePageFragment(it.data.id)) + fragmentPages.add(HomePageFragment(userId)) + //TODO 还需要根据角色判断 fragmentPages.add(TaskPageFragment()) fragmentPages.add(MinePageFragment()) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt index 3ba54dc..6666d0b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/OutfieldDetectionDetailActivity.kt @@ -11,7 +11,7 @@ import com.casic.xz.meterage.fragment.outfield.BasicInformationFragment import com.casic.xz.meterage.fragment.outfield.TaskDeviceFragment import com.casic.xz.meterage.fragment.outfield.TaskExecutorFragment -import com.casic.xz.meterage.vm.OutfieldDetectionViewModel +import com.casic.xz.meterage.vm.DetectionViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.utils.Constant import kotlinx.android.synthetic.main.activity_outfield_detection_detail.* @@ -22,7 +22,7 @@ private val pageTitles = arrayOf("基础信息", "任务执行人", "携带设备", "审批流程") private var fragmentPages: ArrayList = ArrayList() private lateinit var args: ArrayList - private lateinit var outfieldDetectionViewModel: OutfieldDetectionViewModel + private lateinit var outfieldDetectionViewModel: DetectionViewModel override fun initLayoutView(): Int = R.layout.activity_outfield_detection_detail @@ -44,7 +44,7 @@ } } - outfieldDetectionViewModel = ViewModelProvider(this)[OutfieldDetectionViewModel::class.java] + outfieldDetectionViewModel = ViewModelProvider(this)[DetectionViewModel::class.java] outfieldDetectionViewModel.getOutfieldDetectionDetail(args[0]) outfieldDetectionViewModel.outfieldDetectionDetail.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt new file mode 100644 index 0000000..8dc98c6 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/DetectionViewModel.kt @@ -0,0 +1,116 @@ +package com.casic.xz.meterage.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.DetectionListModel +import com.casic.xz.meterage.model.OutfieldDetectionDetailModel +import com.casic.xz.meterage.model.OutfieldDetectionListModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 外场检测 VM + * */ +class DetectionViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val outfieldDetectionList = MutableLiveData() + val outfieldDetectionDetail = MutableLiveData() + val detectionList = MutableLiveData() + + fun getOutfieldDetectionList( + approvalStatus: String, + customerName: String, + directorName: String, + siteExecutiveNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionList( + approvalStatus, customerName, directorName, siteExecutiveNo, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getOutfieldDetectionDetail(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + outfieldDetectionDetail.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getDetectionListByState( + sampleName: String, + isUrgent: String, + orderNo: String, + sampleBelong: String, + measureStatus: String, + startTime: String, + endTime: String, + sampleNo: String, + customerName: String, + customerNo: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getDetectionListByState( + sampleName, + isUrgent, + orderNo, + sampleBelong, + measureStatus, + startTime, + endTime, + sampleNo, + customerName, + customerNo, + offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + detectionList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt deleted file mode 100644 index 2a3ac27..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/OutfieldDetectionViewModel.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.casic.xz.meterage.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.OutfieldDetectionDetailModel -import com.casic.xz.meterage.model.OutfieldDetectionListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 外场检测 VM - * */ -class OutfieldDetectionViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val outfieldDetectionList = MutableLiveData() - val outfieldDetectionDetail = MutableLiveData() - - fun getOutfieldDetectionList( - approvalStatus: String, - customerName: String, - directorName: String, - siteExecutiveNo: String, - offset: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionList( - approvalStatus, customerName, directorName, siteExecutiveNo, offset - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionList.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) - - fun getOutfieldDetectionDetail(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getOutfieldDetectionDetail(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - outfieldDetectionDetail.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show(BaseApplication.get()) - } - }, { - loadState.value = LoadState.Fail - it.cause.toString().show(BaseApplication.get()) - it.printStackTrace() - }) -} \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_10.xml b/app/src/main/res/drawable/dot_10.xml new file mode 100644 index 0000000..f84a236 --- /dev/null +++ b/app/src/main/res/drawable/dot_10.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_5.xml b/app/src/main/res/drawable/dot_5.xml new file mode 100644 index 0000000..6ac6fa9 --- /dev/null +++ b/app/src/main/res/drawable/dot_5.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_7.xml b/app/src/main/res/drawable/dot_7.xml new file mode 100644 index 0000000..93f8781 --- /dev/null +++ b/app/src/main/res/drawable/dot_7.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot_gradient.xml b/app/src/main/res/drawable/dot_gradient.xml new file mode 100644 index 0000000..f9c5eef --- /dev/null +++ b/app/src/main/res/drawable/dot_gradient.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml index ba61145..c3842d1 100644 --- a/app/src/main/res/layout/activity_business_statistics.xml +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -17,7 +17,7 @@ + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + style="@style/taskTopLayoutStyle"> + android:layout_height="match_parent" + android:background="@color/mainBackground" + android:orientation="vertical"> - + + + android:layout_height="match_parent"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_task_top_layout.xml b/app/src/main/res/layout/include_task_top_layout.xml index ed97997..440ada1 100644 --- a/app/src/main/res/layout/include_task_top_layout.xml +++ b/app/src/main/res/layout/include_task_top_layout.xml @@ -12,21 +12,15 @@ android:src="@mipmap/todo_task" /> - - @@ -37,21 +31,15 @@ android:src="@mipmap/under_task" /> - - @@ -62,20 +50,14 @@ android:src="@mipmap/completed_task" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_await_task_rv_l.xml b/app/src/main/res/layout/item_await_task_rv_l.xml new file mode 100644 index 0000000..474db28 --- /dev/null +++ b/app/src/main/res/layout/item_await_task_rv_l.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file