diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index 2f34672..b1bad75 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -7,6 +7,7 @@ import com.casic.xz.meterage.model.ActionResultModel import com.casic.xz.meterage.model.MeterageTrainDetailModel import com.casic.xz.meterage.model.MeterageTrainListModel +import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +24,7 @@ private val gson by lazy { Gson() } val meterageTrainList = MutableLiveData() val meterageTrainDetail = MutableLiveData() + val staffList = MutableLiveData() val signInResult = MutableLiveData() fun getMeterageTrainList( @@ -89,6 +91,25 @@ it.printStackTrace() }) + fun getStaffList(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getStaffList(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + staffList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + fun signIn(staffId: String, planId: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.signIn(staffId, planId) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index 2f34672..b1bad75 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -7,6 +7,7 @@ import com.casic.xz.meterage.model.ActionResultModel import com.casic.xz.meterage.model.MeterageTrainDetailModel import com.casic.xz.meterage.model.MeterageTrainListModel +import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +24,7 @@ private val gson by lazy { Gson() } val meterageTrainList = MutableLiveData() val meterageTrainDetail = MutableLiveData() + val staffList = MutableLiveData() val signInResult = MutableLiveData() fun getMeterageTrainList( @@ -89,6 +91,25 @@ it.printStackTrace() }) + fun getStaffList(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getStaffList(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + staffList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + fun signIn(staffId: String, planId: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.signIn(staffId, planId) diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_all.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index 2f34672..b1bad75 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -7,6 +7,7 @@ import com.casic.xz.meterage.model.ActionResultModel import com.casic.xz.meterage.model.MeterageTrainDetailModel import com.casic.xz.meterage.model.MeterageTrainListModel +import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +24,7 @@ private val gson by lazy { Gson() } val meterageTrainList = MutableLiveData() val meterageTrainDetail = MutableLiveData() + val staffList = MutableLiveData() val signInResult = MutableLiveData() fun getMeterageTrainList( @@ -89,6 +91,25 @@ it.printStackTrace() }) + fun getStaffList(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getStaffList(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + staffList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + fun signIn(staffId: String, planId: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.signIn(staffId, planId) diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_all.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml deleted file mode 100644 index 7e90433..0000000 --- a/app/src/main/res/layout/activity_search_all_reasult.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index 2f34672..b1bad75 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -7,6 +7,7 @@ import com.casic.xz.meterage.model.ActionResultModel import com.casic.xz.meterage.model.MeterageTrainDetailModel import com.casic.xz.meterage.model.MeterageTrainListModel +import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +24,7 @@ private val gson by lazy { Gson() } val meterageTrainList = MutableLiveData() val meterageTrainDetail = MutableLiveData() + val staffList = MutableLiveData() val signInResult = MutableLiveData() fun getMeterageTrainList( @@ -89,6 +91,25 @@ it.printStackTrace() }) + fun getStaffList(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getStaffList(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + staffList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + fun signIn(staffId: String, planId: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.signIn(staffId, planId) diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_all.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml deleted file mode 100644 index 7e90433..0000000 --- a/app/src/main/res/layout/activity_search_all_reasult.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_global.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index 2f34672..b1bad75 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -7,6 +7,7 @@ import com.casic.xz.meterage.model.ActionResultModel import com.casic.xz.meterage.model.MeterageTrainDetailModel import com.casic.xz.meterage.model.MeterageTrainListModel +import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +24,7 @@ private val gson by lazy { Gson() } val meterageTrainList = MutableLiveData() val meterageTrainDetail = MutableLiveData() + val staffList = MutableLiveData() val signInResult = MutableLiveData() fun getMeterageTrainList( @@ -89,6 +91,25 @@ it.printStackTrace() }) + fun getStaffList(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getStaffList(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + staffList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + fun signIn(staffId: String, planId: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.signIn(staffId, planId) diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_all.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml deleted file mode 100644 index 7e90433..0000000 --- a/app/src/main/res/layout/activity_search_all_reasult.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_global.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global_reasult.xml b/app/src/main/res/layout/activity_search_global_reasult.xml new file mode 100644 index 0000000..5df6cc5 --- /dev/null +++ b/app/src/main/res/layout/activity_search_global_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 099eb12..dfce544 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,8 +70,8 @@ - - + + 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 ae7f5e4..4c93023 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 @@ -20,7 +20,7 @@ import com.casic.xz.meterage.utils.QrConfigCreator import com.casic.xz.meterage.view.home.* import com.casic.xz.meterage.view.notice.NoticeListActivity -import com.casic.xz.meterage.view.search.SearchAllActivity +import com.casic.xz.meterage.view.search.SearchGlobalActivity import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.casic.xz.meterage.vm.NoticeViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -286,7 +286,7 @@ override fun initEvent() { searchBar.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } scanCodeView.setOnClickListener { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index 70f9da3..f42d017 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -4,7 +4,7 @@ import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.vm.MeterageStaffViewModel +import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment @@ -12,12 +12,12 @@ class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { - private lateinit var staffViewModel: MeterageStaffViewModel + private lateinit var trainViewModel: MeterageTrainViewModel override fun initData() { - staffViewModel = ViewModelProvider(this)[MeterageStaffViewModel::class.java] - staffViewModel.getStaffList(id) - staffViewModel.staffList.observe(this) { + trainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java] + trainViewModel.getStaffList(id) + trainViewModel.staffList.observe(this) { if (it.code == 200) { val staffAdapter = object : NormalRecyclerAdapter( diff --git a/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java new file mode 100644 index 0000000..c67f743 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/model/GlobalResultModel.java @@ -0,0 +1,103 @@ +package com.casic.xz.meterage.model; + +import java.util.List; + +public class GlobalResultModel { + + private int code; + private DataModel data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String assetName; + private String assetNo; + private String assetType; + private String assetTypeName; + private String id; + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetNo() { + return assetNo; + } + + public void setAssetNo(String assetNo) { + this.assetNo = assetNo; + } + + public String getAssetType() { + return assetType; + } + + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getAssetTypeName() { + return assetTypeName; + } + + public void setAssetTypeName(String assetTypeName) { + this.assetTypeName = assetTypeName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } +} 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 37bfd4e..98f7eae 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 @@ -384,4 +384,15 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 全局搜索 + */ + @POST("/meter/assets/queryEquipment") + suspend fun getGlobalSearchResult( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String } \ No newline at end of file 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 ea5d73d..269f5ec 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 @@ -857,4 +857,35 @@ ) return api.submit(AuthenticationHelper.token!!, requestBody) } + + /** + * 全局搜索 + */ + suspend fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ): String { + val param = JsonObject() + param.addProperty("id", id) + param.addProperty("assetName", assetName) + param.addProperty("assetNo", assetNo) + param.addProperty("assetType", assetType) + param.addProperty("assetTypeName", assetTypeName) + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.getGlobalSearchResult( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt deleted file mode 100644 index 97202b9..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.casic.xz.meterage.view.search - -import android.view.LayoutInflater -import android.view.View -import com.casic.xz.meterage.R -import com.casic.xz.meterage.bean.SearchHistoryBean -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.DataBaseManager -import com.casic.xz.meterage.utils.SearchType -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog -import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_search_all.* -import kotlinx.android.synthetic.main.include_search_input_title.* - -class SearchAllActivity : KotlinBaseActivity() { - - private lateinit var inflater: LayoutInflater - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var historyAdapter: TagAdapter - private var dataBeans: MutableList = ArrayList() - private var isRefresh = false - - override fun initData() { - inflater = LayoutInflater.from(this) - weakReferenceHandler = WeakReferenceHandler { - if (it.what == 2023031106) { - if (isRefresh) { - historyAdapter.notifyDataChanged() - } else { - historyAdapter = object : TagAdapter(dataBeans) { - override fun getView( - parent: FlowLayout?, position: Int, bean: SearchHistoryBean - ): View { - val tagView = inflater.inflate( - R.layout.item_search_rv_l, tagFlowLayout, false - ) as QMUIRoundButton - tagView.text = bean.keywords - return tagView - } - } - tagFlowLayout.adapter = historyAdapter - tagFlowLayout.setOnTagClickListener { _, position, _ -> - inputView.setText(dataBeans[position].keywords) - navigatePageTo(inputView.text.toString()) - true - } - } - } - true - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - searchTextView.setOnClickListener { - if (!inputView.text.isNullOrBlank()) { - DataBaseManager.get.addSearchHistory( - inputView.text.toString(), SearchType.All - ) - } - - navigatePageTo(inputView.text.toString()) - } - - deleteHistoryView.setOnClickListener { - AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("确定将所有搜索记录删除?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onCancelClick() { - - } - - override fun onConfirmClick() { - DataBaseManager.get.deleteHistoryByType(SearchType.All) - dataBeans.clear() - historyAdapter.notifyDataChanged() - } - }).build().show() - } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - inputView.hint = "查询仪器设备、样品" - } - - override fun onResume() { - super.onResume() - dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) - weakReferenceHandler.sendEmptyMessage(2023031106) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt deleted file mode 100644 index adbb570..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.casic.xz.meterage.view.search - -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant -import kotlinx.android.synthetic.main.activity_search_all_reasult.* -import kotlinx.android.synthetic.main.include_search_title.* - -class SearchAllResultActivity : KotlinBaseActivity() { - - private lateinit var param: String - - override fun initData() { - param = intent.getStringExtra(Constant.INTENT_PARAM)!! - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - } - - override fun initLayoutView(): Int = R.layout.activity_search_all_reasult - - override fun observeRequestState() { - - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "查询结果" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt new file mode 100644 index 0000000..d18d0d2 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalActivity.kt @@ -0,0 +1,110 @@ +package com.casic.xz.meterage.view.search + +import android.view.LayoutInflater +import android.view.View +import com.casic.xz.meterage.R +import com.casic.xz.meterage.bean.SearchHistoryBean +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.DataBaseManager +import com.casic.xz.meterage.utils.SearchType +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_search_global.* +import kotlinx.android.synthetic.main.include_search_input_title.* + +class SearchGlobalActivity : KotlinBaseActivity() { + + private lateinit var inflater: LayoutInflater + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var historyAdapter: TagAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false + + override fun initData() { + inflater = LayoutInflater.from(this) + weakReferenceHandler = WeakReferenceHandler { + if (it.what == 2023031106) { + if (isRefresh) { + historyAdapter.notifyDataChanged() + } else { + historyAdapter = object : TagAdapter(dataBeans) { + override fun getView( + parent: FlowLayout?, position: Int, bean: SearchHistoryBean + ): View { + val tagView = inflater.inflate( + R.layout.item_search_rv_l, tagFlowLayout, false + ) as QMUIRoundButton + tagView.text = bean.keywords + return tagView + } + } + tagFlowLayout.adapter = historyAdapter + tagFlowLayout.setOnTagClickListener { _, position, _ -> + inputView.setText(dataBeans[position].keywords) + navigatePageTo(inputView.text.toString()) + true + } + } + } + true + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + searchTextView.setOnClickListener { + if (!inputView.text.isNullOrBlank()) { + DataBaseManager.get.addSearchHistory( + inputView.text.toString(), SearchType.All + ) + } + + navigatePageTo(inputView.text.toString()) + } + + deleteHistoryView.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定将所有搜索记录删除?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + DataBaseManager.get.deleteHistoryByType(SearchType.All) + dataBeans.clear() + historyAdapter.notifyDataChanged() + } + }).build().show() + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + inputView.hint = "查询仪器设备、样品" + } + + override fun onResume() { + super.onResume() + dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.All) + weakReferenceHandler.sendEmptyMessage(2023031106) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt new file mode 100644 index 0000000..3f60353 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchGlobalResultActivity.kt @@ -0,0 +1,185 @@ +package com.casic.xz.meterage.view.search + +import android.content.Context +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.showEmptyPage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.AppMemoryCache +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.vm.GlobalSearchViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_search_global_reasult.* +import kotlinx.android.synthetic.main.include_empty_view.* +import kotlinx.android.synthetic.main.include_search_title.* + +class SearchGlobalResultActivity : KotlinBaseActivity() { + + private val context: Context = this@SearchGlobalResultActivity + private lateinit var param: String + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchViewModel: GlobalSearchViewModel + private lateinit var globalResultAdapter: NormalRecyclerAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initData() { + param = intent.getStringExtra(Constant.INTENT_PARAM)!! + + weakReferenceHandler = WeakReferenceHandler(callback) + searchViewModel = ViewModelProvider(this)[GlobalSearchViewModel::class.java] + searchViewModel.globalSearchResult.observe(this) { + if (it.code == 200) { + val dataRows = it.data?.rows!! + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows + searchGlobalLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows) + searchGlobalLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows + } + } + weakReferenceHandler.sendEmptyMessage(2023031401) + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + searchGlobalLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + getGlobalSearchResult() + } + + searchGlobalLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + getGlobalSearchResult() + } + } + + override fun onResume() { + super.onResume() + pageIndex = 1 + getGlobalSearchResult() + } + + private fun getGlobalSearchResult() { + if (param.length < 4) { + //输入参数长度小于4,默认查名称 + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } else { + if (AppMemoryCache.prefixCode.contains(param.substring(0, 4))) { + searchViewModel.getGlobalSearchResult( + "", "", param, "", "", pageIndex + ) + } else { + searchViewModel.getGlobalSearchResult( + "", param, "", "", "", pageIndex + ) + } + } + } + + override fun initLayoutView(): Int = R.layout.activity_search_global_reasult + + override fun observeRequestState() { + searchViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + } + } + + private val callback = Handler.Callback { + when (it.what) { + 2023031401 -> { + if (isRefresh || isLoadMore) { + globalResultAdapter.notifyDataSetChanged() + } else { + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage("无数据") { + pageIndex = 1 + getGlobalSearchResult() + } + } else { + emptyView!!.hide() + globalResultAdapter = object : + NormalRecyclerAdapter( + R.layout.item_global_search_rv_l, dataBeans + ) { + override fun convertView( + viewHolder: ViewHolder, + position: Int, + item: GlobalResultModel.DataModel.RowsModel + ) { + if (item.assetTypeName == "样品") { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.green.convertColor(context) + ) + } else { + viewHolder.setBackgroundColor( + R.id.itemTypeView, R.color.purple_500.convertColor(context) + ) + } + + viewHolder.setText(R.id.itemNameView, item.assetName) + .setText(R.id.itemTypeView, item.assetTypeName) + .setText(R.id.codeView, "编号:${item.assetNo}") + } + } + searchGlobalRecyclerView.addItemDecoration( + DividerItemDecoration(this, DividerItemDecoration.VERTICAL) + ) + searchGlobalRecyclerView.adapter = globalResultAdapter + globalResultAdapter.setOnItemClickedListener(object : + NormalRecyclerAdapter.OnItemClickedListener { + override fun onItemClicked( + position: Int, t: GlobalResultModel.DataModel.RowsModel + ) { +// navigatePageTo(item.id) + } + }) + } + } + } + } + true + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "查询结果" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt new file mode 100644 index 0000000..f9a4f4b --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/vm/GlobalSearchViewModel.kt @@ -0,0 +1,52 @@ +package com.casic.xz.meterage.vm; + +import androidx.lifecycle.MutableLiveData +import com.casic.xz.meterage.base.BaseApplication +import com.casic.xz.meterage.extensions.separateResponseCode +import com.casic.xz.meterage.extensions.toErrorMessage +import com.casic.xz.meterage.model.GlobalResultModel +import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel +import com.pengxh.kt.lite.vm.LoadState + +/** + * 全局搜索 VM + * */ +class GlobalSearchViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + + val globalSearchResult = MutableLiveData() + + fun getGlobalSearchResult( + id: String, + assetName: String, + assetNo: String, + assetType: String, + assetTypeName: String, + offset: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getGlobalSearchResult( + id, assetName, assetNo, assetType, assetTypeName, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + globalSearchResult.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() + }) +} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt deleted file mode 100644 index d095ee3..0000000 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageStaffViewModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.casic.xz.meterage.vm; - -import androidx.lifecycle.MutableLiveData -import com.casic.xz.meterage.base.BaseApplication -import com.casic.xz.meterage.extensions.separateResponseCode -import com.casic.xz.meterage.extensions.toErrorMessage -import com.casic.xz.meterage.model.StaffListModel -import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.BaseViewModel -import com.pengxh.kt.lite.vm.LoadState - -/** - * 计量人员 VM - * */ -class MeterageStaffViewModel : BaseViewModel() { - - private val gson by lazy { Gson() } - val staffList = MutableLiveData() - - fun getStaffList(id: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.getStaffList(id) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - staffList.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() - }) -} diff --git a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt index 2f34672..b1bad75 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/MeterageTrainViewModel.kt @@ -7,6 +7,7 @@ import com.casic.xz.meterage.model.ActionResultModel import com.casic.xz.meterage.model.MeterageTrainDetailModel import com.casic.xz.meterage.model.MeterageTrainListModel +import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -23,6 +24,7 @@ private val gson by lazy { Gson() } val meterageTrainList = MutableLiveData() val meterageTrainDetail = MutableLiveData() + val staffList = MutableLiveData() val signInResult = MutableLiveData() fun getMeterageTrainList( @@ -89,6 +91,25 @@ it.printStackTrace() }) + fun getStaffList(id: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getStaffList(id) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + staffList.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.cause.toString().show(BaseApplication.get()) + it.printStackTrace() + }) + fun signIn(staffId: String, planId: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.signIn(staffId, planId) diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml deleted file mode 100644 index 93ed590..0000000 --- a/app/src/main/res/layout/activity_search_all.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml deleted file mode 100644 index 7e90433..0000000 --- a/app/src/main/res/layout/activity_search_all_reasult.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global.xml b/app/src/main/res/layout/activity_search_global.xml new file mode 100644 index 0000000..93ed590 --- /dev/null +++ b/app/src/main/res/layout/activity_search_global.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_global_reasult.xml b/app/src/main/res/layout/activity_search_global_reasult.xml new file mode 100644 index 0000000..5df6cc5 --- /dev/null +++ b/app/src/main/res/layout/activity_search_global_reasult.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_global_search_rv_l.xml b/app/src/main/res/layout/item_global_search_rv_l.xml new file mode 100644 index 0000000..0943283 --- /dev/null +++ b/app/src/main/res/layout/item_global_search_rv_l.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + \ No newline at end of file