diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml new file mode 100644 index 0000000..ba61145 --- /dev/null +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml new file mode 100644 index 0000000..ba61145 --- /dev/null +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_entrust_bs_rv_l.xml b/app/src/main/res/layout/item_entrust_bs_rv_l.xml new file mode 100644 index 0000000..59c6aef --- /dev/null +++ b/app/src/main/res/layout/item_entrust_bs_rv_l.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml new file mode 100644 index 0000000..ba61145 --- /dev/null +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_entrust_bs_rv_l.xml b/app/src/main/res/layout/item_entrust_bs_rv_l.xml new file mode 100644 index 0000000..59c6aef --- /dev/null +++ b/app/src/main/res/layout/item_entrust_bs_rv_l.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg new file mode 100644 index 0000000..19fd955 --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml new file mode 100644 index 0000000..ba61145 --- /dev/null +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_entrust_bs_rv_l.xml b/app/src/main/res/layout/item_entrust_bs_rv_l.xml new file mode 100644 index 0000000..59c6aef --- /dev/null +++ b/app/src/main/res/layout/item_entrust_bs_rv_l.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg new file mode 100644 index 0000000..19fd955 --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg Binary files differ diff --git a/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg b/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg new file mode 100644 index 0000000..682ddea --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml new file mode 100644 index 0000000..ba61145 --- /dev/null +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_entrust_bs_rv_l.xml b/app/src/main/res/layout/item_entrust_bs_rv_l.xml new file mode 100644 index 0000000..59c6aef --- /dev/null +++ b/app/src/main/res/layout/item_entrust_bs_rv_l.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg new file mode 100644 index 0000000..19fd955 --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg Binary files differ diff --git a/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg b/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg new file mode 100644 index 0000000..682ddea --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg Binary files differ diff --git a/app/src/main/res/mipmap-xxxhdpi/equip_overtime.jpg b/app/src/main/res/mipmap-xxxhdpi/equip_overtime.jpg new file mode 100644 index 0000000..694974f --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/equip_overtime.jpg Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3b368d..95f17d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,7 @@ + diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index 60f8761..66b419a 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -171,7 +171,7 @@ "能力列表" -> requireContext().navigatePageTo() "计量培训" -> requireContext().navigatePageTo() "合同发票" -> requireContext().navigatePageTo() -// "业务统计" -> requireContext().navigatePageTo() + "业务统计" -> requireContext().navigatePageTo() "客户列表" -> requireContext().navigatePageTo() "外场检测" -> requireContext().navigatePageTo() } diff --git a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java index 1b66d02..a8d54f5 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/EntrustListModel.java @@ -54,14 +54,18 @@ public static class RowsModel { private String createTime; + private String customerAddress; + private String customerId; private String customerName; private String customerNo; private String customerPhone; private String deliverer; + private String delivererTel; private String id; private String isUrgent; private String orderCode; private String orderTime; + private String planDeliverTime; private String remark; private String requireOverTime; private String sampleCount; @@ -76,6 +80,22 @@ this.createTime = createTime; } + public String getCustomerAddress() { + return customerAddress; + } + + public void setCustomerAddress(String customerAddress) { + this.customerAddress = customerAddress; + } + + public String getCustomerId() { + return customerId; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -108,6 +128,14 @@ this.deliverer = deliverer; } + public String getDelivererTel() { + return delivererTel; + } + + public void setDelivererTel(String delivererTel) { + this.delivererTel = delivererTel; + } + public String getId() { return id; } @@ -140,6 +168,14 @@ this.orderTime = orderTime; } + public String getPlanDeliverTime() { + return planDeliverTime; + } + + public void setPlanDeliverTime(String planDeliverTime) { + this.planDeliverTime = planDeliverTime; + } + public String getRemark() { return remark; } 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 3b9791a..c4eb16d 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 @@ -276,6 +276,18 @@ ): String /** + * 获取到期设备数 + */ + @GET("/meter/assets/remindQuantity") + suspend fun getRemindEquipmentCount(@Header("token") token: String): String + + /** + * 获取到期仪器数 + */ + @GET("/meter/standard/remindQuantity") + suspend fun getRemindDeviceCount(@Header("token") token: String): String + + /** * 获取检定规程列表 */ @POST("/meter/standard/regulation/listPage") 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 996d452..8b385fa 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 @@ -599,6 +599,20 @@ } /** + * 获取到期设备数 + */ + suspend fun getRemindEquipmentCount(): String { + return api.getRemindEquipmentCount(AuthenticationHelper.token!!) + } + + /** + * 获取到期仪器数 + */ + suspend fun getRemindDeviceCount(): String { + return api.getRemindDeviceCount(AuthenticationHelper.token!!) + } + + /** * 获取检定规程列表 */ suspend fun getVerifyProcedureList(id: String): String { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt new file mode 100644 index 0000000..9fa4040 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/home/BusinessStatisticsActivity.kt @@ -0,0 +1,257 @@ +package com.casic.xz.meterage.view.home + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.base.ApplicationBaseActivity +import com.casic.xz.meterage.callback.DateSelectedCallback +import com.casic.xz.meterage.extensions.* +import com.casic.xz.meterage.model.EntrustListModel +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.EntrustViewModel +import com.casic.xz.meterage.vm.EquipmentViewModel +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_business_statistics.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class BusinessStatisticsActivity : ApplicationBaseActivity() { + + private val context: Context = this@BusinessStatisticsActivity + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var equipmentViewModel: EquipmentViewModel + private lateinit var entrustViewModel: EntrustViewModel + private lateinit var entrustAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_business_statistics + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "业务统计" + } + + override fun initData() { + equipmentViewModel = ViewModelProvider(this)[EquipmentViewModel::class.java] + equipmentViewModel.remindEquipmentCount.observe(this) { + equipOvertimeCountView.text = it.toString() + } + equipmentViewModel.remindDeviceCount.observe(this) { + deviceOvertimeCountView.text = it.toString() + } + + weakReferenceHandler = WeakReferenceHandler(callback) + entrustViewModel = ViewModelProvider(this)[EntrustViewModel::class.java] + entrustViewModel.entrustList.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + entrustLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + entrustLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023041401) + } + } + } + + override fun onResume() { + super.onResume() + equipmentViewModel.getRemindEquipmentCount() + equipmentViewModel.getRemindDeviceCount() + + pageIndex = 1 + getEntrustListByPage() + } + + private fun getEntrustListByPage() { + val startDate = if (startDateView.text.toString() == "开始日期") { + "" + } else { + "${startDateView.text} 00:00:00" + } + + val endDate = if (endDateView.text.toString() == "结束日期") { + "" + } else { + "${endDateView.text} 00:00:00" + } + + entrustViewModel.getEntrustList( + "", + "", + "", + "", + startDate, + endDate, + "", + "", + arrayOf(), + pageIndex + ) + } + + override fun observeRequestState() { + entrustViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + equipOvertimeLayout.setOnClickListener { + + } + + deviceOvertimeLayout.setOnClickListener { + + } + + workTimeLayout.setOnClickListener { + + } + + deptDataLayout.setOnClickListener { + + } + + startDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + startDateView.text = date + } + }) + } + + endDateView.setOnClickListener { + showDatePicker(DateEntity.target(1949, 10, 1), object : DateSelectedCallback { + override fun onDateSelected(date: String) { + endDateView.text = date + } + }) + } + + searchButton.setOnClickListener { + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getEntrustListByPage() + } + + entrustLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getEntrustListByPage() + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023041401 -> { + if (isRefresh || isLoadMore) { + entrustAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无委托任务数据") { + pageIndex = 1 + getEntrustListByPage() + } + } else { + emptyView!!.hide() + entrustAdapter = object : + NormalRecyclerAdapter( + R.layout.item_entrust_bs_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: EntrustListModel.DataModel.RowsModel + ) { + //未接收:1;已接收:2;已取消:3;检测完成:4 + val color = when (item.status) { + "1" -> R.color.red.convertColor(context) + "2" -> R.color.blue.convertColor(context) + "3" -> R.color.gray.convertColor(context) + else -> R.color.green.convertColor(context) + } + viewHolder.setBackgroundColor(R.id.entrustStateView, color) + + if (item.requireOverTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.requireOverTimeView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.requireOverTimeView, + R.color.gray.convertColor(context) + ) + } + + viewHolder.setText(R.id.customerNameView, item.customerName) + .setText(R.id.entrustStateView, item.statusName) + .setText(R.id.entrustCodeView, "委托书编号:${item.orderCode}") + .setText( + R.id.createTimeView, + "委托创建时间:${item.createTime.formatToYearMonthDay()}" + ).setText( + R.id.planDeliverTimeView, + "预计送达时间:${item.planDeliverTime.formatToYearMonthDay()}" + ) + .setText( + R.id.requireOverTimeView, + "要求检完时间:${item.requireOverTime.formatToYearMonthDay()}" + ) + } + } + entrustRecyclerView.adapter = entrustAdapter + entrustAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: EntrustListModel.DataModel.RowsModel + ) { + navigatePageTo(t.id) + } + }) + } + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt index c7a2e22..076ac4c 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/EquipmentViewModel.kt @@ -12,6 +12,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * 装备、装置相关 VM @@ -26,6 +27,8 @@ val supportEquipmentList = MutableLiveData() val stateChangeResult = MutableLiveData() val usageRecordResult = MutableLiveData() + val remindEquipmentCount = MutableLiveData() + val remindDeviceCount = MutableLiveData() fun getEquipmentList( equipmentNo: String, @@ -211,4 +214,34 @@ it.cause.toString().show(BaseApplication.get()) it.printStackTrace() }) + + fun getRemindEquipmentCount() = launch({ + val response = RetrofitServiceManager.getRemindEquipmentCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindEquipmentCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + + fun getRemindDeviceCount() = launch({ + val response = RetrofitServiceManager.getRemindDeviceCount() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + remindDeviceCount.value = JSONObject(response) + .getJSONObject("data") + .getInt("remindQuantity") + } else { + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + 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/StatisticsViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt new file mode 100644 index 0000000..665b3be --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/StatisticsViewModel.kt @@ -0,0 +1,32 @@ +package com.casic.xz.meterage.vm + +import com.google.gson.Gson +import com.pengxh.kt.lite.vm.BaseViewModel + +/** + * 业务统计 VM + * */ +class StatisticsViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } +// val capabilityDetail = MutableLiveData() +// +// fun getCapabilityDetail(id: String) = launch({ +// loadState.value = LoadState.Loading +// val response = RetrofitServiceManager.getCapabilityDetail(id) +// val responseCode = response.separateResponseCode() +// if (responseCode == 200) { +// loadState.value = LoadState.Success +// capabilityDetail.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/layout/activity_business_statistics.xml b/app/src/main/res/layout/activity_business_statistics.xml new file mode 100644 index 0000000..ba61145 --- /dev/null +++ b/app/src/main/res/layout/activity_business_statistics.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_entrust_bs_rv_l.xml b/app/src/main/res/layout/item_entrust_bs_rv_l.xml new file mode 100644 index 0000000..59c6aef --- /dev/null +++ b/app/src/main/res/layout/item_entrust_bs_rv_l.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg new file mode 100644 index 0000000..19fd955 --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/dept_data.jpg Binary files differ diff --git a/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg b/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg new file mode 100644 index 0000000..682ddea --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/device_overtime.jpg Binary files differ diff --git a/app/src/main/res/mipmap-xxxhdpi/equip_overtime.jpg b/app/src/main/res/mipmap-xxxhdpi/equip_overtime.jpg new file mode 100644 index 0000000..694974f --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/equip_overtime.jpg Binary files differ diff --git a/app/src/main/res/mipmap-xxxhdpi/work_time.jpg b/app/src/main/res/mipmap-xxxhdpi/work_time.jpg new file mode 100644 index 0000000..a0cabe6 --- /dev/null +++ b/app/src/main/res/mipmap-xxxhdpi/work_time.jpg Binary files differ