diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baf8963..8e512ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baf8963..8e512ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + diff --git a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt index 6092187..884dc51 100644 --- a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt @@ -4,7 +4,7 @@ import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.TopViewPagerAdapter import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.view.SearchWorkOrderActivity +import com.casic.app.smartwell.view.SearchOrderActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_order.* @@ -41,7 +41,7 @@ override fun initEvent() { rightOptionView.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baf8963..8e512ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + diff --git a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt index 6092187..884dc51 100644 --- a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt @@ -4,7 +4,7 @@ import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.TopViewPagerAdapter import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.view.SearchWorkOrderActivity +import com.casic.app.smartwell.view.SearchOrderActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_order.* @@ -41,7 +41,7 @@ override fun initEvent() { rightOptionView.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt new file mode 100644 index 0000000..1a1c587 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt @@ -0,0 +1,216 @@ +package com.casic.app.smartwell.view + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.widget.TextView +import androidx.lifecycle.ViewModelProvider +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.* +import com.casic.app.smartwell.model.AlarmContentTypeModel +import com.casic.app.smartwell.model.OrderStatusModel +import com.casic.app.smartwell.utils.LocaleConstant +import com.casic.app.smartwell.vm.AlarmContentTypeViewModel +import com.casic.app.smartwell.vm.WorkOrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_order_search.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class SearchOrderActivity : KotlinBaseActivity() { + + private lateinit var contentTypeViewModel: AlarmContentTypeViewModel + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var inflater: LayoutInflater + private lateinit var contentTypeAdapter: TagAdapter + private lateinit var orderStatusAdapter: TagAdapter + private val context: Context = this@SearchOrderActivity + private var contentModels: MutableList = ArrayList() + private var orderStatusModels: MutableList = ArrayList() + private var alarmContentType = "" + private var alarmLevel = "" + private var orderState = "" + + override fun initLayoutView(): Int = R.layout.activity_order_search + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单查询" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + inflater = LayoutInflater.from(this) + //告警内容 + contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + //工单状态 + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + } + + override fun initEvent() { + contentTypeViewModel.obtainAlarmContentType(alarmType = "1") + contentTypeViewModel.listModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = AlarmContentTypeModel.DataBean.ListBean() + bean.value = "" + bean.name = "全部" + bean.alarmType = "" + bean.deviceType = "" + contentModels.add(bean) + it.data!!.list?.forEach { contentTypeBean -> + contentModels.add(contentTypeBean) + } + contentTypeAdapter = + object : TagAdapter(contentModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: AlarmContentTypeModel.DataBean.ListBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmContentLayout, false + ) as TextView + tagView.text = contentModels[position].name + return tagView + } + } + alarmContentLayout.adapter = contentTypeAdapter + contentTypeAdapter.setSelectedList(0) + alarmContentLayout.setOnTagClickListener { _, position, _ -> + this.alarmContentType = contentModels[position].value.toString() + true + } + } + }) + + val levelMaps: MutableList> = ArrayList() + for (i in 0..3) { + val map = HashMap() + map["name"] = i.toString().toChinese() + map["value"] = i.toLevel() + levelMaps.add(map) + } + val levelAdapter = object : TagAdapter>(levelMaps) { + override fun getView( + parent: FlowLayout?, + position: Int, map: Map? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmLevelLayout, false + ) as TextView + tagView.text = levelMaps[position]["name"] + return tagView + } + } + alarmLevelLayout.adapter = levelAdapter + levelAdapter.setSelectedList(0) + alarmLevelLayout.setOnTagClickListener { _, position, _ -> + this.alarmLevel = levelMaps[position]["value"].toString() + true + } + + workOrderViewModel.obtainOrderStatus() + workOrderViewModel.orderStatusModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = OrderStatusModel.DataBean() + bean.name = "全部" + bean.id = "" + bean.value = "" + orderStatusModels.add(bean) + it.data!!.forEach { statusBean -> + orderStatusModels.add(statusBean) + } + orderStatusAdapter = + object : TagAdapter(orderStatusModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: OrderStatusModel.DataBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + orderStatusLayout, false + ) as TextView + tagView.text = orderStatusModels[position].name + return tagView + } + } + orderStatusLayout.adapter = orderStatusAdapter + orderStatusAdapter.setSelectedList(0) + orderStatusLayout.setOnTagClickListener { _, position, _ -> + this.orderState = orderStatusModels[position].value.toString() + true + } + } + }) + + startTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择开始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + endTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择结束时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + if (millSeconds.isEarlierThanStart(startTimeView.text.toString())) { + "结束时间不合法,不能早于开始时间".show(context) + return@setCallBack + } + endTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + addAll( + wellCodeView.text.toString().trim(), + alarmContentType, + alarmLevel, + orderState, + startTimeView.text.toString(), + endTimeView.text.toString() + ) + ) + } + + clearButton.setOnClickListener { + wellCodeView.text?.clear() + contentTypeAdapter.setSelectedList(0) + levelAdapter.setSelectedList(0) + orderStatusAdapter.setSelectedList(0) + startTimeView.text = "" + endTimeView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baf8963..8e512ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + diff --git a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt index 6092187..884dc51 100644 --- a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt @@ -4,7 +4,7 @@ import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.TopViewPagerAdapter import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.view.SearchWorkOrderActivity +import com.casic.app.smartwell.view.SearchOrderActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_order.* @@ -41,7 +41,7 @@ override fun initEvent() { rightOptionView.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt new file mode 100644 index 0000000..1a1c587 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt @@ -0,0 +1,216 @@ +package com.casic.app.smartwell.view + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.widget.TextView +import androidx.lifecycle.ViewModelProvider +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.* +import com.casic.app.smartwell.model.AlarmContentTypeModel +import com.casic.app.smartwell.model.OrderStatusModel +import com.casic.app.smartwell.utils.LocaleConstant +import com.casic.app.smartwell.vm.AlarmContentTypeViewModel +import com.casic.app.smartwell.vm.WorkOrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_order_search.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class SearchOrderActivity : KotlinBaseActivity() { + + private lateinit var contentTypeViewModel: AlarmContentTypeViewModel + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var inflater: LayoutInflater + private lateinit var contentTypeAdapter: TagAdapter + private lateinit var orderStatusAdapter: TagAdapter + private val context: Context = this@SearchOrderActivity + private var contentModels: MutableList = ArrayList() + private var orderStatusModels: MutableList = ArrayList() + private var alarmContentType = "" + private var alarmLevel = "" + private var orderState = "" + + override fun initLayoutView(): Int = R.layout.activity_order_search + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单查询" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + inflater = LayoutInflater.from(this) + //告警内容 + contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + //工单状态 + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + } + + override fun initEvent() { + contentTypeViewModel.obtainAlarmContentType(alarmType = "1") + contentTypeViewModel.listModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = AlarmContentTypeModel.DataBean.ListBean() + bean.value = "" + bean.name = "全部" + bean.alarmType = "" + bean.deviceType = "" + contentModels.add(bean) + it.data!!.list?.forEach { contentTypeBean -> + contentModels.add(contentTypeBean) + } + contentTypeAdapter = + object : TagAdapter(contentModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: AlarmContentTypeModel.DataBean.ListBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmContentLayout, false + ) as TextView + tagView.text = contentModels[position].name + return tagView + } + } + alarmContentLayout.adapter = contentTypeAdapter + contentTypeAdapter.setSelectedList(0) + alarmContentLayout.setOnTagClickListener { _, position, _ -> + this.alarmContentType = contentModels[position].value.toString() + true + } + } + }) + + val levelMaps: MutableList> = ArrayList() + for (i in 0..3) { + val map = HashMap() + map["name"] = i.toString().toChinese() + map["value"] = i.toLevel() + levelMaps.add(map) + } + val levelAdapter = object : TagAdapter>(levelMaps) { + override fun getView( + parent: FlowLayout?, + position: Int, map: Map? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmLevelLayout, false + ) as TextView + tagView.text = levelMaps[position]["name"] + return tagView + } + } + alarmLevelLayout.adapter = levelAdapter + levelAdapter.setSelectedList(0) + alarmLevelLayout.setOnTagClickListener { _, position, _ -> + this.alarmLevel = levelMaps[position]["value"].toString() + true + } + + workOrderViewModel.obtainOrderStatus() + workOrderViewModel.orderStatusModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = OrderStatusModel.DataBean() + bean.name = "全部" + bean.id = "" + bean.value = "" + orderStatusModels.add(bean) + it.data!!.forEach { statusBean -> + orderStatusModels.add(statusBean) + } + orderStatusAdapter = + object : TagAdapter(orderStatusModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: OrderStatusModel.DataBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + orderStatusLayout, false + ) as TextView + tagView.text = orderStatusModels[position].name + return tagView + } + } + orderStatusLayout.adapter = orderStatusAdapter + orderStatusAdapter.setSelectedList(0) + orderStatusLayout.setOnTagClickListener { _, position, _ -> + this.orderState = orderStatusModels[position].value.toString() + true + } + } + }) + + startTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择开始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + endTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择结束时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + if (millSeconds.isEarlierThanStart(startTimeView.text.toString())) { + "结束时间不合法,不能早于开始时间".show(context) + return@setCallBack + } + endTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + addAll( + wellCodeView.text.toString().trim(), + alarmContentType, + alarmLevel, + orderState, + startTimeView.text.toString(), + endTimeView.text.toString() + ) + ) + } + + clearButton.setOnClickListener { + wellCodeView.text?.clear() + contentTypeAdapter.setSelectedList(0) + levelAdapter.setSelectedList(0) + orderStatusAdapter.setSelectedList(0) + startTimeView.text = "" + endTimeView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt index 0afdda1..ada7e69 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt @@ -40,6 +40,7 @@ private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.activity_order_search_result @@ -117,8 +118,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷行数据 - weakReferenceHandler.sendEmptyMessage(2022040102) + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + searchResultAdapter.notifyItemRemoved(clickedPosition) + searchResultAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -153,74 +158,69 @@ } private val callback = Handler.Callback { - when (it.what) { - 2022040102 -> { - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - 2022040101 -> { - if (isRefresh || isLoadMore) { - searchResultAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView!!.showEmptyPage { - obtainSearchResult(args, pageIndex) - } - } else { - emptyView!!.hide() - searchResultAdapter = SearchResultAdapter(this, dataBeans) - resultRecyclerView!!.layoutManager = LinearLayoutManager(this) - resultRecyclerView!!.adapter = searchResultAdapter - searchResultAdapter.setOnItemClickListener(object : - SearchResultAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(context) - return - } - if (dataBeans[position].jobStatus == "0") { - navigatePageTo(jobId) - } else { - navigatePageTo(jobId) - } - } - - override fun onOperationClicked(position: Int) { - AlertControlDialog.Builder() - .setContext(this@SearchResultActivity) - .setTitle("操作提示") - .setMessage("确定要接单吗") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单ID异常,无法接单".show(context) - return - } - operationViewModel.acceptWorkOrder(jobId) - } - - override fun onCancelClick() { - - } - }).build().show() - } - - override fun onTransferViewClicked(position: Int) { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(context) - return - } - workOrderViewModel.obtainWorkOrderDetail(jobId) - } - }) + if (it.what == 2022040101) { + if (isRefresh || isLoadMore) { + searchResultAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + obtainSearchResult(args, pageIndex) } + } else { + emptyView!!.hide() + searchResultAdapter = SearchResultAdapter(this, dataBeans) + resultRecyclerView!!.layoutManager = LinearLayoutManager(this) + resultRecyclerView!!.adapter = searchResultAdapter + searchResultAdapter.setOnItemClickListener(object : + SearchResultAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(context) + return + } + if (dataBeans[position].jobStatus == "0") { + navigatePageTo(jobId) + } else { + navigatePageTo(jobId) + } + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@SearchResultActivity) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + override fun onTransferViewClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(context) + return + } + workOrderViewModel.obtainWorkOrderDetail(jobId) + } + }) } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baf8963..8e512ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + diff --git a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt index 6092187..884dc51 100644 --- a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt @@ -4,7 +4,7 @@ import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.TopViewPagerAdapter import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.view.SearchWorkOrderActivity +import com.casic.app.smartwell.view.SearchOrderActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_order.* @@ -41,7 +41,7 @@ override fun initEvent() { rightOptionView.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt new file mode 100644 index 0000000..1a1c587 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt @@ -0,0 +1,216 @@ +package com.casic.app.smartwell.view + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.widget.TextView +import androidx.lifecycle.ViewModelProvider +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.* +import com.casic.app.smartwell.model.AlarmContentTypeModel +import com.casic.app.smartwell.model.OrderStatusModel +import com.casic.app.smartwell.utils.LocaleConstant +import com.casic.app.smartwell.vm.AlarmContentTypeViewModel +import com.casic.app.smartwell.vm.WorkOrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_order_search.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class SearchOrderActivity : KotlinBaseActivity() { + + private lateinit var contentTypeViewModel: AlarmContentTypeViewModel + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var inflater: LayoutInflater + private lateinit var contentTypeAdapter: TagAdapter + private lateinit var orderStatusAdapter: TagAdapter + private val context: Context = this@SearchOrderActivity + private var contentModels: MutableList = ArrayList() + private var orderStatusModels: MutableList = ArrayList() + private var alarmContentType = "" + private var alarmLevel = "" + private var orderState = "" + + override fun initLayoutView(): Int = R.layout.activity_order_search + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单查询" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + inflater = LayoutInflater.from(this) + //告警内容 + contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + //工单状态 + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + } + + override fun initEvent() { + contentTypeViewModel.obtainAlarmContentType(alarmType = "1") + contentTypeViewModel.listModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = AlarmContentTypeModel.DataBean.ListBean() + bean.value = "" + bean.name = "全部" + bean.alarmType = "" + bean.deviceType = "" + contentModels.add(bean) + it.data!!.list?.forEach { contentTypeBean -> + contentModels.add(contentTypeBean) + } + contentTypeAdapter = + object : TagAdapter(contentModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: AlarmContentTypeModel.DataBean.ListBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmContentLayout, false + ) as TextView + tagView.text = contentModels[position].name + return tagView + } + } + alarmContentLayout.adapter = contentTypeAdapter + contentTypeAdapter.setSelectedList(0) + alarmContentLayout.setOnTagClickListener { _, position, _ -> + this.alarmContentType = contentModels[position].value.toString() + true + } + } + }) + + val levelMaps: MutableList> = ArrayList() + for (i in 0..3) { + val map = HashMap() + map["name"] = i.toString().toChinese() + map["value"] = i.toLevel() + levelMaps.add(map) + } + val levelAdapter = object : TagAdapter>(levelMaps) { + override fun getView( + parent: FlowLayout?, + position: Int, map: Map? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmLevelLayout, false + ) as TextView + tagView.text = levelMaps[position]["name"] + return tagView + } + } + alarmLevelLayout.adapter = levelAdapter + levelAdapter.setSelectedList(0) + alarmLevelLayout.setOnTagClickListener { _, position, _ -> + this.alarmLevel = levelMaps[position]["value"].toString() + true + } + + workOrderViewModel.obtainOrderStatus() + workOrderViewModel.orderStatusModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = OrderStatusModel.DataBean() + bean.name = "全部" + bean.id = "" + bean.value = "" + orderStatusModels.add(bean) + it.data!!.forEach { statusBean -> + orderStatusModels.add(statusBean) + } + orderStatusAdapter = + object : TagAdapter(orderStatusModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: OrderStatusModel.DataBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + orderStatusLayout, false + ) as TextView + tagView.text = orderStatusModels[position].name + return tagView + } + } + orderStatusLayout.adapter = orderStatusAdapter + orderStatusAdapter.setSelectedList(0) + orderStatusLayout.setOnTagClickListener { _, position, _ -> + this.orderState = orderStatusModels[position].value.toString() + true + } + } + }) + + startTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择开始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + endTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择结束时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + if (millSeconds.isEarlierThanStart(startTimeView.text.toString())) { + "结束时间不合法,不能早于开始时间".show(context) + return@setCallBack + } + endTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + addAll( + wellCodeView.text.toString().trim(), + alarmContentType, + alarmLevel, + orderState, + startTimeView.text.toString(), + endTimeView.text.toString() + ) + ) + } + + clearButton.setOnClickListener { + wellCodeView.text?.clear() + contentTypeAdapter.setSelectedList(0) + levelAdapter.setSelectedList(0) + orderStatusAdapter.setSelectedList(0) + startTimeView.text = "" + endTimeView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt index 0afdda1..ada7e69 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt @@ -40,6 +40,7 @@ private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.activity_order_search_result @@ -117,8 +118,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷行数据 - weakReferenceHandler.sendEmptyMessage(2022040102) + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + searchResultAdapter.notifyItemRemoved(clickedPosition) + searchResultAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -153,74 +158,69 @@ } private val callback = Handler.Callback { - when (it.what) { - 2022040102 -> { - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - 2022040101 -> { - if (isRefresh || isLoadMore) { - searchResultAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView!!.showEmptyPage { - obtainSearchResult(args, pageIndex) - } - } else { - emptyView!!.hide() - searchResultAdapter = SearchResultAdapter(this, dataBeans) - resultRecyclerView!!.layoutManager = LinearLayoutManager(this) - resultRecyclerView!!.adapter = searchResultAdapter - searchResultAdapter.setOnItemClickListener(object : - SearchResultAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(context) - return - } - if (dataBeans[position].jobStatus == "0") { - navigatePageTo(jobId) - } else { - navigatePageTo(jobId) - } - } - - override fun onOperationClicked(position: Int) { - AlertControlDialog.Builder() - .setContext(this@SearchResultActivity) - .setTitle("操作提示") - .setMessage("确定要接单吗") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单ID异常,无法接单".show(context) - return - } - operationViewModel.acceptWorkOrder(jobId) - } - - override fun onCancelClick() { - - } - }).build().show() - } - - override fun onTransferViewClicked(position: Int) { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(context) - return - } - workOrderViewModel.obtainWorkOrderDetail(jobId) - } - }) + if (it.what == 2022040101) { + if (isRefresh || isLoadMore) { + searchResultAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + obtainSearchResult(args, pageIndex) } + } else { + emptyView!!.hide() + searchResultAdapter = SearchResultAdapter(this, dataBeans) + resultRecyclerView!!.layoutManager = LinearLayoutManager(this) + resultRecyclerView!!.adapter = searchResultAdapter + searchResultAdapter.setOnItemClickListener(object : + SearchResultAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(context) + return + } + if (dataBeans[position].jobStatus == "0") { + navigatePageTo(jobId) + } else { + navigatePageTo(jobId) + } + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@SearchResultActivity) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + override fun onTransferViewClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(context) + return + } + workOrderViewModel.obtainWorkOrderDetail(jobId) + } + }) } } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt deleted file mode 100644 index 2968ceb..0000000 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ /dev/null @@ -1,216 +0,0 @@ -package com.casic.app.smartwell.view - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.widget.TextView -import androidx.lifecycle.ViewModelProvider -import com.casic.app.smartwell.R -import com.casic.app.smartwell.extensions.* -import com.casic.app.smartwell.model.AlarmContentTypeModel -import com.casic.app.smartwell.model.OrderStatusModel -import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.vm.AlarmContentTypeViewModel -import com.casic.app.smartwell.vm.WorkOrderViewModel -import com.gyf.immersionbar.ImmersionBar -import com.jzxiang.pickerview.TimePickerDialog -import com.jzxiang.pickerview.data.Type -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_order_search.* -import kotlinx.android.synthetic.main.include_base_title.* - - -class SearchWorkOrderActivity : KotlinBaseActivity() { - - private lateinit var contentTypeViewModel: AlarmContentTypeViewModel - private lateinit var workOrderViewModel: WorkOrderViewModel - private lateinit var inflater: LayoutInflater - private lateinit var contentTypeAdapter: TagAdapter - private lateinit var orderStatusAdapter: TagAdapter - private val context: Context = this@SearchWorkOrderActivity - private var contentModels: MutableList = ArrayList() - private var orderStatusModels: MutableList = ArrayList() - private var alarmContentType = "" - private var alarmLevel = "" - private var orderState = "" - - override fun initLayoutView(): Int = R.layout.activity_order_search - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) - - titleView.text = "工单查询" - leftBackView.visibility = View.VISIBLE - leftBackView.setOnClickListener { finish() } - } - - override fun initData() { - inflater = LayoutInflater.from(this) - //告警内容 - contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) - //工单状态 - workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) - } - - override fun initEvent() { - contentTypeViewModel.obtainAlarmContentType(alarmType = "1") - contentTypeViewModel.listModel.observe(this, { - if (it.code == 200) { - //构造一个默认值 - val bean = AlarmContentTypeModel.DataBean.ListBean() - bean.value = "" - bean.name = "全部" - bean.alarmType = "" - bean.deviceType = "" - contentModels.add(bean) - it.data!!.list?.forEach { contentTypeBean -> - contentModels.add(contentTypeBean) - } - contentTypeAdapter = - object : TagAdapter(contentModels) { - override fun getView( - parent: FlowLayout?, - position: Int, bean: AlarmContentTypeModel.DataBean.ListBean? - ): View { - val tagView = inflater.inflate( - R.layout.item_tag_flowlayout, - alarmContentLayout, false - ) as TextView - tagView.text = contentModels[position].name - return tagView - } - } - alarmContentLayout.adapter = contentTypeAdapter - contentTypeAdapter.setSelectedList(0) - alarmContentLayout.setOnTagClickListener { _, position, _ -> - this.alarmContentType = contentModels[position].value.toString() - true - } - } - }) - - val levelMaps: MutableList> = ArrayList() - for (i in 0..3) { - val map = HashMap() - map["name"] = i.toString().toChinese() - map["value"] = i.toLevel() - levelMaps.add(map) - } - val levelAdapter = object : TagAdapter>(levelMaps) { - override fun getView( - parent: FlowLayout?, - position: Int, map: Map? - ): View { - val tagView = inflater.inflate( - R.layout.item_tag_flowlayout, - alarmLevelLayout, false - ) as TextView - tagView.text = levelMaps[position]["name"] - return tagView - } - } - alarmLevelLayout.adapter = levelAdapter - levelAdapter.setSelectedList(0) - alarmLevelLayout.setOnTagClickListener { _, position, _ -> - this.alarmLevel = levelMaps[position]["value"].toString() - true - } - - workOrderViewModel.obtainOrderStatus() - workOrderViewModel.orderStatusModel.observe(this, { - if (it.code == 200) { - //构造一个默认值 - val bean = OrderStatusModel.DataBean() - bean.name = "全部" - bean.id = "" - bean.value = "" - orderStatusModels.add(bean) - it.data!!.forEach { statusBean -> - orderStatusModels.add(statusBean) - } - orderStatusAdapter = - object : TagAdapter(orderStatusModels) { - override fun getView( - parent: FlowLayout?, - position: Int, bean: OrderStatusModel.DataBean? - ): View { - val tagView = inflater.inflate( - R.layout.item_tag_flowlayout, - orderStatusLayout, false - ) as TextView - tagView.text = orderStatusModels[position].name - return tagView - } - } - orderStatusLayout.adapter = orderStatusAdapter - orderStatusAdapter.setSelectedList(0) - orderStatusLayout.setOnTagClickListener { _, position, _ -> - this.orderState = orderStatusModels[position].value.toString() - true - } - } - }) - - startTimeView.setOnClickListener { - TimePickerDialog.Builder() - .setThemeColor(R.color.mainThemeColor.convertColor(this)) - .setTitleStringId("请选择开始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startTimeView.text = millSeconds.timestampToDate() - }.build().show(supportFragmentManager, "year_month_day") - } - - endTimeView.setOnClickListener { - TimePickerDialog.Builder() - .setThemeColor(R.color.mainThemeColor.convertColor(this)) - .setTitleStringId("请选择结束时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - if (millSeconds.isEarlierThanStart(startTimeView.text.toString())) { - "结束时间不合法,不能早于开始时间".show(context) - return@setCallBack - } - endTimeView.text = millSeconds.timestampToDate() - }.build().show(supportFragmentManager, "year_month_day") - } - - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - addAll( - wellCodeView.text.toString().trim(), - alarmContentType, - alarmLevel, - orderState, - startTimeView.text.toString(), - endTimeView.text.toString() - ) - ) - } - - clearButton.setOnClickListener { - wellCodeView.text?.clear() - contentTypeAdapter.setSelectedList(0) - levelAdapter.setSelectedList(0) - orderStatusAdapter.setSelectedList(0) - startTimeView.text = "" - endTimeView.text = "" - } - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baf8963..8e512ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + diff --git a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt index 6092187..884dc51 100644 --- a/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/fragment/OrderListFragment.kt @@ -4,7 +4,7 @@ import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.TopViewPagerAdapter import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.view.SearchWorkOrderActivity +import com.casic.app.smartwell.view.SearchOrderActivity import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_order.* @@ -41,7 +41,7 @@ override fun initEvent() { rightOptionView.setOnClickListener { - requireContext().navigatePageTo() + requireContext().navigatePageTo() } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt new file mode 100644 index 0000000..1a1c587 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchOrderActivity.kt @@ -0,0 +1,216 @@ +package com.casic.app.smartwell.view + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.widget.TextView +import androidx.lifecycle.ViewModelProvider +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.* +import com.casic.app.smartwell.model.AlarmContentTypeModel +import com.casic.app.smartwell.model.OrderStatusModel +import com.casic.app.smartwell.utils.LocaleConstant +import com.casic.app.smartwell.vm.AlarmContentTypeViewModel +import com.casic.app.smartwell.vm.WorkOrderViewModel +import com.gyf.immersionbar.ImmersionBar +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.zhy.view.flowlayout.FlowLayout +import com.zhy.view.flowlayout.TagAdapter +import kotlinx.android.synthetic.main.activity_order_search.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class SearchOrderActivity : KotlinBaseActivity() { + + private lateinit var contentTypeViewModel: AlarmContentTypeViewModel + private lateinit var workOrderViewModel: WorkOrderViewModel + private lateinit var inflater: LayoutInflater + private lateinit var contentTypeAdapter: TagAdapter + private lateinit var orderStatusAdapter: TagAdapter + private val context: Context = this@SearchOrderActivity + private var contentModels: MutableList = ArrayList() + private var orderStatusModels: MutableList = ArrayList() + private var alarmContentType = "" + private var alarmLevel = "" + private var orderState = "" + + override fun initLayoutView(): Int = R.layout.activity_order_search + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + titleView.text = "工单查询" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + inflater = LayoutInflater.from(this) + //告警内容 + contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + //工单状态 + workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) + } + + override fun initEvent() { + contentTypeViewModel.obtainAlarmContentType(alarmType = "1") + contentTypeViewModel.listModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = AlarmContentTypeModel.DataBean.ListBean() + bean.value = "" + bean.name = "全部" + bean.alarmType = "" + bean.deviceType = "" + contentModels.add(bean) + it.data!!.list?.forEach { contentTypeBean -> + contentModels.add(contentTypeBean) + } + contentTypeAdapter = + object : TagAdapter(contentModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: AlarmContentTypeModel.DataBean.ListBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmContentLayout, false + ) as TextView + tagView.text = contentModels[position].name + return tagView + } + } + alarmContentLayout.adapter = contentTypeAdapter + contentTypeAdapter.setSelectedList(0) + alarmContentLayout.setOnTagClickListener { _, position, _ -> + this.alarmContentType = contentModels[position].value.toString() + true + } + } + }) + + val levelMaps: MutableList> = ArrayList() + for (i in 0..3) { + val map = HashMap() + map["name"] = i.toString().toChinese() + map["value"] = i.toLevel() + levelMaps.add(map) + } + val levelAdapter = object : TagAdapter>(levelMaps) { + override fun getView( + parent: FlowLayout?, + position: Int, map: Map? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + alarmLevelLayout, false + ) as TextView + tagView.text = levelMaps[position]["name"] + return tagView + } + } + alarmLevelLayout.adapter = levelAdapter + levelAdapter.setSelectedList(0) + alarmLevelLayout.setOnTagClickListener { _, position, _ -> + this.alarmLevel = levelMaps[position]["value"].toString() + true + } + + workOrderViewModel.obtainOrderStatus() + workOrderViewModel.orderStatusModel.observe(this, { + if (it.code == 200) { + //构造一个默认值 + val bean = OrderStatusModel.DataBean() + bean.name = "全部" + bean.id = "" + bean.value = "" + orderStatusModels.add(bean) + it.data!!.forEach { statusBean -> + orderStatusModels.add(statusBean) + } + orderStatusAdapter = + object : TagAdapter(orderStatusModels) { + override fun getView( + parent: FlowLayout?, + position: Int, bean: OrderStatusModel.DataBean? + ): View { + val tagView = inflater.inflate( + R.layout.item_tag_flowlayout, + orderStatusLayout, false + ) as TextView + tagView.text = orderStatusModels[position].name + return tagView + } + } + orderStatusLayout.adapter = orderStatusAdapter + orderStatusAdapter.setSelectedList(0) + orderStatusLayout.setOnTagClickListener { _, position, _ -> + this.orderState = orderStatusModels[position].value.toString() + true + } + } + }) + + startTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择开始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + endTimeView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor(this)) + .setTitleStringId("请选择结束时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + if (millSeconds.isEarlierThanStart(startTimeView.text.toString())) { + "结束时间不合法,不能早于开始时间".show(context) + return@setCallBack + } + endTimeView.text = millSeconds.timestampToDate() + }.build().show(supportFragmentManager, "year_month_day") + } + + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + addAll( + wellCodeView.text.toString().trim(), + alarmContentType, + alarmLevel, + orderState, + startTimeView.text.toString(), + endTimeView.text.toString() + ) + ) + } + + clearButton.setOnClickListener { + wellCodeView.text?.clear() + contentTypeAdapter.setSelectedList(0) + levelAdapter.setSelectedList(0) + orderStatusAdapter.setSelectedList(0) + startTimeView.text = "" + endTimeView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt index 0afdda1..ada7e69 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchResultActivity.kt @@ -40,6 +40,7 @@ private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false + private var clickedPosition = 0 override fun initLayoutView(): Int = R.layout.activity_order_search_result @@ -117,8 +118,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷行数据 - weakReferenceHandler.sendEmptyMessage(2022040102) + //接单成功之后刷新列表 + dataBeans.removeAt(clickedPosition) + searchResultAdapter.notifyItemRemoved(clickedPosition) + searchResultAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -153,74 +158,69 @@ } private val callback = Handler.Callback { - when (it.what) { - 2022040102 -> { - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - 2022040101 -> { - if (isRefresh || isLoadMore) { - searchResultAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (dataBeans.size == 0) { - emptyView!!.showEmptyPage { - obtainSearchResult(args, pageIndex) - } - } else { - emptyView!!.hide() - searchResultAdapter = SearchResultAdapter(this, dataBeans) - resultRecyclerView!!.layoutManager = LinearLayoutManager(this) - resultRecyclerView!!.adapter = searchResultAdapter - searchResultAdapter.setOnItemClickListener(object : - SearchResultAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(context) - return - } - if (dataBeans[position].jobStatus == "0") { - navigatePageTo(jobId) - } else { - navigatePageTo(jobId) - } - } - - override fun onOperationClicked(position: Int) { - AlertControlDialog.Builder() - .setContext(this@SearchResultActivity) - .setTitle("操作提示") - .setMessage("确定要接单吗") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单ID异常,无法接单".show(context) - return - } - operationViewModel.acceptWorkOrder(jobId) - } - - override fun onCancelClick() { - - } - }).build().show() - } - - override fun onTransferViewClicked(position: Int) { - val jobId = dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(context) - return - } - workOrderViewModel.obtainWorkOrderDetail(jobId) - } - }) + if (it.what == 2022040101) { + if (isRefresh || isLoadMore) { + searchResultAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + obtainSearchResult(args, pageIndex) } + } else { + emptyView!!.hide() + searchResultAdapter = SearchResultAdapter(this, dataBeans) + resultRecyclerView!!.layoutManager = LinearLayoutManager(this) + resultRecyclerView!!.adapter = searchResultAdapter + searchResultAdapter.setOnItemClickListener(object : + SearchResultAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(context) + return + } + if (dataBeans[position].jobStatus == "0") { + navigatePageTo(jobId) + } else { + navigatePageTo(jobId) + } + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@SearchResultActivity) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(context) + return + } + operationViewModel.acceptWorkOrder(jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + + override fun onTransferViewClicked(position: Int) { + val jobId = dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(context) + return + } + workOrderViewModel.obtainWorkOrderDetail(jobId) + } + }) } } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt deleted file mode 100644 index 2968ceb..0000000 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ /dev/null @@ -1,216 +0,0 @@ -package com.casic.app.smartwell.view - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.widget.TextView -import androidx.lifecycle.ViewModelProvider -import com.casic.app.smartwell.R -import com.casic.app.smartwell.extensions.* -import com.casic.app.smartwell.model.AlarmContentTypeModel -import com.casic.app.smartwell.model.OrderStatusModel -import com.casic.app.smartwell.utils.LocaleConstant -import com.casic.app.smartwell.vm.AlarmContentTypeViewModel -import com.casic.app.smartwell.vm.WorkOrderViewModel -import com.gyf.immersionbar.ImmersionBar -import com.jzxiang.pickerview.TimePickerDialog -import com.jzxiang.pickerview.data.Type -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.zhy.view.flowlayout.FlowLayout -import com.zhy.view.flowlayout.TagAdapter -import kotlinx.android.synthetic.main.activity_order_search.* -import kotlinx.android.synthetic.main.include_base_title.* - - -class SearchWorkOrderActivity : KotlinBaseActivity() { - - private lateinit var contentTypeViewModel: AlarmContentTypeViewModel - private lateinit var workOrderViewModel: WorkOrderViewModel - private lateinit var inflater: LayoutInflater - private lateinit var contentTypeAdapter: TagAdapter - private lateinit var orderStatusAdapter: TagAdapter - private val context: Context = this@SearchWorkOrderActivity - private var contentModels: MutableList = ArrayList() - private var orderStatusModels: MutableList = ArrayList() - private var alarmContentType = "" - private var alarmLevel = "" - private var orderState = "" - - override fun initLayoutView(): Int = R.layout.activity_order_search - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) - - titleView.text = "工单查询" - leftBackView.visibility = View.VISIBLE - leftBackView.setOnClickListener { finish() } - } - - override fun initData() { - inflater = LayoutInflater.from(this) - //告警内容 - contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) - //工单状态 - workOrderViewModel = ViewModelProvider(this).get(WorkOrderViewModel::class.java) - } - - override fun initEvent() { - contentTypeViewModel.obtainAlarmContentType(alarmType = "1") - contentTypeViewModel.listModel.observe(this, { - if (it.code == 200) { - //构造一个默认值 - val bean = AlarmContentTypeModel.DataBean.ListBean() - bean.value = "" - bean.name = "全部" - bean.alarmType = "" - bean.deviceType = "" - contentModels.add(bean) - it.data!!.list?.forEach { contentTypeBean -> - contentModels.add(contentTypeBean) - } - contentTypeAdapter = - object : TagAdapter(contentModels) { - override fun getView( - parent: FlowLayout?, - position: Int, bean: AlarmContentTypeModel.DataBean.ListBean? - ): View { - val tagView = inflater.inflate( - R.layout.item_tag_flowlayout, - alarmContentLayout, false - ) as TextView - tagView.text = contentModels[position].name - return tagView - } - } - alarmContentLayout.adapter = contentTypeAdapter - contentTypeAdapter.setSelectedList(0) - alarmContentLayout.setOnTagClickListener { _, position, _ -> - this.alarmContentType = contentModels[position].value.toString() - true - } - } - }) - - val levelMaps: MutableList> = ArrayList() - for (i in 0..3) { - val map = HashMap() - map["name"] = i.toString().toChinese() - map["value"] = i.toLevel() - levelMaps.add(map) - } - val levelAdapter = object : TagAdapter>(levelMaps) { - override fun getView( - parent: FlowLayout?, - position: Int, map: Map? - ): View { - val tagView = inflater.inflate( - R.layout.item_tag_flowlayout, - alarmLevelLayout, false - ) as TextView - tagView.text = levelMaps[position]["name"] - return tagView - } - } - alarmLevelLayout.adapter = levelAdapter - levelAdapter.setSelectedList(0) - alarmLevelLayout.setOnTagClickListener { _, position, _ -> - this.alarmLevel = levelMaps[position]["value"].toString() - true - } - - workOrderViewModel.obtainOrderStatus() - workOrderViewModel.orderStatusModel.observe(this, { - if (it.code == 200) { - //构造一个默认值 - val bean = OrderStatusModel.DataBean() - bean.name = "全部" - bean.id = "" - bean.value = "" - orderStatusModels.add(bean) - it.data!!.forEach { statusBean -> - orderStatusModels.add(statusBean) - } - orderStatusAdapter = - object : TagAdapter(orderStatusModels) { - override fun getView( - parent: FlowLayout?, - position: Int, bean: OrderStatusModel.DataBean? - ): View { - val tagView = inflater.inflate( - R.layout.item_tag_flowlayout, - orderStatusLayout, false - ) as TextView - tagView.text = orderStatusModels[position].name - return tagView - } - } - orderStatusLayout.adapter = orderStatusAdapter - orderStatusAdapter.setSelectedList(0) - orderStatusLayout.setOnTagClickListener { _, position, _ -> - this.orderState = orderStatusModels[position].value.toString() - true - } - } - }) - - startTimeView.setOnClickListener { - TimePickerDialog.Builder() - .setThemeColor(R.color.mainThemeColor.convertColor(this)) - .setTitleStringId("请选择开始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startTimeView.text = millSeconds.timestampToDate() - }.build().show(supportFragmentManager, "year_month_day") - } - - endTimeView.setOnClickListener { - TimePickerDialog.Builder() - .setThemeColor(R.color.mainThemeColor.convertColor(this)) - .setTitleStringId("请选择结束时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - if (millSeconds.isEarlierThanStart(startTimeView.text.toString())) { - "结束时间不合法,不能早于开始时间".show(context) - return@setCallBack - } - endTimeView.text = millSeconds.timestampToDate() - }.build().show(supportFragmentManager, "year_month_day") - } - - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - addAll( - wellCodeView.text.toString().trim(), - alarmContentType, - alarmLevel, - orderState, - startTimeView.text.toString(), - endTimeView.text.toString() - ) - ) - } - - clearButton.setOnClickListener { - wellCodeView.text?.clear() - contentTypeAdapter.setSelectedList(0) - levelAdapter.setSelectedList(0) - orderStatusAdapter.setSelectedList(0) - startTimeView.text = "" - endTimeView.text = "" - } - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_order_search.xml b/app/src/main/res/layout/activity_order_search.xml index 99b8b40..ee8c287 100644 --- a/app/src/main/res/layout/activity_order_search.xml +++ b/app/src/main/res/layout/activity_order_search.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:background="@color/mainBackColor" android:orientation="vertical" - tools:context=".view.SearchWorkOrderActivity"> + tools:context=".view.SearchOrderActivity">