diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt index 379b932..c1f0c1d 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt @@ -15,7 +15,6 @@ private val decimalFormat = DecimalFormat("##0.0") private val dayView: TextView = findViewById(R.id.dayView) - private val factoryView: TextView = findViewById(R.id.factoryView) private val dataView: TextView = findViewById(R.id.dataView) private var xAxisDate: MutableList = ArrayList() @@ -28,7 +27,6 @@ super.refreshContent(e, highlight) val data = e.data as String try { - factoryView.text = data dataView.text = String.format("数据:${decimalFormat.format(e.y.toString().toDouble())}t") dayView.text = xAxisDate[(e.x).toInt()] } catch (e1: Exception) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt index 379b932..c1f0c1d 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt @@ -15,7 +15,6 @@ private val decimalFormat = DecimalFormat("##0.0") private val dayView: TextView = findViewById(R.id.dayView) - private val factoryView: TextView = findViewById(R.id.factoryView) private val dataView: TextView = findViewById(R.id.dataView) private var xAxisDate: MutableList = ArrayList() @@ -28,7 +27,6 @@ super.refreshContent(e, highlight) val data = e.data as String try { - factoryView.text = data dataView.text = String.format("数据:${decimalFormat.format(e.y.toString().toDouble())}t") dayView.text = xAxisDate[(e.x).toInt()] } catch (e1: Exception) { diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml new file mode 100644 index 0000000..018a29c --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt index 379b932..c1f0c1d 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt @@ -15,7 +15,6 @@ private val decimalFormat = DecimalFormat("##0.0") private val dayView: TextView = findViewById(R.id.dayView) - private val factoryView: TextView = findViewById(R.id.factoryView) private val dataView: TextView = findViewById(R.id.dataView) private var xAxisDate: MutableList = ArrayList() @@ -28,7 +27,6 @@ super.refreshContent(e, highlight) val data = e.data as String try { - factoryView.text = data dataView.text = String.format("数据:${decimalFormat.format(e.y.toString().toDouble())}t") dayView.text = xAxisDate[(e.x).toInt()] } catch (e1: Exception) { diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml new file mode 100644 index 0000000..018a29c --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_lighting.xml b/app/src/main/res/drawable/ic_lighting.xml new file mode 100644 index 0000000..e833ee2 --- /dev/null +++ b/app/src/main/res/drawable/ic_lighting.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt index 379b932..c1f0c1d 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt @@ -15,7 +15,6 @@ private val decimalFormat = DecimalFormat("##0.0") private val dayView: TextView = findViewById(R.id.dayView) - private val factoryView: TextView = findViewById(R.id.factoryView) private val dataView: TextView = findViewById(R.id.dataView) private var xAxisDate: MutableList = ArrayList() @@ -28,7 +27,6 @@ super.refreshContent(e, highlight) val data = e.data as String try { - factoryView.text = data dataView.text = String.format("数据:${decimalFormat.format(e.y.toString().toDouble())}t") dayView.text = xAxisDate[(e.x).toInt()] } catch (e1: Exception) { diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml new file mode 100644 index 0000000..018a29c --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_lighting.xml b/app/src/main/res/drawable/ic_lighting.xml new file mode 100644 index 0000000..e833ee2 --- /dev/null +++ b/app/src/main/res/drawable/ic_lighting.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search_white.xml b/app/src/main/res/drawable/ic_search_white.xml new file mode 100644 index 0000000..5d439e5 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt index 379b932..c1f0c1d 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt @@ -15,7 +15,6 @@ private val decimalFormat = DecimalFormat("##0.0") private val dayView: TextView = findViewById(R.id.dayView) - private val factoryView: TextView = findViewById(R.id.factoryView) private val dataView: TextView = findViewById(R.id.dataView) private var xAxisDate: MutableList = ArrayList() @@ -28,7 +27,6 @@ super.refreshContent(e, highlight) val data = e.data as String try { - factoryView.text = data dataView.text = String.format("数据:${decimalFormat.format(e.y.toString().toDouble())}t") dayView.text = xAxisDate[(e.x).toInt()] } catch (e1: Exception) { diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml new file mode 100644 index 0000000..018a29c --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_lighting.xml b/app/src/main/res/drawable/ic_lighting.xml new file mode 100644 index 0000000..e833ee2 --- /dev/null +++ b/app/src/main/res/drawable/ic_lighting.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search_white.xml b/app/src/main/res/drawable/ic_search_white.xml new file mode 100644 index 0000000..5d439e5 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_alarm_management.xml b/app/src/main/res/layout/activity_alarm_management.xml new file mode 100644 index 0000000..2a239f2 --- /dev/null +++ b/app/src/main/res/layout/activity_alarm_management.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e7a86a8..6b1132e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): AlarmListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmMessageView.text = rowsBean.alarmMessage + val alarmValue = if (rowsBean.alarmValue.toString().isBlank()) { + "未知" + } else { + rowsBean.alarmValue + } + holder.alarmValueView.text = "报警值:$alarmValue" + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + holder.devCodeView.text = String.format("设备编号:${rowsBean.devcode}") + holder.wellLocationView.text = String.format("井位置:${rowsBean.position}") + holder.createTimeView.text = String.format("时间:${rowsBean.alarmTime}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setChangeAlphaWhenPress(true) + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmMessageView: TextView = view.findViewById(R.id.alarmMessageView) + var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devCodeView: TextView = view.findViewById(R.id.devCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/extensions/String.kt b/app/src/main/java/com/casic/smarttube/extensions/String.kt index efc2b5e..6b31524 100644 --- a/app/src/main/java/com/casic/smarttube/extensions/String.kt +++ b/app/src/main/java/com/casic/smarttube/extensions/String.kt @@ -1,12 +1,11 @@ package com.casic.smarttube.extensions import com.casic.smarttube.model.ErrorMessageModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.utils.SaveKeyValues import org.json.JSONObject -import java.util.* /** * String扩展方法 @@ -31,7 +30,7 @@ fun String.appendDownloadUrl(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this}" } @@ -40,7 +39,7 @@ fun String.combineImagePath(): String { if (this.isEmpty()) return this val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return "$defaultValue/static/${this.replace("\\", "/")}" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt index 974dd86..1618f24 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/MinePageFragment.kt @@ -13,7 +13,7 @@ import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.view.AboutUsActivity import com.casic.smarttube.view.LoginActivity @@ -204,7 +204,7 @@ } override fun onResume() { - val userDetailJson = SaveKeyValues.getValue(LocalConstant.USER_DETAIL_MODEL, "") as String + val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { userData = Gson().fromJson( userDetailJson, object : TypeToken() {}.type @@ -271,7 +271,7 @@ val data: Uri if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0 data = FileProvider.getUriForFile( - requireContext(), LocalConstant.APP_AUTHORITY, apkPackage + requireContext(), LocaleConstant.APP_AUTHORITY, apkPackage ) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权 } else { diff --git a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt index 5d4cc9d..405dca4 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/OverviewFragment.kt @@ -3,10 +3,12 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.view.AlarmManagementActivity import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.extensions.showEmptyPage import com.casic.smarttube.model.DeviceListModel +import com.casic.smarttube.view.DeviceDetailActivity import com.casic.smarttube.view.HistoryDataActivity import com.casic.smarttube.view.WellDetailActivity import com.casic.smarttube.vm.DeviceViewModel @@ -30,7 +32,9 @@ override fun initLayoutView(): Int = R.layout.fragment_overview override fun setupTopBarLayout() { - + rightOptionView.setOnClickListener { + requireContext().navigatePageTo() + } } override fun initData() { @@ -106,12 +110,7 @@ deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(position: Int) { -// val jobId = dataBeans[position].jobId.toString() -// if (jobId.isBlank()) { -// "设备编号异常,无法查看详情".show(requireContext()) -// return -// } -// requireContext().navigatePageTo(jobId) + requireContext().navigatePageTo(dataBeans[position].devcode) } override fun onHistoryClicked(position: Int) { diff --git a/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java new file mode 100644 index 0000000..ddbcfcf --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/AlarmListModel.java @@ -0,0 +1,274 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class AlarmListModel { + + private int code; + private DataBean data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + 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 RowsBean { + private int alarmContent; + private String deptName; + private String jobStatus; + private String alarmContentName; + private String wellCode; + private String alarmTime; + private String deptid; + private String alarmTypeName; + private String alarmMessage; + private String staff; + private String deviceId; + private String jobId; + private String jobStatusName; + private String alarmType; + private String alarmValue; + private String devcode; + private String statusName; + private int alarmLevel; + private String tel; + private String id; + private String wellId; + private String position; + private String status; + + public int getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(int alarmContent) { + this.alarmContent = alarmContent; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getJobStatus() { + return jobStatus; + } + + public void setJobStatus(String jobStatus) { + this.jobStatus = jobStatus; + } + + public String getAlarmContentName() { + return alarmContentName; + } + + public void setAlarmContentName(String alarmContentName) { + this.alarmContentName = alarmContentName; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getAlarmTypeName() { + return alarmTypeName; + } + + public void setAlarmTypeName(String alarmTypeName) { + this.alarmTypeName = alarmTypeName; + } + + public String getAlarmMessage() { + return alarmMessage; + } + + public void setAlarmMessage(String alarmMessage) { + this.alarmMessage = alarmMessage; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getJobId() { + return jobId; + } + + public void setJobId(String jobId) { + this.jobId = jobId; + } + + public String getJobStatusName() { + return jobStatusName; + } + + public void setJobStatusName(String jobStatusName) { + this.jobStatusName = jobStatusName; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public String getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(String alarmValue) { + this.alarmValue = alarmValue; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public int getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(int alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt deleted file mode 100644 index 4717635..0000000 --- a/app/src/main/java/com/casic/smarttube/utils/LocalConstant.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.casic.smarttube.utils - -import android.Manifest - - -object LocalConstant { - /** - * ============================================================================================= - * Array - * ============================================================================================= - * */ - val USER_PERMISSIONS = arrayOf( - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.READ_PHONE_STATE - ) - - /** - * ============================================================================================= - * Int - * ============================================================================================= - * */ - const val PERMISSIONS_CODE = 999 - const val PAGE_LIMIT = 20 - - /** - * ============================================================================================= - * Long - * ============================================================================================= - * */ - const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L - - /** - * ============================================================================================= - * String - * ============================================================================================= - * */ - const val USER_DETAIL_MODEL = "userDetailModel" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" - const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" - const val ACCOUNT = "account" - const val PASSWORD = "password" - const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt new file mode 100644 index 0000000..c580688 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -0,0 +1,45 @@ +package com.casic.smarttube.utils + +import android.Manifest + + +object LocaleConstant { + /** + * ============================================================================================= + * Array + * ============================================================================================= + * */ + val USER_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + ) + + /** + * ============================================================================================= + * Int + * ============================================================================================= + * */ + const val PERMISSIONS_CODE = 999 + const val PAGE_LIMIT = 20 + + /** + * ============================================================================================= + * Long + * ============================================================================================= + * */ + const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + + /** + * ============================================================================================= + * String + * ============================================================================================= + * */ + const val USER_DETAIL_MODEL = "userDetailModel" + const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" + const val ACCOUNT = "account" + const val PASSWORD = "password" + const val APP_AUTHORITY = "com.casic.smarttube.fileprovider" +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt index 660496f..446d848 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitFactory.kt @@ -1,7 +1,7 @@ package com.casic.smarttube.utils.retrofit; import android.util.Log -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.OkHttpClient @@ -19,7 +19,7 @@ fun createRetrofit(clazz: Class): T { val defaultValue = SaveKeyValues.getValue( - LocalConstant.DEFAULT_SERVER_CONFIG, LocalConstant.SERVER_BASE_URL + LocaleConstant.DEFAULT_SERVER_CONFIG, LocaleConstant.SERVER_BASE_URL ) as String return Retrofit.Builder() .baseUrl(defaultValue) diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 713a640..dfc905e 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -145,4 +145,32 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 告警列表 + */ + @GET("/alarm/list") + suspend fun obtainAlarmListByPage( + @Header("token") token: String, + @Query("keywords") keywords: String, + @Query("alarmType") alarmType: String, + @Query("areaId") areaId: String, + @Query("alarmContentType") alarmContentType: String, + @Query("beginTime") beginTime: String, + @Query("endTime") endTime: String, + @Query("status") status: String, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String + + /** + * 消警 + * + * @param alarmId 告警ID + */ + @GET("/alarm/cancelAlarmById") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Query("alarmId") alarmId: Long + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 8e82f07..6298020 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -1,11 +1,12 @@ package com.casic.smarttube.utils.retrofit import com.casic.smarttube.utils.AuthenticationHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody import okhttp3.RequestBody import java.io.File +import java.util.* object RetrofitServiceManager { @@ -62,7 +63,7 @@ ): String { return api.obtainDeviceListByType( AuthenticationHelper.token!!, deptid, keywords, "12", isOnline, - "id", "asc", page, LocalConstant.PAGE_LIMIT + "id", "asc", page, LocaleConstant.PAGE_LIMIT ) } @@ -107,6 +108,40 @@ } /** + * 告警列表 + */ + suspend fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ): String { + return api.obtainAlarmListByPage( + AuthenticationHelper.token!!, + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page, + LocaleConstant.PAGE_LIMIT + ) + } + + /** + * 消警 + */ + suspend fun obtainOperationResult(alarmId: Long): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) + } + + /** * 上传图片 */ suspend fun uploadImage(image: File): String { diff --git a/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt new file mode 100644 index 0000000..01fb677 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/AlarmManagementActivity.kt @@ -0,0 +1,180 @@ +package com.casic.smarttube.view + +import android.os.Handler +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.smarttube.R +import com.casic.smarttube.adapter.AlarmListAdapter +import com.casic.smarttube.extensions.showEmptyPage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.utils.DialogHelper +import com.casic.smarttube.vm.AlarmViewModel +import com.gyf.immersionbar.ImmersionBar +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.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.vm.LoadState +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_management.* +import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView +import kotlinx.android.synthetic.main.activity_alarm_management.titleView +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* + + +class AlarmManagementActivity : KotlinBaseActivity() { + + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_alarm_management + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "当前告警" + rightOptionView.setOnClickListener { +// navigatePageTo() + "尽情期待~".show(this) + } + } + + override fun initData() { + weakReferenceHandler = WeakReferenceHandler(callback) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + } + + override fun onResume() { + obtainAlarmListByPage() + super.onResume() + } + + override fun initEvent() { + alarmListLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainAlarmListByPage() + } + alarmListLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainAlarmListByPage() + } + + alarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + alarmListLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + alarmListLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022062501) + } + }) + + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + alarmListAdapter.notifyItemRemoved(clickedPosition) + dataBeans.removeAt(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainAlarmListByPage() { + alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex) + } + + private val callback = Handler.Callback { + if (it.what == 2022062501) { + if (isRefresh || isLoadMore) { + alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (dataBeans.size == 0) { + emptyView!!.showEmptyPage { + pageIndex = 1 + obtainAlarmListByPage() + } + } else { + emptyView!!.hide() + alarmListAdapter = AlarmListAdapter(this, dataBeans) + alarmListView!!.layoutManager = LinearLayoutManager(this) + alarmListView!!.adapter = alarmListAdapter + alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show(this@AlarmManagementActivity) + return + } + navigatePageTo(wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + clickedPosition = position + AlertControlDialog.Builder() + .setContext(this@AlarmManagementActivity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show(this@AlarmManagementActivity) + return + } + alarmViewModel.obtainOperationResult(alarmId!!.toLong()) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt new file mode 100644 index 0000000..c7efb37 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/view/DeviceDetailActivity.kt @@ -0,0 +1,35 @@ +package com.casic.smarttube.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.smarttube.R +import com.casic.smarttube.vm.DeviceViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* + +class DeviceDetailActivity : KotlinBaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var devCode: String + + override fun initLayoutView(): Int =R.layout.activity_device_detail + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "设备详情" + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + devCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt index c3da55d..694aff6 100644 --- a/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/HistoryDataActivity.kt @@ -158,7 +158,7 @@ //浓度线 colors.add(R.color.redTextColor.convertColor(this)) entries.add( - Entry(i.toFloat(), rowsBean.cell!!.toFloat(), "浓度") + Entry(i.toFloat(), rowsBean.strength!!.toFloat(), "浓度") ) } entryModel.lineColors = colors diff --git a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt index 3e83706..8c455af 100644 --- a/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/LoginActivity.kt @@ -10,7 +10,7 @@ import com.casic.smarttube.R import com.casic.smarttube.utils.AuthenticationHelper import com.casic.smarttube.utils.DialogHelper -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.RSAUtils import com.casic.smarttube.vm.AuthenticateViewModel import com.casic.smarttube.vm.LoginViewModel @@ -54,8 +54,8 @@ override fun initData() { // 设置默认账号密码 - userNameView.setText(SaveKeyValues.getValue(LocalConstant.ACCOUNT, "") as String) - userPasswordView.setText(SaveKeyValues.getValue(LocalConstant.PASSWORD, "") as String) + userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) + userPasswordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) @@ -84,8 +84,8 @@ "密码不能为空".show(this) return@setOnClickListener } - SaveKeyValues.putValue(LocalConstant.ACCOUNT, account) - SaveKeyValues.putValue(LocalConstant.PASSWORD, userPassword) + SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) + SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) authenticateViewModel.obtainPublicKey() } authenticateViewModel.keyModel.observe(this, { diff --git a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt index d6dee4d..82fcafd 100644 --- a/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/PermissionActivity.kt @@ -2,7 +2,7 @@ import com.amap.api.navi.NaviSetting import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor @@ -23,15 +23,15 @@ override fun initData() { //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 - if (EasyPermissions.hasPermissions(this, *LocalConstant.USER_PERMISSIONS)) { + if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() } else { enterMainButton.setOnClickListener { EasyPermissions.requestPermissions( this@PermissionActivity, resources.getString(R.string.app_name) + "需要获取存储相关权限", - LocalConstant.PERMISSIONS_CODE, - *LocalConstant.USER_PERMISSIONS + LocaleConstant.PERMISSIONS_CODE, + *LocaleConstant.USER_PERMISSIONS ) } } diff --git a/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt new file mode 100644 index 0000000..1988902 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/AlarmViewModel.kt @@ -0,0 +1,68 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.AlarmListModel +import com.casic.smarttube.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 + +class AlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val listModel = MutableLiveData() + + fun obtainAlarmListByPage( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmListByPage( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun obtainOperationResult(alarmId: Long) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show(BaseApplication.obtainInstance()) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt index 8c33d53..5e44b97 100644 --- a/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/smarttube/vm/UserViewModel.kt @@ -5,7 +5,7 @@ import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -28,13 +28,13 @@ response, object : TypeToken() {}.type ) userDetailModel.value = userDetail - SaveKeyValues.putValue(LocalConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) + SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 - SaveKeyValues.removeKey(LocalConstant.USER_DETAIL_MODEL) + SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() diff --git a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt index 4fe46ee..4e47f09 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/DateSelectDialog.kt @@ -6,7 +6,7 @@ import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R -import com.casic.smarttube.utils.LocalConstant +import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.* @@ -93,7 +93,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> @@ -112,7 +112,7 @@ .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocalConstant.FIVE_YEARS) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> diff --git a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt index 379b932..c1f0c1d 100644 --- a/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/smarttube/widgets/LineChartMarkerView.kt @@ -15,7 +15,6 @@ private val decimalFormat = DecimalFormat("##0.0") private val dayView: TextView = findViewById(R.id.dayView) - private val factoryView: TextView = findViewById(R.id.factoryView) private val dataView: TextView = findViewById(R.id.dataView) private var xAxisDate: MutableList = ArrayList() @@ -28,7 +27,6 @@ super.refreshContent(e, highlight) val data = e.data as String try { - factoryView.text = data dataView.text = String.format("数据:${decimalFormat.format(e.y.toString().toDouble())}t") dayView.text = xAxisDate[(e.x).toInt()] } catch (e1: Exception) { diff --git a/app/src/main/res/drawable/ic_alarm.xml b/app/src/main/res/drawable/ic_alarm.xml new file mode 100644 index 0000000..018a29c --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_lighting.xml b/app/src/main/res/drawable/ic_lighting.xml new file mode 100644 index 0000000..e833ee2 --- /dev/null +++ b/app/src/main/res/drawable/ic_lighting.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search_white.xml b/app/src/main/res/drawable/ic_search_white.xml new file mode 100644 index 0000000..5d439e5 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_alarm_management.xml b/app/src/main/res/layout/activity_alarm_management.xml new file mode 100644 index 0000000..2a239f2 --- /dev/null +++ b/app/src/main/res/layout/activity_alarm_management.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml new file mode 100644 index 0000000..c14da7f --- /dev/null +++ b/app/src/main/res/layout/activity_device_detail.xml @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +