Compare commits

17 Commits
Author SHA1 Message Date
lvmeng da67c4d4b2 Merge branch 'dev_lvmeng' 2025-09-16 09:06:58 +08:00
lvmeng b03a1bae8c 优化 2025-09-16 09:06:44 +08:00
lvmeng 413b36a836 Merge branch 'dev_lvmeng' 2025-09-16 08:59:30 +08:00
lvmeng 201a0779bf 更新entity名称 2025-09-16 08:59:04 +08:00
lvmeng 410383563b Merge branch 'dev_lvmeng' 2025-09-15 19:15:46 +08:00
lvmeng be579ea7e4 增加数据推送、工作面列表、记录列表改为倒序,新数据展示在最上面、增加待提交数据标识、其它问题优化 2025-09-15 19:15:02 +08:00
lvmeng fc77fa8f68 Merge branch 'refs/heads/dev_lvmeng' 2025-09-14 12:04:19 +08:00
lvmeng fa2672d6d7 工作面与记录数字格式显示优化 2025-09-14 12:01:48 +08:00
lvmeng 87278949d1 代码优化 2025-09-14 11:51:59 +08:00
lvmeng 4867c14581 名称统一优化 2025-09-14 11:38:24 +08:00
lvmeng 60713255b0 Merge branch 'dev_lvmeng' 2025-09-13 21:23:01 +08:00
lvmeng 4ea76341c3 Revert "优化数据拉取、新增、保存、详情、UI"
This reverts commit e959a71e85.
2025-09-13 21:13:26 +08:00
lvmeng 587139fd91 优化数据拉取、新增、保存、详情、UI 2025-09-13 21:04:46 +08:00
lvmeng02-wb e959a71e85 优化数据拉取、新增、保存、详情、UI 2025-09-13 19:05:28 +08:00
lvmeng 0c3898c8af jks 2025-09-12 13:57:55 +08:00
lvmeng b743bf566b 接口数据拉取、保存本地数据库、工作面、记录、岩性等数据显示、增加、修改功能 2025-09-12 13:38:09 +08:00
lvmeng cc5ea0f2c6 使用本地数据库保存数据 2025-09-11 18:03:03 +08:00
108 changed files with 4795 additions and 2067 deletions
+17 -14
View File
@@ -20,6 +20,14 @@ android {
// 选择实际需要的cpu架构
abiFilters 'armeabi-v7a', 'arm64-v8a'//,'armeabi'//, 'x86', 'x86_64'
}
// Kotlin项目配置
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
}
}
// 设置输出APK文件名格式
setProperty("archivesBaseName", "煤矿数采终端v${versionName}")
}
signingConfigs{
@@ -86,25 +94,20 @@ dependencies {
api rootProject.ext.commonLibs
api project(':tuichat')
api project(':tuicontact')
api project(':tuiconversation')
api project(':tuicallkit')
// api project(':tuichat')
// api project(':tuicontact')
// api project(':tuiconversation')
// api project(':tuicallkit')
// annotationProcessor 'com.google.auto.service:auto-service:1.1.1'
implementation 'com.contrarywind:Android-PickerView:4.1.9'
// ViewModel
// implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
implementation 'com.google.code.gson:gson:2.10.1'
// Retrofit
// implementation "com.squareup.retrofit2:retrofit:2.9.0"
// implementation "com.squareup.retrofit2:converter-gson:2.9.0"
implementation("org.apache.poi:poi:5.2.3")
implementation("org.apache.poi:poi-ooxml:5.2.3")
// OkHttp
// implementation "com.squareup.okhttp3:okhttp:4.11.0"
// implementation "com.squareup.okhttp3:logging-interceptor:4.11.0"
// Coroutines
// implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1"
}
Binary file not shown.
+20 -4
View File
@@ -4,6 +4,10 @@
package="com.zmkg.coaloperation">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage"/>
<application
android:name=".MyApplication"
@@ -15,6 +19,17 @@
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:allowBackup">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
<activity
android:name=".MainActivity"
android:exported="false" />
@@ -31,13 +46,14 @@
<activity android:name=".ui.user.activity.CacheManageActivity" />
<activity android:name=".ui.user.activity.AboutUsActivity" />
<activity android:name=".ui.home.activity.GeologicalActivity" />
<activity android:name=".ui.tunneling.activity.WorkingFaceStatisticsActivity" />
<activity android:name=".ui.tunneling.activity.WorkingFaceRecordActivity" />
<activity android:name=".ui.tunneling.activity.WorkingFaceDetailActivity" />
<activity android:name=".ui.tunneling.activity.WorkingPointActivity" />
<activity android:name=".ui.tunneling.activity.WorkingFaceDetail2Activity" />
<activity android:name=".ui.tunneling.activity.AddWorkingPointActivity"
<activity android:name=".ui.tunneling.activity.AddWorkingFaceRecordActivity"
android:windowSoftInputMode="adjustPan"/>
<activity android:name=".ui.tunneling.activity.TunnelingActivity" />
<activity android:name=".ui.tunneling.activity.WorkFaceActivity" />
<activity android:name=".ui.tunneling.activity.AddWorkingFaceActivity"
android:windowSoftInputMode="adjustPan" />
</application>
</manifest>
@@ -25,12 +25,6 @@
"iconNormal": "report_tab",
"iconSelected": "report_select_tab"
},
{
"tabName": "消息",
"tabTag": "key_message_fragment",
"iconNormal": "message_tab",
"iconSelected": "message_select_tab"
},
{
"tabName": "我的",
"tabTag": "key_my_fragment",
@@ -3,7 +3,7 @@ package com.zmkg.coaloperation
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import com.tencent.qcloud.tuikit.tuiconversation.classicui.page.TUIConversationFragmentContainer
//import com.tencent.qcloud.tuikit.tuiconversation.classicui.page.TUIConversationFragmentContainer
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.bottomtab.HomeBottomTabLayout
@@ -59,9 +59,9 @@ class MainActivity : BaseVMBActivity<TestViewModel, ActivityMainBinding>(R.layou
return ReportFragment()
}
TAG_MESSAGE -> {
return TUIConversationFragmentContainer()
}
// TAG_MESSAGE -> {
// return TUIConversationFragmentContainer()
// }
TAG_MY -> {
return UserFragment()
@@ -3,6 +3,7 @@ package com.zmkg.coaloperation
import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.os.StrictMode
import android.text.TextUtils
@@ -12,8 +13,8 @@ import androidx.lifecycle.ViewModelStoreOwner
import androidx.multidex.MultiDex
import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.Logger
import com.tencent.qcloud.tuicore.TUILogin
import com.tencent.qcloud.tuicore.interfaces.TUILoginListener
//import com.tencent.qcloud.tuicore.TUILogin
//import com.tencent.qcloud.tuicore.interfaces.TUILoginListener
import com.zmkg.coaloperation.local.DataStoreManager
import com.zmkg.coaloperation.retorfit.UrlConfig
import com.zmkg.coaloperation.superfuntion.loginIm
@@ -36,6 +37,16 @@ class MyApplication : Application(), ViewModelStoreOwner {
@JvmStatic
lateinit var appViewModel: AppViewModel
val TAG = MyApplication::class.java.simpleName
@Volatile
private var sharedPref: SharedPreferences? = null
fun getSharedPref(): SharedPreferences? {
if (sharedPref != null) {
return sharedPref
}
sharedPref = appContext.getSharedPreferences("sp_digital_coal_mining", Context.MODE_PRIVATE)
return sharedPref
}
}
override fun attachBaseContext(base: Context?) {
@@ -63,24 +74,24 @@ class MyApplication : Application(), ViewModelStoreOwner {
}
fun initLoginStatusListener() {
TUILogin.addLoginListener(loginStatusListener)
// TUILogin.addLoginListener(loginStatusListener)
}
private val loginStatusListener: TUILoginListener = object : TUILoginListener() {
override fun onKickedOffline() {
if (UrlConfig.isOpenIm){
startLoginActivity(CustomActivityManager.getInstance().currentActivity())
}
}
override fun onUserSigExpired() {
if (TextUtils.isEmpty(DataStoreManager.getUserName())) {
startLoginActivity(appContext)
} else {
loginIm(DataStoreManager.getUserName()){ }
}
}
}
// private val loginStatusListener: TUILoginListener = object : TUILoginListener() {
// override fun onKickedOffline() {
// if (UrlConfig.isOpenIm){
// startLoginActivity(CustomActivityManager.getInstance().currentActivity())
// }
// }
//
// override fun onUserSigExpired() {
// if (TextUtils.isEmpty(DataStoreManager.getUserName())) {
// startLoginActivity(appContext)
// } else {
// loginIm(DataStoreManager.getUserName()){ }
// }
// }
// }
/** 获取一个全局的ViewModel */
@@ -201,9 +212,11 @@ class MyApplication : Application(), ViewModelStoreOwner {
// }
// }
override val viewModelStore: ViewModelStore
get() = mAppViewModelStore!!
override fun getViewModelStore(): ViewModelStore {
return mAppViewModelStore!!
}
// override fun getViewModelStore(): ViewModelStore {
// return mAppViewModelStore!!
// }
}
@@ -0,0 +1,55 @@
package com.zmkg.coaloperation.adapter
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.widget.addTextChangedListener
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.databinding.ListItemRockBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.utils.formatDecimalString
class TunnelRoofLithologyAdapter(var list: MutableList<TunnelRoofLithologyEntity>) :
BaseQuickAdapter<TunnelRoofLithologyEntity, TunnelRoofLithologyAdapter.VH>(
R.layout.list_item_rock, list
) {
inner class VH(var binding: ListItemRockBinding) : BaseViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val binding = ListItemRockBinding.inflate(
LayoutInflater.from(context),
parent,
false
)
return VH(binding).also {
bindViewClickListener(it, viewType)
}
}
override fun convert(holder: VH, item: TunnelRoofLithologyEntity) {
holder.binding.let {
it.root.tag = item.lithologyId
it.tvRockStartLen.run {
addTextChangedListener(onTextChanged = { text, start, before, count ->
item.positionStart = text.toString().trim()
})
setText(item.positionStart.formatDecimalString())
}
it.tvRockEndLen.run {
addTextChangedListener(onTextChanged = { text, start, before, count ->
item.positionEnd = text.toString().trim()
})
setText(item.positionEnd.formatDecimalString())
}
it.tvRockType.run {
addTextChangedListener(onTextChanged = { text, start, before, count ->
item.lithologyType = text.toString().trim()
})
setText(item.lithologyType)
}
}
}
}
@@ -0,0 +1,112 @@
package com.zmkg.coaloperation.adapter
import android.annotation.SuppressLint
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.databinding.ListItemTunnelWorkingFaceBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.ui.tunneling.activity.TunnelingActivity
import com.zmkg.coaloperation.ui.tunneling.activity.WorkingFaceRecordActivity
import com.zmkg.coaloperation.utils.ScreenUtil
import com.zmkg.coaloperation.utils.gone
import com.zmkg.coaloperation.utils.toJsonString
import com.zmkg.coaloperation.utils.visible
class TunnelWorkingFaceAdapter(var list: MutableList<TunnelWorkingFaceEntity>) :
BaseQuickAdapter<TunnelWorkingFaceEntity, TunnelWorkingFaceAdapter.VH>(
R.layout.list_item_tunnel_working_face, list
) {
companion object {
private const val TAG = "TunnelWorkingFaceAdapter"
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val inflater = LayoutInflater.from(context)
val binding = ListItemTunnelWorkingFaceBinding.inflate(inflater, parent, false)
return VH(binding).also {
bindViewClickListener(it, viewType)
}
}
@SuppressLint("ClickableViewAccessibility")
override fun convert(
holder: VH,
item: TunnelWorkingFaceEntity
) {
holder.binding.let { binding ->
binding.includeHeader.root.isEnabled = false
binding.tvWorkingFaceName.text = item.surfaceName
binding.llFaceRecord.let {
if (item.isExpandRecord) it.visible() else it.gone()
}
binding.ivFlagEdit.let {
if (item.dataState == "1") it.visible() else it.gone()
}
binding.ivExpandRecord.setImageResource(
if (item.isExpandRecord) R.drawable.ic_arrow_down_white else R.drawable.ic_arrow_right_gray
)
binding.ivExpandRecord.tag = item.isExpandRecord.toString()
binding.rvFaceRecord.let { rv ->
rv.layoutManager = LinearLayoutManager(context)
if (item.records == null) {
item.records = mutableListOf()
}
val size = item.records!!.size
binding.includeHeader.root.let { header ->
if (size > 0) header.visible()
else header.gone()
}
rv.updateLayoutParams {
height = if (size >= 3)
ScreenUtil.dp2px(150F)
else
RecyclerView.LayoutParams.WRAP_CONTENT
}
rv.isVerticalScrollBarEnabled = size >= 3
rv.isVerticalFadingEdgeEnabled = size < 3
rv.overScrollMode = if (size >= 3) View.OVER_SCROLL_IF_CONTENT_SCROLLS else View.OVER_SCROLL_NEVER
rv.adapter = TunnelWorkingFaceRecordAdapter(item.records!!).apply {
setOnItemClickListener { adapter, view, recordPosition ->
// if (recordPosition == 0) {
// //0为头部表示,不需要点击操作
// return@setOnItemClickListener
// }
Log.d(TAG, "convert: ${item.records!![recordPosition].toJsonString()}")
context.let { ctx ->
if (ctx is TunnelingActivity) {
ctx.toActivity(WorkingFaceRecordActivity::class.java, Bundle().apply {
putString(WorkingFaceRecordActivity.FACE_NAME, item.surfaceName)
putParcelable(
WorkingFaceRecordActivity.FACE_RECORD,
item.records!![recordPosition]
)
})
}
}
}
}
}
}
}
inner class VH(var binding: ListItemTunnelWorkingFaceBinding) : BaseViewHolder(binding.root)
init {
addChildClickViewIds(
R.id.start_record,
R.id.ivExpandRecord,
R.id.llWorkingFace
)
}
}
@@ -0,0 +1,66 @@
package com.zmkg.coaloperation.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
import androidx.core.graphics.toColorInt
import com.zmkg.coaloperation.databinding.ListItemTunnelWorkingFaceRecordBinding
import com.zmkg.coaloperation.utils.gone
import com.zmkg.coaloperation.utils.visible
class TunnelWorkingFaceRecordAdapter(var list: MutableList<TunnelWorkingFaceRecordEntity>) :
BaseQuickAdapter<TunnelWorkingFaceRecordEntity, TunnelWorkingFaceRecordAdapter.VH>(
R.layout.list_item_tunnel_working_face_record, list
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val inflater = LayoutInflater.from(context)
val binding = ListItemTunnelWorkingFaceRecordBinding.inflate(inflater, parent, false)
return VH(binding).also {
bindViewClickListener(it, viewType)
}
}
override fun convert(
holder: VH,
item: TunnelWorkingFaceRecordEntity
) {
val position = holder.layoutPosition
holder.binding.let {
// if (position == 0) {
// it.time.setTextColor(Color.WHITE)
// it.time.textSize = 14f
// it.record.setTextColor(Color.WHITE)
// it.record.textSize = 14f
// it.operation.setTextColor(Color.WHITE)
// it.operation.textSize = 14f
// } else {
it.time.setTextColor("#FF6A6F87".toColorInt())
it.time.textSize = 12f
it.record.setTextColor("#FF6A6F87".toColorInt())
it.record.textSize = 12f
it.operation.setTextColor("#FFA3FEA6".toColorInt())
it.operation.textSize = 12f
// }
it.time.text = item.workingDate
it.record.text = item.recordPerson
it.operation.text = if (item.operationType == "1") "查看" else "操作"
it.divider.visibility =
if (position == list.size - 1) View.GONE else View.VISIBLE
it.ivFlagEdit.let {
if (item.dataState == "1") it.visible() else it.gone()
}
}
}
inner class VH(var binding: ListItemTunnelWorkingFaceRecordBinding) :
BaseViewHolder(binding.root)
}
@@ -9,35 +9,38 @@ import androidx.core.view.updateLayoutParams
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.bean.RockItem
import com.zmkg.coaloperation.bean.WorkingFaceItem
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import com.zmkg.coaloperation.databinding.ListItemRockBinding
import com.zmkg.coaloperation.databinding.ListItemWorkingFaceBinding
import com.zmkg.coaloperation.databinding.ListItemTunnelWorkingItemBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.utils.ScreenUtil
import com.zmkg.coaloperation.utils.formatDecimalString
class WorkingItemAdapter(data: MutableList<WorkingFaceItem>) :
BaseQuickAdapter<WorkingFaceItem, WorkingItemAdapter.VH>(
R.layout.list_item_working_face,
class TunnelWorkingItemAdapter(data: MutableList<TunnelWorkingItem>) :
BaseQuickAdapter<TunnelWorkingItem, TunnelWorkingItemAdapter.VH>(
R.layout.list_item_tunnel_working_item,
data
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val binding = ListItemWorkingFaceBinding.inflate(
val binding = ListItemTunnelWorkingItemBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return VH(binding)
return VH(binding).also {
bindViewClickListener(it, viewType)
}
}
override fun convert(
holder: VH,
item: WorkingFaceItem
item: TunnelWorkingItem
) {
if (item.pageType == 0) {
loadFaceData(holder.binding, item)
} else if (item.pageType == 1) {
loadPointData(holder.binding, item)
loadRecordData(holder.binding, item)
}
val position = holder.layoutPosition
holder.binding.divider.let {
@@ -49,7 +52,7 @@ class WorkingItemAdapter(data: MutableList<WorkingFaceItem>) :
}
}
private fun loadPointData(binding: ListItemWorkingFaceBinding, item: WorkingFaceItem) {
private fun loadRecordData(binding: ListItemTunnelWorkingItemBinding, item: TunnelWorkingItem) {
binding.run {
tvItemName.text = item.name
if (item.items.isNullOrEmpty()) {
@@ -70,7 +73,7 @@ class WorkingItemAdapter(data: MutableList<WorkingFaceItem>) :
}
}
}
private fun loadFaceData(binding: ListItemWorkingFaceBinding, item: WorkingFaceItem) {
private fun loadFaceData(binding: ListItemTunnelWorkingItemBinding, item: TunnelWorkingItem) {
binding.tvItemName.let {
it.updateLayoutParams { height = ScreenUtil.dp2px(50f) }
it.text = item.name
@@ -82,7 +85,7 @@ class WorkingItemAdapter(data: MutableList<WorkingFaceItem>) :
binding.llContainer.visibility = View.GONE
}
private fun addChildToContainer(container: LinearLayout, list: MutableList<RockItem>?) {
private fun addChildToContainer(container: LinearLayout, list: MutableList<TunnelRoofLithologyEntity>?) {
list?.forEach { item ->
val itemBinding = ListItemRockBinding.inflate(
LayoutInflater.from(context),
@@ -93,17 +96,17 @@ class WorkingItemAdapter(data: MutableList<WorkingFaceItem>) :
tvRockStartLen.let {
it.focusable = EditText.NOT_FOCUSABLE
it.setOnKeyListener(null)
it.setText("${item.startLen}")
it.setText(item.positionStart.formatDecimalString())
}
tvRockEndLen.let {
it.focusable = EditText.NOT_FOCUSABLE
it.setOnKeyListener(null)
it.setText("${item.endLen}")
it.setText(item.positionEnd.formatDecimalString())
}
tvRockType.let {
it.focusable = EditText.NOT_FOCUSABLE
it.setOnKeyListener(null)
it.setText(item.rockType)
it.setText(item.lithologyType)
}
container.addView(root)
}
@@ -111,5 +114,5 @@ class WorkingItemAdapter(data: MutableList<WorkingFaceItem>) :
}
inner class VH(var binding: ListItemWorkingFaceBinding) : BaseViewHolder(binding.root)
inner class VH(var binding: ListItemTunnelWorkingItemBinding) : BaseViewHolder(binding.root)
}
@@ -0,0 +1,39 @@
package com.zmkg.coaloperation.adapter
import android.view.LayoutInflater
import android.view.ViewGroup
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.databinding.ItemRockNatureBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.utils.formatDecimalString
/**
* 顶板岩性
*/
class TunnelingRockNatureAdapter(list: MutableList<TunnelRoofLithologyEntity>) :
BaseQuickAdapter<TunnelRoofLithologyEntity, TunnelingRockNatureAdapter.VH>(R.layout.item_rock_nature, list) {
inner class VH(var binding: ItemRockNatureBinding):BaseViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val binding = ItemRockNatureBinding.inflate(
LayoutInflater.from(context),parent, false
)
return VH(binding).also {
bindViewClickListener(it, viewType)
}
}
override fun convert(holder: VH, item: TunnelRoofLithologyEntity) {
holder.binding.let {
it.tvRock1Start.text = item.positionStart.formatDecimalString()
it.tvRock1End.text = item.positionEnd.formatDecimalString()
it.tvRock1Name.text = item.lithologyType
}
}
}
@@ -0,0 +1,10 @@
package com.zmkg.coaloperation.bean
data class DictBean(
var seam_list: Map<String, String>?,
var team_list: Map<String, String>?,
var mine_team_shift: Map<String, String>?,
var mine_tunnel_nature: Map<String, String>?,
var surface_list: Map<String, String>?,
var area_list:Map<String, Map<String, Any>?>?
)
@@ -0,0 +1,29 @@
package com.zmkg.coaloperation.bean
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
data class TunnelWorkingItem(
var name: String? = "",
var value: String? = "",
var items: MutableList<TunnelRoofLithologyEntity>? = null,
var pageType:Int = 0
)
data class RockItem(
var startLen: Int = 0,
var endLen: Int = 0,
val rockType: String = ""
)
data class WorkOption(
var id:String,
var name: String
)
data class TunnelSubmitData(
var faceList: MutableList<TunnelWorkingFaceEntity>?=null,
var recordList: MutableList<TunnelWorkingFaceRecordEntity>?=null,
var lithologyList: MutableList<TunnelRoofLithologyEntity>?=null
)
@@ -0,0 +1,170 @@
package com.zmkg.coaloperation.bean
import java.io.Serializable
/**
* 掘进
*/
//data class TunnelingHomeBean(
// var contentList: MutableList<TunnelingHomeItemBean>?,
// val createBy: String?,
// val createTime: String?,
// val updateBy: String?,
// val updateTime: String?,
// val remark: String?,
// val surfaceId: String?,
// val totalFootage: String?,
// val seamId: String?,
// val areaId: String?,
// val seamName: String?,
// val surfaceName: String?,
// val areaName: String?,
// val surfaceAzimuth: String?,
// val surfaceHeight: String?,
// val surfaceWidth: String?,
// val tunnelNature: String?,
// val planStartDate: String?,
// val planEndDate: String?,
// val geologicalType: String?,
// val hydrogeologicalType: String?,
// val seamIgnition: String?,
// val seamGas: String?,
// val seamBumpPressure: String?,
// val surfaceSupportForm: String?
//)
//
//class TunnelingHomeItemBean {
// var createBy: String? = null
// var createTime: String? = null
// var updateBy: String? = null
// var updateTime: String? = null
// var remark: String? = null
// var recordId: String? = null
// var surfaceId: String? = null
// var workingDate: String? = null
// var teamShift: String? = null
// var teamId: String? = null
// var teamName: String? = null
// var teamLeader: String? = null
// var workingFootage: String? = null
// var seamDip: String? = null
// var seamHeight: String? = null
// var waterYield: String? = null
// var recordPerson: String? = null
// var mineWorkingLith: String? = null
//}
//
///**
// * 新增工作面 给接口的数据
// */
//data class TunnelingFaceAddBean(
//
// val surfaceName: String? = null,
// val totalFootage: String? = null,
//
// val areaId: Int? = null,
// val areaName: String? = null,
// val createBy: String? = null,
// val createTime: String? = null,
// val geologicalType: String? = null,
// val hydrogeologicalType: String? = null,
// val params: Params? = null,
// val planEndDate: String? = null,
// val planStartDate: String? = null,
// val remark: String? = null,
// val seamBumpPressure: String? = null,
// val seamGas: String? = null,
// val seamId: Int? = null,
// val seamIgnition: String? = null,
// val seamName: String? = null,
// val surfaceAzimuth: String? = null,
// val surfaceHeight: String? = null,
// val surfaceId: Int? = null,
// val surfaceSupportForm: String? = null,
// val surfaceWidth: String? = null,
// val tunnelNature: String? = null,
// val updateBy: String? = null,
// val updateTime: String? = null
//)
data class Params(
val additionalProp1: String? = null,
val additionalProp2: String? = null,
val additionalProp3: String? = null
):Serializable
/**
* 工作面详情
*/
//data class FaceWorkDetailBean(
// val accumulativeFootage: Int,
// val areaId: Int,
// val areaName: String,
// val createBy: String,
// val createTime: String,
// val geologicalType: String,
// val hydrogeologicalType: String,
// val latestRecord: LatestRecord,
// val params: Params,
// val planEndDate: String,
// val planStartDate: String,
// val remainingFootage: Int,
// val remark: String,
// val seamBumpPressure: String,
// val seamGas: String,
// val seamId: Int,
// val seamIgnition: String,
// val seamName: String,
// val surfaceAzimuth: String,
// val surfaceHeight: String,
// val surfaceId: Int,
// val surfaceName: String,
// val surfaceSupportForm: String,
// val surfaceWidth: String,
// val totalFootage: Int,
// val tunnelNature: String,
// val updateBy: String,
// val updateTime: String,
// val yesterdayFootage: String,
// val monthFootage: String
//): Serializable
//data class LatestRecord(
// val createBy: String,
// val createTime: String,
// val mineWorkingLithologyList: MutableList<MineWorkingLithology>,
// val params: Params,
// val recordId: Int,
// val recordPerson: String,
// val remark: String,
// val seamDip: Int,
// val seamHeight: Int,
// val surfaceId: Int,
// val surfaceName: String,
// val teamId: Int,
// val teamLeader: String,
// val teamName: String,
// val teamShift: Int,
// val updateBy: String,
// val updateTime: String,
// val waterYield: Int,
// val workingDate: String,
// val workingFootage: Int
//):Serializable
//
//data class MineWorkingLithology(
// val createBy: String,
// val createTime: String,
// val lithologyId: Int,
// val lithologyType: String,
// val params: Params,
// val positionEnd: Int,
// val positionStart: Int,
// val recordId: Int,
// val remark: String,
// val updateBy: String,
// val updateTime: String
//):Serializable
@@ -1,14 +0,0 @@
package com.zmkg.coaloperation.bean
data class WorkingFaceItem(
var name: String = "",
var value: String = "",
var items: MutableList<RockItem>? = null,
var pageType:Int = 0
)
data class RockItem(
var startLen: Int = 0,
var endLen: Int = 0,
val rockType: String = ""
)
@@ -1,16 +1,10 @@
package com.zmkg.coaloperation.data.api
import com.zmkg.coaloperation.data.bean.ApiResponse
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.retorfit.UrlConfig
import com.zmkg.coaloperation.ui.tunneling.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeItemBean
import com.zmkg.coaloperation.ui.home.bean.WaterLedgerBean
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
/**
* 首页
@@ -27,25 +21,31 @@ interface HomeApi {
/**
* 掘进-首页-工作面列表
*/
@GET("/api/mine/tunnelling/surface/list")
suspend fun getTunnelingHomeData(): ApiResponse<MutableList<TunnelingHomeBean>>
// @GET("/api/mine/tunnelling/surface/list")
// suspend fun getTunnelingHomeData(): ApiResponse<MutableList<TunnelingHomeBean>>
/**
* 掘进-首页-工作面记录列表
*/
@GET("/api/mine/tunnelling/surface/record/{recordId}")
suspend fun getTunnelingHomeItemData(@Path("recordId") recordId: String?): ApiResponse<MutableList<TunnelingHomeItemBean>>
// /**
// * 掘进-首页-工作面记录列表
// */
// @GET("/api/mine/tunnelling/surface/record/{recordId}")
// suspend fun getTunnelingHomeItemData(@Path("recordId") recordId: String?): ApiResponse<MutableList<TunnelingHomeItemBean>>
/**
* 掘进-工作面详情
*/
@GET("/api/mine/tunnelling/surface/detail/{surfaceId}")
suspend fun getTunnelingSurfaceDetail(@Path("surfaceId") surfaceId: String?): ApiResponse<FaceWorkDetailBean>
// /**
// * 掘进-工作面详情
// */
// @GET("/api/mine/tunnelling/surface/detail/{surfaceId}")
// suspend fun getTunnelingSurfaceDetail(@Path("surfaceId") surfaceId: String?): ApiResponse<FaceWorkDetailBean>
/**
* 掘进-新增工作面
*/
@POST("/api/mine/tunnelling/surface/add")
suspend fun postTunnellingSurfaceAdd(@Body requestBody: RequestBody): ApiResponse<String>
// @POST("/api/mine/tunnelling/surface/add")
// suspend fun postTunnellingSurfaceAdd(@Body requestBody: RequestBody): ApiResponse<String>
@GET("/api/mine/tunnelling/surface/detailList")
suspend fun getTunnelHomeList(): ApiResponse<MutableList<TunnelWorkingFaceEntity>?>
@GET("/api/mine/tunnelling/dictionaries")
suspend fun getTunnelAllDict(): ApiResponse<Any?>
}
@@ -3,13 +3,8 @@ package com.zmkg.coaloperation.data.repository
import com.zmkg.coaloperation.base.repository.BaseRepository
import com.zmkg.coaloperation.data.api.HomeApi
import com.zmkg.coaloperation.data.bean.ApiResponse
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.retorfit.RetrofitManager
import com.zmkg.coaloperation.retorfit.RetrofitManager.toRequestBody
import com.zmkg.coaloperation.superfuntion.toJson
import com.zmkg.coaloperation.ui.tunneling.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingFaceAddBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeItemBean
import com.zmkg.coaloperation.ui.home.bean.WaterLedgerBean
@@ -28,43 +23,54 @@ object HomeRepository : BaseRepository(){
}
}
/**
* 掘进-首页-工作面列表
*/
suspend fun getTunnelingHomeData(): ApiResponse<MutableList<TunnelingHomeBean>> {
// /**
// * 掘进-首页-工作面列表
// */
// suspend fun getTunnelingHomeData(): ApiResponse<MutableList<TunnelingHomeBean>> {
// return apiCall {
// val map = mutableMapOf<String, Any?>()
// service.getTunnelingHomeData()
// }
// }
// /**
// * 掘进-首页-工作面记录列表
// */
// suspend fun getTunnelingHomeItemData(surfaceId: String?): ApiResponse<MutableList<TunnelingHomeItemBean>> {
// return apiCall {
// val map = mutableMapOf<String, Any?>()
// service.getTunnelingHomeItemData(surfaceId)
// }
// }
// /**
// * 掘进-工作面详情
// */
// suspend fun getTunnelingSurfaceDetail(surfaceId: String?): ApiResponse<FaceWorkDetailBean> {
// return apiCall {
// val map = mutableMapOf<String, Any?>()
// service.getTunnelingSurfaceDetail(surfaceId)
// }
// }
//
// /**
// * 掘进-新增工作面
// */
// suspend fun postTunnellingSurfaceAdd(tunnelingFaceAddBean: TunnelingFaceAddBean): ApiResponse<String> {
// return apiCall {
// service.postTunnellingSurfaceAdd(tunnelingFaceAddBean.toJson().toRequestBody())
// }
// }
//
suspend fun getTunnelHomeList() : ApiResponse<MutableList<TunnelWorkingFaceEntity>?> {
return apiCall {
val map = mutableMapOf<String, Any?>()
service.getTunnelingHomeData()
service.getTunnelHomeList()
}
}
/**
* 掘进-首页-工作面记录列表
*/
suspend fun getTunnelingHomeItemData(surfaceId: String?): ApiResponse<MutableList<TunnelingHomeItemBean>> {
suspend fun getTunnelAllDict() : ApiResponse<Any?> {
return apiCall {
val map = mutableMapOf<String, Any?>()
service.getTunnelingHomeItemData(surfaceId)
}
}
/**
* 掘进-工作面详情
*/
suspend fun getTunnelingSurfaceDetail(surfaceId: String?): ApiResponse<FaceWorkDetailBean> {
return apiCall {
val map = mutableMapOf<String, Any?>()
service.getTunnelingSurfaceDetail(surfaceId)
service.getTunnelAllDict()
}
}
/**
* 掘进-新增工作面
*/
suspend fun postTunnellingSurfaceAdd(tunnelingFaceAddBean: TunnelingFaceAddBean): ApiResponse<String> {
return apiCall {
service.postTunnellingSurfaceAdd(tunnelingFaceAddBean.toJson().toRequestBody())
}
}
}
@@ -0,0 +1,99 @@
package com.zmkg.coaloperation.db
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.zmkg.coaloperation.db.dao.TunnelRoofLithologyDao
import com.zmkg.coaloperation.db.dao.TunnelWorkingFaceDao
import com.zmkg.coaloperation.db.dao.TunnelWorkingFaceRecordDao
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
@Database(
entities = [
TunnelWorkingFaceEntity::class,
TunnelWorkingFaceRecordEntity::class,
TunnelRoofLithologyEntity::class,
],
version = 1,
exportSchema = true
)
abstract class AppDatabase : RoomDatabase() {
abstract fun tunnelWorkingFaceDao(): TunnelWorkingFaceDao
abstract fun tunnelWorkingFaceRecordDao(): TunnelWorkingFaceRecordDao
abstract fun tunnelRoofLithologyDao(): TunnelRoofLithologyDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"digitalCoalMiningPlatform.db"
)
.addCallback(object : Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
// 数据库首次创建时初始化数据
}
})
// .addMigrations(MIGRATION_1_2)
// .addMigrations(MIGRATION_2_3)
.build()
INSTANCE = instance
instance
}
}
}
}
val MIGRATION_1_2 = MigrationImpl(1, 2) { db ->
db.execSQL("""
CREATE TABLE IF NOT EXISTS `tunnel_roof_lithology` (
`lithologyId` INTEGER PRIMARY KEY NOT NULL,
`surfaceId` INTEGER NOT NULL,
`recordId` INTEGER NOT NULL,
`positionStart` INTEGER NOT NULL,
`positionEnd` INTEGER NOT NULL,
`lithologyType` TEXT NOT NULL,
`createTime` TEXT NOT NULL
)
""".trimIndent())
}
val MIGRATION_2_3 = MigrationImpl(2, 3) { db ->
db.execSQL("ALTER TABLE tunnel_roof_lithology RENAME TO tunnel_roof_lithology2")
db.execSQL("""
CREATE TABLE IF NOT EXISTS `tunnel_roof_lithology` (
`lithologyId` INTEGER PRIMARY KEY NOT NULL,
`surfaceId` INTEGER NOT NULL,
`recordId` INTEGER NOT NULL,
`positionStart` TEXT NOT NULL,
`positionEnd` TEXT NOT NULL,
`lithologyType` TEXT NOT NULL,
`createTime` TEXT NOT NULL
)
""".trimIndent())
db.execSQL("""
INSERT INTO tunnel_roof_lithology
SELECT lithologyId,surfaceId,recordId,CAST(positionStart AS TEXT),CAST(positionEnd AS TEXT),lithologyType,createTime
FROM tunnel_roof_lithology2
""".trimIndent())
db.execSQL("DROP TABLE tunnel_roof_lithology2");
}
class MigrationImpl(
startVersion: Int,
endVersion: Int,
private val block: (db: SupportSQLiteDatabase) -> Unit
) : Migration(startVersion, endVersion) {
override fun migrate(database: SupportSQLiteDatabase) {
block(database)
}
}
@@ -0,0 +1,44 @@
package com.zmkg.coaloperation.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
@Dao
interface TunnelRoofLithologyDao {
@Insert
fun insert(entity: TunnelRoofLithologyEntity): Long
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertList(list: MutableList<TunnelRoofLithologyEntity>): Array<Long>
@Update
fun update(entity: TunnelRoofLithologyEntity)
@Query("SELECT * FROM tunnel_roof_lithology WHERE recordId = :recordId ORDER BY createTime ASC")
fun getEntityList(recordId: Long): MutableList<TunnelRoofLithologyEntity>?
@Query("SELECT * FROM tunnel_roof_lithology WHERE dataState = :dataState ORDER BY createTime ASC")
fun getEntityListByState(dataState: String): MutableList<TunnelRoofLithologyEntity>?
@Query("SELECT * FROM tunnel_roof_lithology WHERE surfaceId = :surfaceId ORDER BY createTime ASC")
fun getEntityListByFaceId(surfaceId: Long): MutableList<TunnelRoofLithologyEntity>?
@Query("SELECT * FROM tunnel_roof_lithology WHERE surfaceId = :surfaceId AND recordId = :recordId ORDER BY createTime ASC")
fun getEntityListByRecordId(
surfaceId: Long,
recordId: Long
): MutableList<TunnelRoofLithologyEntity>?
@Query("SELECT * FROM tunnel_roof_lithology WHERE lithologyId = :lithologyId")
fun getEntityById(lithologyId: Long): TunnelRoofLithologyEntity?
@Query("DELETE FROM tunnel_roof_lithology")
fun deleteAll(): Int
@Query("DELETE FROM tunnel_roof_lithology WHERE recordId = :recordId")
fun deleteList(recordId: Long): Int
}
@@ -0,0 +1,34 @@
package com.zmkg.coaloperation.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
//import kotlinx.coroutines.flow.Flow
@Dao
interface TunnelWorkingFaceDao {
@Insert
fun insert(entity: TunnelWorkingFaceEntity): Long
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertList(list: MutableList<TunnelWorkingFaceEntity>): Array<Long>
@Update
fun update(entity: TunnelWorkingFaceEntity)
@Query("SELECT * FROM tunnel_working_face ORDER BY createTime DESC")
fun getEntityList(): MutableList<TunnelWorkingFaceEntity>?
@Query("SELECT * FROM tunnel_working_face WHERE dataState = :dataState ORDER BY createTime DESC")
fun getEntityListByState(dataState: String): MutableList<TunnelWorkingFaceEntity>?
@Query("SELECT * FROM tunnel_working_face WHERE surfaceId = :surfaceId")
fun getEntityById(surfaceId: Long): TunnelWorkingFaceEntity?
@Query("DELETE FROM tunnel_working_face")
fun deleteAll(): Int
}
@@ -0,0 +1,37 @@
package com.zmkg.coaloperation.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
//import kotlinx.coroutines.flow.Flow
@Dao
interface TunnelWorkingFaceRecordDao {
@Insert
fun insert(entity: TunnelWorkingFaceRecordEntity): Long
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertList(list: MutableList<TunnelWorkingFaceRecordEntity>): Array<Long>
@Update
fun update(entity: TunnelWorkingFaceRecordEntity)
@Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime DESC")
fun getEntityList(surfaceId: Long): MutableList<TunnelWorkingFaceRecordEntity>?
@Query("SELECT * FROM tunnel_working_face_record WHERE dataState = :dataState ORDER BY createTime DESC")
fun getEntityListByState(dataState: String): MutableList<TunnelWorkingFaceRecordEntity>?
@Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :recordId")
fun getEntityById(recordId: Long): TunnelWorkingFaceRecordEntity
@Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId AND latestRecordState = '1' ORDER BY createTime DESC LIMIT 1")
fun getLastEntity(surfaceId: Long): TunnelWorkingFaceRecordEntity?
@Query("DELETE FROM tunnel_working_face_record")
fun deleteAll(): Int
}
@@ -0,0 +1,4 @@
package com.zmkg.coaloperation.db.entity
class OtherEntity {
}
@@ -0,0 +1,66 @@
package com.zmkg.coaloperation.db.entity.tunnel
import android.os.Parcelable
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
import com.zmkg.coaloperation.utils.DateTimeUtil
import kotlinx.parcelize.Parcelize
import java.time.LocalDateTime
/**
* 掘进工作面-顶板岩性数据表
*/
@Parcelize
@Entity(tableName = "tunnel_roof_lithology")
class TunnelRoofLithologyEntity (
/**
* 岩性Id
*/
@PrimaryKey
var lithologyId: Long = 0,
/**
* 岩性类型名称
*/
var lithologyType: String = "",
/**
* 岩性值结束
*/
var positionEnd: String = "",
/**
* 岩性值起始
*/
var positionStart: String = "",
/**
* 工作面id
*/
var surfaceId: Long = 0,
/**
* 记录id
*/
var recordId: Long = 0,
/**
* 创建时间
*/
var createTime: String? = "",
/**
* 更新时间
*/
var updateTime: String? = DateTimeUtil.formatDateTime(LocalDateTime.now()),
/**
* 数据状态:0-默认值,原始数据,1-已修改数据
*/
var dataState: String = "0"
): Parcelable {
@Ignore
constructor():this(lithologyId = 0)
}
@@ -0,0 +1,148 @@
package com.zmkg.coaloperation.db.entity.tunnel
//import androidx.room.ColumnInfo
import android.os.Parcelable
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
import com.zmkg.coaloperation.utils.DateTimeUtil
import kotlinx.parcelize.Parcelize
import java.time.LocalDateTime
/**
* 掘进工作面表对应字段
*/
@Parcelize
@Entity(tableName = "tunnel_working_face")
class TunnelWorkingFaceEntity(
// @PrimaryKey(name = "faceId") val id: Int = 0
/**
* 工作面id,本地新增数据使用时间戳保证唯一性
*/
@PrimaryKey
var surfaceId: Long = 0,
/**
* 工作面名称
*/
var surfaceName: String? = "",
/**
* 总进尺
*/
var totalFootage: String? = "",
/**
* 累计进尺
*/
var accumulativeFootage: String? = "",
/**
* 剩余进尺
*/
var remainingFootage: String? = "",
/**
* 所属煤层编号
*/
var seamId: Long? = 0,
/**
* 所属煤层名称
*/
var seamName: String? = "",
/**
* 所属采区域编号
*/
var areaId: Long? = 0,
/**
* 所属采区域
*/
var areaName: String? = "",
/**
* 工作面方位角
*/
var surfaceAzimuth: String? = "",
/**
* 工作面巷高
*/
var surfaceHeight: String? = "",
/**
* 工作面巷宽
*/
var surfaceWidth: String? = "",
/**
* 巷道性质
*/
var tunnelNature: String? = "",
/**
* 计划工期开始日期
*/
var planStartDate: String? = "",
/**
* 计划工期结束日期
*/
var planEndDate: String? = "",
/**
* 地质类型
*/
var geologicalType: String? = "",
/**
* 水文地质类型
*/
var hydrogeologicalType: String? = "",
/**
* 煤层发火性
*/
var seamIgnition: String? = "",
/**
* 瓦斯含量
*/
var seamGas: String? = "",
/**
* 冲击地压危险性
*/
var seamBumpPressure: String? = "",
/**
* 支护形式
*/
var surfaceSupportForm: String? = "",
/**
* 创建时间
*/
var createTime: String? = "",
/**
* 更新时间
*/
var updateTime: String? = DateTimeUtil.formatDateTime(LocalDateTime.now()),
/**
* 数据状态:0-默认值,原始数据,1-已修改数据
*/
var dataState: String = "0",
@Ignore
var records: MutableList<TunnelWorkingFaceRecordEntity>? = null,
@Ignore
var latestRecord: TunnelWorkingFaceRecordEntity? = null,
@Ignore
var isExpandRecord: Boolean = false
): Parcelable
@@ -0,0 +1,100 @@
package com.zmkg.coaloperation.db.entity.tunnel
import android.os.Parcelable
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
import com.zmkg.coaloperation.utils.DateTimeUtil
import kotlinx.parcelize.Parcelize
import java.time.LocalDateTime
@Parcelize
@Entity(tableName = "tunnel_working_face_record")
data class TunnelWorkingFaceRecordEntity (
/**
* 记录id
*/
@PrimaryKey
var recordId: Long = 0,
/**
* 工作面id
*/
var surfaceId: Long = 0,
/**
* 施工日期
*/
var workingDate: String? = null,
/**
* 记录人
*/
var recordPerson: String? = null,
/**
* 施工班次
*/
var teamShift: String? = null,
/**
* 施工队伍id
*/
var teamId: String? = null,
/**
* 施工队伍名称
*/
var teamName: String? = null,
/**
* 带队班长
*/
var teamLeader: String? = null,
/**
* 本班进尺
*/
var workingFootage: String? = null,
/**
* 煤层倾角
*/
var seamDip: String? = null,
/**
* 煤层高度
*/
var seamHeight: String? = null,
/**
* 涌水量
*/
var waterYield: String? = null,
/**
* 创建时间
*/
var createTime: String? = "",
/**
* 更新时间
*/
var updateTime: String? = DateTimeUtil.formatDateTime(LocalDateTime.now()),
/**
* 数据状态:0-默认值,原始数据,1-已修改数据
*/
var dataState: String = "0",
/**
* 工作面中昨日记录状态:0-默认值,非昨日记录,1-昨日记录
*/
var latestRecordState: String = "0",
@Ignore
var mineWorkingLithologyList: MutableList<TunnelRoofLithologyEntity>? = null,
@Ignore
var operationType: String = "1"
): Parcelable
@@ -0,0 +1,51 @@
package com.zmkg.coaloperation.db.repository
import com.zmkg.coaloperation.db.dao.TunnelRoofLithologyDao
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class TunnelRoofLithologyRepository(private val dao: TunnelRoofLithologyDao) {
suspend fun getEntityList(recordId: Long) = withContext(Dispatchers.IO) {
dao.getEntityList(recordId)
}
suspend fun getEntityListByState(dataState: String) = withContext(Dispatchers.IO) {
dao.getEntityListByState(dataState)
}
suspend fun insert(entity: TunnelRoofLithologyEntity) = withContext(Dispatchers.IO) {
dao.insert(entity)
}
suspend fun insertList(list: MutableList<TunnelRoofLithologyEntity>) =
withContext(Dispatchers.IO) {
dao.insertList(list)
}
suspend fun update(entity: TunnelRoofLithologyEntity) = withContext(Dispatchers.IO) {
dao.update(entity)
}
suspend fun getEntityListByFaceId(surfaceId: Long) = withContext(Dispatchers.IO) {
dao.getEntityListByFaceId(surfaceId)
}
suspend fun getEntityListByRecordId(surfaceId: Long, recordId: Long) =
withContext(Dispatchers.IO) {
dao.getEntityListByRecordId(surfaceId, recordId)
}
suspend fun getEntityById(lithologyId: Long) = withContext(Dispatchers.IO) {
dao.getEntityById(lithologyId)
}
suspend fun deleteAll() = withContext(Dispatchers.IO) {
dao.deleteAll()
}
suspend fun deleteList(recordId: Long) = withContext(Dispatchers.IO) {
dao.deleteList(recordId)
}
}
@@ -0,0 +1,43 @@
package com.zmkg.coaloperation.db.repository
import com.zmkg.coaloperation.db.dao.TunnelWorkingFaceRecordDao
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class TunnelWorkingFaceRecordRepository(private val dao: TunnelWorkingFaceRecordDao) {
suspend fun getEntityList(surfaceId: Long) = withContext(Dispatchers.IO) {
dao.getEntityList(surfaceId)
}
suspend fun getEntityListByState(dataState: String) =
withContext(Dispatchers.IO) {
dao.getEntityListByState(dataState)
}
suspend fun insert(entity: TunnelWorkingFaceRecordEntity) = withContext(Dispatchers.IO) {
dao.insert(entity)
}
suspend fun insertList(list: MutableList<TunnelWorkingFaceRecordEntity>) =
withContext(Dispatchers.IO) {
dao.insertList(list)
}
suspend fun update(entity: TunnelWorkingFaceRecordEntity) = withContext(Dispatchers.IO) {
dao.update(entity)
}
suspend fun getEntityById(faceId: Long) = withContext(Dispatchers.IO) {
dao.getEntityById(faceId)
}
suspend fun getLastEntity(surfaceId: Long) = withContext(Dispatchers.IO) {
dao.getLastEntity(surfaceId)
}
suspend fun deleteAll() = withContext(Dispatchers.IO) {
dao.deleteAll()
}
}
@@ -0,0 +1,35 @@
package com.zmkg.coaloperation.db.repository
import com.zmkg.coaloperation.db.dao.TunnelWorkingFaceDao
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class TunnelWorkingFaceRepository(private val dao: TunnelWorkingFaceDao) {
suspend fun getEntityList() = withContext(Dispatchers.IO) {
dao.getEntityList()
}
suspend fun getEntityListByState(dataState: String) = withContext(Dispatchers.IO) {
dao.getEntityListByState(dataState)
}
suspend fun insert(entity: TunnelWorkingFaceEntity) = withContext(Dispatchers.IO) {
dao.insert(entity)
}
suspend fun insertList(list: MutableList<TunnelWorkingFaceEntity>) = withContext(Dispatchers.IO) {
dao.insertList(list)
}
suspend fun update(entity: TunnelWorkingFaceEntity) = withContext(Dispatchers.IO) {
dao.update(entity)
}
suspend fun getEntityById(faceId: Long) = withContext(Dispatchers.IO) {
dao.getEntityById(faceId)
}
suspend fun deleteAll() = withContext(Dispatchers.IO) {
dao.deleteAll()
}
}
@@ -0,0 +1,89 @@
package com.zmkg.coaloperation.db.viewmodel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.zmkg.coaloperation.db.AppDatabase
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.repository.TunnelRoofLithologyRepository
import kotlinx.coroutines.launch
class TunnelRoofLithologyViewModel(application: Application) : AndroidViewModel(application) {
private val repository: TunnelRoofLithologyRepository
init {
val dao = AppDatabase.getDatabase(application).tunnelRoofLithologyDao()
repository = TunnelRoofLithologyRepository(dao)
}
fun getEntityList(recordId: Long, action: (MutableList<TunnelRoofLithologyEntity>?) -> Unit) =
viewModelScope.launch {
val list: MutableList<TunnelRoofLithologyEntity>? = repository.getEntityList(recordId)
action(list)
}
fun getEntityListByState(
dataState: String,
action: (MutableList<TunnelRoofLithologyEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<TunnelRoofLithologyEntity>? =
repository.getEntityListByState(dataState)
action(list)
}
fun getEntityListByFaceId(
surfaceId: Long,
action: (MutableList<TunnelRoofLithologyEntity>?) -> Unit
) = viewModelScope.launch {
val list: MutableList<TunnelRoofLithologyEntity>? =
repository.getEntityListByFaceId(surfaceId)
action(list)
}
fun getEntityListByRecordId(
surfaceId: Long,
recordId: Long,
action: (MutableList<TunnelRoofLithologyEntity>?) -> Unit
) = viewModelScope.launch {
val list: MutableList<TunnelRoofLithologyEntity>? =
repository.getEntityListByRecordId(surfaceId, recordId)
action(list)
}
fun insertList(list: MutableList<TunnelRoofLithologyEntity>, action: () -> Unit = {}) =
viewModelScope.launch {
repository.insertList(list)
action()
}
fun insert(entity: TunnelRoofLithologyEntity, action: () -> Unit) = viewModelScope.launch {
repository.insert(entity)
action()
}
fun update(entity: TunnelRoofLithologyEntity, action: () -> Unit) = viewModelScope.launch {
repository.update(entity)
action()
}
fun getEntityById(faceId: Long, action: (TunnelRoofLithologyEntity) -> Unit) =
viewModelScope.launch {
val entity = repository.getEntityById(faceId)
entity?.let { action(it) }
}
fun deleteList(recordId: Long, action: () -> Unit = {}) =
viewModelScope.launch {
repository.deleteList(recordId)
action()
}
fun deleteAll(action: () -> Unit = {}) =
viewModelScope.launch {
repository.deleteAll()
action()
}
}
@@ -0,0 +1,70 @@
package com.zmkg.coaloperation.db.viewmodel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.zmkg.coaloperation.db.AppDatabase
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
import com.zmkg.coaloperation.db.repository.TunnelWorkingFaceRecordRepository
import kotlinx.coroutines.launch
class TunnelWorkingFaceRecordViewModel(application: Application) : AndroidViewModel(application) {
private val repository: TunnelWorkingFaceRecordRepository
init {
val dao = AppDatabase.getDatabase(application).tunnelWorkingFaceRecordDao()
repository = TunnelWorkingFaceRecordRepository(dao)
}
fun getEntityList(
surfaceId: Long,
action: (MutableList<TunnelWorkingFaceRecordEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<TunnelWorkingFaceRecordEntity>? =
repository.getEntityList(surfaceId)
action(list)
}
fun getEntityListByState(
dataState: String,
action: (MutableList<TunnelWorkingFaceRecordEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<TunnelWorkingFaceRecordEntity>? =
repository.getEntityListByState(dataState)
action(list)
}
fun insert(entity: TunnelWorkingFaceRecordEntity, action: () -> Unit) = viewModelScope.launch {
repository.insert(entity)
action()
}
fun insertList(list: MutableList<TunnelWorkingFaceRecordEntity>, action: () -> Unit = {}) =
viewModelScope.launch {
repository.insertList(list)
action()
}
fun update(entity: TunnelWorkingFaceRecordEntity, action: () -> Unit) = viewModelScope.launch {
repository.update(entity)
action()
}
fun getEntityById(recordId: Long) = viewModelScope.launch {
repository.getEntityById(recordId)
}
fun getLastEntity(surfaceId: Long, action: (TunnelWorkingFaceRecordEntity?) -> Unit) = viewModelScope.launch {
val record = repository.getLastEntity(surfaceId)
action(record)
}
fun deleteAll(action: () -> Unit={}) = viewModelScope.launch {
repository.deleteAll()
action()
}
}
@@ -0,0 +1,60 @@
package com.zmkg.coaloperation.db.viewmodel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.zmkg.coaloperation.db.AppDatabase
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.repository.TunnelWorkingFaceRepository
import kotlinx.coroutines.launch
class TunnelWorkingFaceViewModel(application: Application) : AndroidViewModel(application) {
private val repository: TunnelWorkingFaceRepository
init {
val dao = AppDatabase.getDatabase(application).tunnelWorkingFaceDao()
repository = TunnelWorkingFaceRepository(dao)
}
fun getEntityList(action: (MutableList<TunnelWorkingFaceEntity>?) -> Unit) =
viewModelScope.launch {
val list: MutableList<TunnelWorkingFaceEntity>? = repository.getEntityList()
action(list)
}
fun getEntityListByState(
dataState: String,
action: (MutableList<TunnelWorkingFaceEntity>?) -> Unit
) = viewModelScope.launch {
val list: MutableList<TunnelWorkingFaceEntity>? = repository.getEntityListByState(dataState)
action(list)
}
fun insert(entity: TunnelWorkingFaceEntity, action: () -> Unit) = viewModelScope.launch {
repository.insert(entity)
action()
}
fun insertList(list: MutableList<TunnelWorkingFaceEntity>, action: () -> Unit = {}) =
viewModelScope.launch {
repository.insertList(list)
action()
}
fun update(entity: TunnelWorkingFaceEntity, action: () -> Unit) = viewModelScope.launch {
repository.update(entity)
action()
}
fun getEntityById(faceId: Long, action: (TunnelWorkingFaceEntity) -> Unit) =
viewModelScope.launch {
val entity = repository.getEntityById(faceId)
entity?.let { action(it) }
}
fun deleteAll(action: () -> Unit = {}) =
viewModelScope.launch {
repository.deleteAll()
action()
}
}
@@ -2,10 +2,10 @@ package com.zmkg.coaloperation.superfuntion
import android.content.Context
import android.util.Log
import com.tencent.imsdk.BaseConstants
import com.tencent.qcloud.tuicore.TUILogin
import com.tencent.qcloud.tuicore.interfaces.TUICallback
import com.tencent.qcloud.tuicore.interfaces.TUILoginConfig
//import com.tencent.imsdk.BaseConstants
//import com.tencent.qcloud.tuicore.TUILogin
//import com.tencent.qcloud.tuicore.interfaces.TUICallback
//import com.tencent.qcloud.tuicore.interfaces.TUILoginConfig
import com.zmkg.coaloperation.MyApplication
import com.zmkg.coaloperation.im.signature.GenerateTestUserSig
import com.zmkg.coaloperation.local.DataStoreManager
@@ -25,54 +25,54 @@ fun Context.loginIm(userId: String,successCall: () -> Unit = {}) {
// successCall.invoke()
return
}
if (TUILogin.isUserLogined() && userId == TUILogin.getUserId()) {
// successCall.invoke()
return
}
// if (TUILogin.isUserLogined() && userId == TUILogin.getUserId()) {
//// successCall.invoke()
// return
// }
TUILogin.login(
this,
GenerateTestUserSig.SDKAPPID,
userId,
userSig,
TUILoginConfig(),
object : TUICallback() {
override fun onError(code: Int, desc: String) {
// successCall.invoke()
when (code) {
BaseConstants.ERR_SVR_ACCOUNT_USERSIG_EXPIRED,
BaseConstants.ERR_USER_SIG_EXPIRED -> {//UserSig过期
// CustomToast.makeText(this@loginIm,"im登录失败", Toast.LENGTH_SHORT).show()
}
}
Log.i(MyApplication.TAG, "imLogin errorCode = $code, errorInfo = $desc")
}
override fun onSuccess() {
// successCall.invoke()
Log.i(MyApplication.TAG, "imLogin onSuccess ")
}
})
// TUILogin.login(
// this,
// GenerateTestUserSig.SDKAPPID,
// userId,
// userSig,
// TUILoginConfig(),
// object : TUICallback() {
// override fun onError(code: Int, desc: String) {
//// successCall.invoke()
// when (code) {
// BaseConstants.ERR_SVR_ACCOUNT_USERSIG_EXPIRED,
// BaseConstants.ERR_USER_SIG_EXPIRED -> {//UserSig过期
//// CustomToast.makeText(this@loginIm,"im登录失败", Toast.LENGTH_SHORT).show()
// }
// }
// Log.i(MyApplication.TAG, "imLogin errorCode = $code, errorInfo = $desc")
// }
//
// override fun onSuccess() {
//// successCall.invoke()
// Log.i(MyApplication.TAG, "imLogin onSuccess ")
// }
// })
}
fun logout(successCall: () -> Unit = {}){
if (!TUILogin.isUserLogined()){
return
}
CoroutineScope(Dispatchers.Main).launch{
DataStoreManager.setUserName("")
}
TUILogin.logout(object : TUICallback(){
override fun onSuccess() {
successCall.invoke()
}
override fun onError(errorCode: Int, errorMessage: String?) {
Log.i("","IM logout errorCode = $errorCode, errorInfo = $errorMessage")
}
})
// if (!TUILogin.isUserLogined()){
// return
// }
// CoroutineScope(Dispatchers.Main).launch{
// DataStoreManager.setUserName("")
// }
// TUILogin.logout(object : TUICallback(){
// override fun onSuccess() {
// successCall.invoke()
// }
//
// override fun onError(errorCode: Int, errorMessage: String?) {
// Log.i("","IM logout errorCode = $errorCode, errorInfo = $errorMessage")
// }
// })
}
@@ -0,0 +1,28 @@
package com.zmkg.coaloperation.ui.mining
import android.os.Bundle
import android.view.View
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.databinding.ActivityMiningBinding
class MiningActivity :
BaseVMBActivity<TestViewModel, ActivityMiningBinding>(R.layout.activity_mining) {
override fun initView(savedInstanceState: Bundle?) {
TODO("Not yet implemented")
}
override fun initData() {
TODO("Not yet implemented")
}
override fun bindEvent() {
TODO("Not yet implemented")
}
override fun processClick(v: View?) {
TODO("Not yet implemented")
}
}
@@ -0,0 +1,342 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.widget.TextView
import androidx.core.view.isGone
import androidx.lifecycle.ViewModelProvider
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.bean.WorkOption
import com.zmkg.coaloperation.databinding.ActivityAddWorkingFaceBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceViewModel
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import com.zmkg.coaloperation.utils.DateTimeUtil
import com.zmkg.coaloperation.utils.DictUtils
import com.zmkg.coaloperation.utils.PickerUtil
import com.zmkg.coaloperation.utils.gone
import com.zmkg.coaloperation.utils.visible
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.time.LocalDateTime
/**
* 工作面
*/
class AddWorkingFaceActivity :
BaseVMBActivity<TunnelingViewModel, ActivityAddWorkingFaceBinding>(R.layout.activity_add_working_face) {
companion object {
private const val TAG = "WorkFaceActivity"
const val WORK_FACE_TYPE = "WorkFaceType"
const val FACE_WORK_DETAIL_DATA = "faceWorkDetailData"
}
enum class WorkFaceType {
ADD,//新增
EDIT,//修改
SEE//查看
}
private var currentFaceType = WorkFaceType.ADD
private val workingFaceViewModel: TunnelWorkingFaceViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceViewModel::class.java]
}
private var faceDetail: TunnelWorkingFaceEntity? = null
override fun initView(savedInstanceState: Bundle?) {
val stringExtra = intent.getStringExtra(WORK_FACE_TYPE)
if (TextUtils.isEmpty(stringExtra)) {
stringExtra == WorkFaceType.ADD.name
}
when (stringExtra) {
WorkFaceType.ADD.name -> {
currentFaceType = WorkFaceType.ADD
mBinding.confirm.text = "确认新增"
// mBinding.toolbarLay.titleTvName.text = "新增工作面"
mBinding.toolbarLay.title = "新增工作面"
mBinding.expandLayout.gone()
mBinding.imgExpand.visible()
}
WorkFaceType.EDIT.name -> {
currentFaceType = WorkFaceType.EDIT
mBinding.confirm.text = "确认修改"
// mBinding.toolbarLay.titleTvName.text = "修改工作面"
mBinding.toolbarLay.title = "修改工作面"
mBinding.expandLayout.visible()
mBinding.imgExpand.gone()
faceDetail =
intent.getParcelableExtra(WorkingFaceDetailActivity.FACE_WORK_DETAIL_DATA) as TunnelWorkingFaceEntity?
if (faceDetail == null) {
showToast("未查询到工作面数据")
return
}
faceDetail?.let {
loadDetail(it)
}
}
WorkFaceType.SEE.name -> {
currentFaceType = WorkFaceType.SEE
}
}
mBinding.etPlanStartDate.let {
it.setOnClickListener { _ ->
showDatePicker(it)
}
}
mBinding.etPlannEndDate.let {
it.setOnClickListener { _ ->
showDatePicker(it)
}
}
mBinding.tvSeamName.setOnClickListener { v ->
PickerUtil.showOptionPicker(this, "请选择所属煤层", DictUtils.seamList) { option ->
mBinding.tvSeamName.text = option.name
mBinding.tvSeamName.tag = option.id
seamAreaList = DictUtils.areaMap[option.id] ?: mutableListOf()
}
}
mBinding.tvAreaName.setOnClickListener { v ->
if (seamAreaList.isEmpty()) {
showToast("请先选择所属煤层")
return@setOnClickListener
}
PickerUtil.showOptionPicker(this, "请选择所属采区域", seamAreaList) { option ->
mBinding.tvAreaName.text = option.name
mBinding.tvAreaName.tag = option.id
}
}
mBinding.tvTunnelNature.setOnClickListener { v ->
PickerUtil.showOptionPicker(
this,
"请选择巷道性质",
DictUtils.seamRoadWayList
) { option ->
mBinding.tvTunnelNature.text = option.name
mBinding.tvTunnelNature.tag = option.id
}
}
}
private var seamAreaList: MutableList<WorkOption> = mutableListOf()
private fun showDatePicker(tv: TextView) {
tv.setOnClickListener {
PickerUtil.showTimePicker(this, tv.text.toString().trim()) { date ->
tv.text = date
}
}
// val cal = Calendar.getInstance()
// DatePickerDialog(
// this,
// { view, year, month, day ->
// textView.text = "$year-${numToString(month + 1)}-${numToString(day)}"
// },
// cal.get(Calendar.YEAR),
// cal.get(Calendar.MONTH),
// cal.get(Calendar.DAY_OF_MONTH)
// )
// .show()
}
private fun numToString(num: Int): String {
return if (num < 10) "0${num}" else num.toString()
}
override fun initData() {
}
override fun bindEvent() {
mBinding.apply {
addClickViews(imgExpand, confirm)
}
}
override fun createObserve() {
super.createObserve()
}
override fun processClick(v: View?) {
when (v?.id) {
R.id.imgExpand -> {
if (mBinding.expandLayout.isGone) {
mBinding.expandLayout.visible()
mBinding.imgExpand.setImageResource(R.drawable.ic_arrow_up_white2)
} else {
mBinding.expandLayout.gone()
mBinding.imgExpand.setImageResource(R.drawable.ic_arrow_down_white2)
}
}
R.id.confirm -> {
if (currentFaceType == WorkFaceType.ADD) {
addNewFace()
return
}
if (currentFaceType == WorkFaceType.EDIT) {
editFace()
return
}
}
}
}
private fun loadDetail(it: TunnelWorkingFaceEntity) {
mBinding.etWorkfaceName.setText(it.surfaceName)
mBinding.etTotalFootage.setText("${it.totalFootage}")
mBinding.tvSeamName.tag = it.seamId
mBinding.tvSeamName.text = it.seamName
mBinding.tvAreaName.tag = it.areaId
mBinding.tvAreaName.text = it.areaName
mBinding.etSurfaceAzimuth.setText(it.surfaceAzimuth)
mBinding.etSurfaceHeight.setText(it.surfaceHeight)
mBinding.etSurfaceWidth.setText(it.surfaceWidth)
mBinding.tvTunnelNature.text = it.tunnelNature
mBinding.etPlanStartDate.text = it.planStartDate
mBinding.etPlannEndDate.text = it.planEndDate
mBinding.etGeologicalType.setText(it.geologicalType)
mBinding.etHydrogeologicalType.setText(it.hydrogeologicalType)
mBinding.etSeamIgnition.setText(it.seamIgnition)
mBinding.etSeamGas.setText(it.seamGas)
mBinding.etSeamBumpPressure.setText(it.seamBumpPressure)
mBinding.etSurfaceSupportForm.setText(it.surfaceSupportForm)
}
private fun addNewFace() {
val workingFaceName = mBinding.etWorkfaceName.text.toString().trim()
if (TextUtils.isEmpty(workingFaceName)) {
showToast("请输入工作面名称")
return
}
val totalFootageStr = mBinding.etTotalFootage.text.toString().trim()
if (TextUtils.isEmpty(totalFootageStr)) {
showToast("请输入总进尺")
return
}
try {
totalFootageStr.toDouble()
} catch (e: Exception) {
e.printStackTrace()
showToast("总进尺数据非数字格式,请确认")
return
}
// mViewModel.postTunnellingSurfaceAdd(
// TunnelingFaceAddBean(
// surfaceName = mBinding.etWorkfaceName.text.toString(),
// totalFootage = mBinding.etTotalFootage.text.toString()
// )
// )
val workingFaceEntity = TunnelWorkingFaceEntity().also {
it.surfaceId = System.currentTimeMillis()
it.surfaceName = workingFaceName
it.totalFootage = totalFootageStr
it.seamName = mBinding.tvSeamName.text.toString().trim()
if (it.seamName!!.isNotBlank()) {
it.seamId = mBinding.tvSeamName.tag.toString().toLong()
}
it.areaName = mBinding.tvAreaName.text.toString().trim()
if (it.areaName!!.isNotBlank()) {
it.areaId = mBinding.tvAreaName.tag.toString().toLong()
}
it.surfaceAzimuth = mBinding.etSurfaceAzimuth.text.toString().trim()
it.surfaceHeight = mBinding.etSurfaceHeight.text.toString().trim()
it.surfaceWidth = mBinding.etSurfaceWidth.text.toString().trim()
it.tunnelNature = mBinding.tvTunnelNature.text.toString().trim()
it.planStartDate = mBinding.etPlanStartDate.text.toString().trim()
it.planEndDate = mBinding.etPlannEndDate.text.toString().trim()
it.geologicalType = mBinding.etGeologicalType.text.toString().trim()
it.hydrogeologicalType = mBinding.etHydrogeologicalType.text.toString().trim()
it.seamIgnition = mBinding.etSeamIgnition.text.toString().trim()
it.seamGas = mBinding.etSeamGas.text.toString().trim()
it.seamBumpPressure = mBinding.etSeamBumpPressure.text.toString().trim()
it.surfaceSupportForm = mBinding.etSurfaceSupportForm.text.toString().trim()
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
it.dataState = "1"
}
workingFaceViewModel.insert(workingFaceEntity) {
showToast("工作面新增完成")
EventBus.getDefault().post(workingFaceEntity)
finish()
}
}
private fun editFace() {
val workingFaceName = mBinding.etWorkfaceName.text.toString().trim()
if (TextUtils.isEmpty(workingFaceName)) {
showToast("请输入工作面名称")
return
}
val totalFootageStr = mBinding.etTotalFootage.text.toString().trim()
if (TextUtils.isEmpty(totalFootageStr)) {
showToast("请输入总进尺")
return
}
try {
totalFootageStr.toDouble()
} catch (e: Exception) {
e.printStackTrace()
showToast("总进尺数据非数字格式,请确认")
return
}
val workingFaceEntity = TunnelWorkingFaceEntity().also {
it.surfaceId = faceDetail!!.surfaceId
it.surfaceName = workingFaceName
it.totalFootage = totalFootageStr
it.seamName = mBinding.tvSeamName.text.toString().trim()
if (it.seamName!!.isNotBlank()) {
it.seamId = string2num(mBinding.tvSeamName.tag.toString())
}
it.areaName = mBinding.tvAreaName.text.toString().trim()
if (it.areaName!!.isNotBlank()) {
it.areaId = string2num(mBinding.tvAreaName.tag.toString())
}
it.surfaceAzimuth = mBinding.etSurfaceAzimuth.text.toString().trim()
it.surfaceHeight = mBinding.etSurfaceHeight.text.toString().trim()
it.surfaceWidth = mBinding.etSurfaceWidth.text.toString().trim()
it.tunnelNature = mBinding.tvTunnelNature.text.toString().trim()
it.planStartDate = mBinding.etPlanStartDate.text.toString().trim()
it.planEndDate = mBinding.etPlannEndDate.text.toString().trim()
it.geologicalType = mBinding.etGeologicalType.text.toString().trim()
it.hydrogeologicalType = mBinding.etHydrogeologicalType.text.toString().trim()
it.seamIgnition = mBinding.etSeamIgnition.text.toString().trim()
it.seamGas = mBinding.etSeamGas.text.toString().trim()
it.seamBumpPressure = mBinding.etSeamBumpPressure.text.toString().trim()
it.surfaceSupportForm = mBinding.etSurfaceSupportForm.text.toString().trim()
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
it.dataState = "1"
}
workingFaceViewModel.update(workingFaceEntity) {
showToast("工作面修改完成")
EventBus.getDefault().post(workingFaceEntity)
finish()
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onWorkingFaceEvent(event: TunnelWorkingFaceEntity) {
}
private fun string2num(text: String?): Long {
return if (text.isNullOrBlank()) 0 else text.toLong()
}
}
@@ -0,0 +1,346 @@
package com.zmkg.coaloperation.ui.tunneling.activity
//import com.tencent.qcloud.tuikit.timcommon.util.SoftKeyBoardUtil
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.adapter.TunnelRoofLithologyAdapter
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import com.zmkg.coaloperation.databinding.ActivityAddWorkingFaceRecordBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
import com.zmkg.coaloperation.superfuntion.hideLoading
import com.zmkg.coaloperation.superfuntion.showLoading
import com.zmkg.coaloperation.superfuntion.toJson
import com.zmkg.coaloperation.utils.DateTimeUtil
import com.zmkg.coaloperation.utils.DictUtils
import com.zmkg.coaloperation.utils.ExcelExportUtils
import com.zmkg.coaloperation.utils.FileUtils
import com.zmkg.coaloperation.utils.KeyboardUtil
import com.zmkg.coaloperation.utils.PickerUtil
import com.zmkg.coaloperation.utils.clickWithDebounce
import com.zmkg.coaloperation.utils.formatDecimalString
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.time.LocalDateTime
/**
* 开始记录
*/
class AddWorkingFaceRecordActivity :
BaseVMBActivity<TestViewModel, ActivityAddWorkingFaceRecordBinding>(R.layout.activity_add_working_face_record) {
companion object {
const val TAG = "AddWorkingPointActivity"
const val SHOW_TYPE = "showType"
const val FACE_NAME = "faceName"
const val FACE_ID = "faceId"
const val FACE_RECORD = "faceRecord"
}
private var showType = 0
private var surfaceId: Long = 0
private var recordId: Long = 0
private var faceName: String? = null
private var faceRecord: TunnelWorkingFaceRecordEntity? = null
private val workingFaceRecordViewModel: TunnelWorkingFaceRecordViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceRecordViewModel::class.java]
}
private val roofLithologyViewModel: TunnelRoofLithologyViewModel by lazy {
ViewModelProvider(this)[TunnelRoofLithologyViewModel::class.java]
}
private val roofLithologyList: MutableList<TunnelRoofLithologyEntity> = mutableListOf()
private val roofLithologyAdapter: TunnelRoofLithologyAdapter by lazy {
TunnelRoofLithologyAdapter(roofLithologyList)
}
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.vLine.visibility = View.GONE
showType = intent.extras?.getInt(SHOW_TYPE) ?: 0
mBinding.toolbarLay.title = if (showType == 0) "开始记录" else "修改记录"
mBinding.btnSave.text = if (showType == 0) "保存" else "修改"
// mBinding.toolbarLay.rightText = ""
mBinding.root.setOnClickListener { v ->
window?.let {
// SoftKeyBoardUtil.hideKeyBoard(window)
KeyboardUtil.hideKeyboard(v)
}
}
mBinding.tvWorkingDate.let {
it.setOnClickListener { v ->
PickerUtil.showTimePicker(this, it.text.toString().trim()) { date ->
it.text = date
}
}
}
faceName = intent.getStringExtra(FACE_NAME)
if (showType == 0) {
surfaceId = intent.getLongExtra(FACE_ID, 0L)
recordId = System.currentTimeMillis()
} else if (showType == 1) {
faceRecord = intent.getParcelableExtra(FACE_RECORD)
if (faceRecord == null) {
showToast("未查询到当前记录")
return
}
surfaceId = faceRecord!!.surfaceId
recordId = faceRecord!!.recordId
loadFaceRecord()
}
mBinding.tvFaceName.text = faceName
mBinding.tvWorkTeam.setOnClickListener { v ->
PickerUtil.showOptionPicker(this, "选择施工队伍", DictUtils.workTeamList) { option ->
mBinding.tvWorkTeam.text = option.name
mBinding.tvWorkTeam.tag = option.id
}
}
mBinding.tvTeamShift.setOnClickListener { v ->
PickerUtil.showOptionPicker(this, "请选择施工班次", DictUtils.workShiftList) { option ->
mBinding.tvTeamShift.text = option.name
mBinding.tvTeamShift.tag = option.id
}
}
mBinding.btnAddPoint.clickWithDebounce {
addRockPoint()
}
mBinding.btnSave.clickWithDebounce {
if (showType == 0) {
judgeInputParam {
saveFaceRecord()
}
return@clickWithDebounce
}
judgeInputParam {
updateFaceRecord()
}
}
mBinding.btnExport.clickWithDebounce {
judgeInputParam {
exportExcelFile()
}
}
mBinding.rvLithology.let {
it.layoutManager = LinearLayoutManager(this)
it.adapter = roofLithologyAdapter
}
if (showType == 0) {
addRockPoint()
} else {
roofLithologyViewModel.getEntityList(recordId) {
if (it != null && it.isNotEmpty()) {
roofLithologyList.addAll(it)
roofLithologyAdapter.notifyDataSetChanged()
} else {
addRockPoint()
}
}
}
}
// TODO: 新增记录添加岩性数据,如果是修改,应该合并数据,后续处理
private fun addRockPoint() {
roofLithologyList.add(TunnelRoofLithologyEntity().also {
it.lithologyId = System.currentTimeMillis()
it.surfaceId = surfaceId
it.recordId = recordId
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
it.dataState = "1"
})
// roofLithologyAdapter.notifyDataSetChanged()
val pos = roofLithologyList.size
roofLithologyAdapter.notifyItemInserted(pos)
roofLithologyAdapter.notifyItemRangeChanged(pos, pos + 1)
}
override fun initData() {
}
override fun bindEvent() {
}
override fun processClick(v: View?) {
}
private fun saveFaceRecord() {
val faceRecord = TunnelWorkingFaceRecordEntity().also {
it.recordId = recordId
it.surfaceId = surfaceId
it.workingDate = mBinding.tvWorkingDate.text.toString()
it.teamShift = mBinding.tvTeamShift.text.toString()
it.teamName = mBinding.tvWorkTeam.text.toString()
it.teamId = mBinding.tvWorkTeam.tag.toString()
it.teamLeader = mBinding.etTeamLeader.text.toString().trim()
it.workingFootage = mBinding.etWorkingFootage.text.toString().trim().formatDecimalString()
it.seamDip = mBinding.etSeamDip.text.toString().trim().formatDecimalString()
it.seamHeight = mBinding.etSeamHeight.text.toString().trim().formatDecimalString()
it.recordPerson = mBinding.etRecordPerson.text.toString().trim()
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
it.dataState = "1"
}
Log.d(TAG, "saveFaceRecord: ${roofLithologyList.toJson()}")
workingFaceRecordViewModel.insert(faceRecord) {
roofLithologyViewModel.insertList(roofLithologyList) {
EventBus.getDefault().post(faceRecord)
finish()
}
}
}
private fun loadFaceRecord() {
faceRecord?.let {
mBinding.tvWorkingDate.text = it.workingDate
mBinding.tvTeamShift.text = DictUtils.getTeamShift(it.teamShift)
mBinding.tvTeamShift.tag = it.teamShift
mBinding.tvWorkTeam.text = it.teamName
mBinding.tvWorkTeam.tag = it.teamId
mBinding.etTeamLeader.setText(it.teamLeader)
mBinding.etWorkingFootage.setText(it.workingFootage)
mBinding.etSeamDip.setText(it.seamDip)
mBinding.etSeamHeight.setText(it.seamHeight)
mBinding.etRecordPerson.setText(it.recordPerson)
}
}
private fun updateFaceRecord() {
val faceRecord = TunnelWorkingFaceRecordEntity().also {
it.recordId = recordId
it.surfaceId = surfaceId
it.workingDate = mBinding.tvWorkingDate.text.toString()
it.teamShift = mBinding.tvTeamShift.tag.toString()
it.teamName = mBinding.tvWorkTeam.text.toString()
it.teamId = mBinding.tvWorkTeam.tag.toString()
it.teamLeader = mBinding.etTeamLeader.text.toString().trim()
it.workingFootage = mBinding.etWorkingFootage.text.toString().trim().formatDecimalString()
it.seamDip = mBinding.etSeamDip.text.toString().trim().formatDecimalString()
it.seamHeight = mBinding.etSeamHeight.text.toString().trim().formatDecimalString()
it.recordPerson = mBinding.etRecordPerson.text.toString().trim()
it.createTime = DateTimeUtil.formatDateTime(LocalDateTime.now())
it.dataState = "1"
}
workingFaceRecordViewModel.update(faceRecord) {
roofLithologyViewModel.deleteList(recordId) {
roofLithologyViewModel.insertList(roofLithologyList) {
EventBus.getDefault().post(faceRecord)
finish()
}
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFaceRecordEvent(event: TunnelWorkingFaceRecordEntity) {
}
private fun judgeInputParam(acton:()-> Unit) {
list.clear()
list.add(TunnelWorkingItem(name = "工作面名称", value = faceName))
val workingDate = mBinding.tvWorkingDate.text.toString().trim()
if (workingDate.isBlank()) {
showToast("请选择施工日期")
return
}
list.add(TunnelWorkingItem(name = "施工日期", value = workingDate))
val teamShift = mBinding.tvTeamShift.text.toString().trim()
if (teamShift.isBlank()) {
showToast("请选择施工班次")
return
}
list.add(TunnelWorkingItem(name = "施工班次", value = teamShift))
val workTeam = mBinding.tvWorkTeam.text.toString().trim()
if (workTeam.isBlank()) {
showToast("请选择施工队伍")
return
}
list.add(TunnelWorkingItem(name = "施工队伍", value = workTeam))
val teamLeader = mBinding.etTeamLeader.text.toString().trim()
if (teamLeader.isBlank()) {
showToast("请输入带班队长")
return
}
list.add(TunnelWorkingItem(name = "带班队长", value = teamLeader))
val workingFootage = mBinding.etWorkingFootage.text.toString().trim().formatDecimalString()
if (workingFootage.isBlank()) {
showToast("请输入本班进尺")
return
}
list.add(TunnelWorkingItem(name = "本班进尺", value = workingFootage))
val seamDip = mBinding.etSeamDip.text.toString().trim().formatDecimalString()
if (seamDip.isBlank()) {
showToast("请输入煤层倾角")
return
}
list.add(TunnelWorkingItem(name = "煤层倾角", value = seamDip))
val seamHeight = mBinding.etSeamHeight.text.toString().trim().formatDecimalString()
if (seamHeight.isBlank()) {
showToast("请输入煤层高")
return
}
list.add(TunnelWorkingItem(name = "煤层高", value = seamHeight))
val recordPerson = mBinding.etRecordPerson.text.toString().trim()
if (recordPerson.isBlank()) {
showToast("请输入填写人")
return
}
list.add(TunnelWorkingItem(name = "记录人", value = recordPerson))
val emptyDataList = roofLithologyList.filter {
it.positionStart.isBlank() || it.positionEnd.isBlank() || it.lithologyType.isBlank()
}
if (emptyDataList.isNotEmpty()) {
showToast("顶板岩性中存在部分编录点数据为空")
return
}
list.add(TunnelWorkingItem(name = "顶板岩性", value = "", items = roofLithologyList))
acton()
}
private val list: MutableList<TunnelWorkingItem> = mutableListOf()
private fun exportExcelFile() {
showLoading()
val fileName = "${faceName}_${mBinding.tvWorkingDate.text}_${System.currentTimeMillis()}.xlsx"
val filePath = FileUtils.getFilePath(fileName)
ExcelExportUtils.exportToExcel(list, filePath) {
window.decorView.postDelayed({
hideLoading()
showToast("Excel导出完成")
}, 1500)
}
}
}
@@ -1,93 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import com.tencent.qcloud.tuikit.timcommon.util.SoftKeyBoardUtil
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.databinding.ActivityAddWorkingPointBinding
import com.zmkg.coaloperation.databinding.ListItemRockBinding
import com.zmkg.coaloperation.utils.PickerUtil
import com.zmkg.coaloperation.utils.clickWithDebounce
/**
* 开始记录
*/
class AddWorkingPointActivity :
BaseVMBActivity<TestViewModel, ActivityAddWorkingPointBinding>(R.layout.activity_add_working_point) {
companion object {
const val SHOW_TYPE = "showType"
const val FACE_NAME = "faceName"
}
private var showType = 0
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.vLine.visibility = View.GONE
showType = intent.extras?.getInt(SHOW_TYPE) ?: 0
mBinding.toolbarLay.rightText =
if (showType == 0) "开始记录" else "修改记录"
mBinding.root.setOnClickListener {
window?.let {
SoftKeyBoardUtil.hideKeyBoard(window)
}
}
mBinding.tvWorkDate.clickWithDebounce {
PickerUtil.showTimePicker(this) {date->
mBinding.tvWorkDate.text = date
}
}
mBinding.tvFaceName.text = intent.getStringExtra(FACE_NAME)
mBinding.toolbarLay.title = intent.getStringExtra(FACE_NAME)
val teamList = mutableListOf<String>()
teamList.add("A地区第1施工队")
teamList.add("A地区第2施工队")
teamList.add("B地区第1施工队")
teamList.add("B地区第2施工队")
teamList.add("C地区第1施工队")
teamList.add("C地区第2施工队")
teamList.add("D地区第1施工队")
teamList.add("D地区第2施工队")
mBinding.tvWorkTeam.clickWithDebounce {
PickerUtil.showOptionsPicker(this, teamList) {team->
mBinding.tvWorkTeam.text = team
}
}
val workTypeList = mutableListOf<String>()
workTypeList.add("早班")
workTypeList.add("中班")
workTypeList.add("晚班")
mBinding.tvWorkType.clickWithDebounce {
PickerUtil.showOptionsPicker(this, workTypeList) {team->
mBinding.tvWorkType.text = team
}
}
mBinding.btnAddPoint.clickWithDebounce {
addRockPoint()
}
addRockPoint()
}
private fun addRockPoint() {
val itemBinding = ListItemRockBinding.inflate(
LayoutInflater.from(this),
mBinding.llRockPoint,
false
)
mBinding.llRockPoint.addView(itemBinding.root)
}
override fun initData() {
}
override fun bindEvent() {
}
override fun processClick(v: View?) {
}
}
@@ -1,19 +1,23 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.adapter.TunnelWorkingFaceAdapter
import com.zmkg.coaloperation.adapter.TunnelWorkingFaceRecordAdapter
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.databinding.ActivityTunnelingBinding
import com.zmkg.coaloperation.event.TunnelingWorkFaceRefreshEvent
import com.zmkg.coaloperation.ui.tunneling.adapter.TunnelingHomeAdapter
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeBean
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceViewModel
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import com.zmkg.coaloperation.utils.DictUtils
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* 掘进首页列表
@@ -21,131 +25,88 @@ import kotlinx.coroutines.launch
class TunnelingActivity :
BaseVMBActivity<TunnelingViewModel, ActivityTunnelingBinding>(R.layout.activity_tunneling) {
private val tunnelingHomeAdapter: TunnelingHomeAdapter by lazy {
TunnelingHomeAdapter {index,surfaceId->
mViewModel.getTunnelingHomeItemData(index,surfaceId)
}
companion object {
const val TAG = "TunnelingActivity"
}
private val workingFaceViewModel: TunnelWorkingFaceViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceViewModel::class.java]
}
private val workingFaceRecordViewModel: TunnelWorkingFaceRecordViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceRecordViewModel::class.java]
}
private val workingFaceList = mutableListOf<TunnelWorkingFaceEntity>()
private val workingFaceAdapter: TunnelWorkingFaceAdapter by lazy {
TunnelWorkingFaceAdapter(workingFaceList).apply {
setOnItemChildClickListener { _, view, position ->
if (view.id == R.id.llWorkingFace) {
toActivity(WorkingFaceStatisticsActivity::class.java, Bundle().apply {
putParcelable(WorkingFaceStatisticsActivity.FACE_DETAIL, workingFaceList[position])
})
return@setOnItemChildClickListener
}
if (view.id == R.id.ivExpandRecord) {
val expandState = view.tag.toString().toBooleanStrictOrNull() ?: false
workingFaceList[position].isExpandRecord = expandState.not()
if (workingFaceList[position].isExpandRecord) {
getFaceRecord(position)
} else {
notifyItemChanged(position)
}
return@setOnItemChildClickListener
}
if (view.id == R.id.start_record) {
toActivity(AddWorkingFaceRecordActivity::class.java, Bundle().apply {
putLong(
AddWorkingFaceRecordActivity.FACE_ID,
workingFaceList[position].surfaceId
)
putString(
AddWorkingFaceRecordActivity.FACE_NAME,
workingFaceList[position].surfaceName
)
putInt(AddWorkingFaceRecordActivity.SHOW_TYPE, 0)
})
}
}
}
}
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.rightText = "新增工作面"
mBinding.rvList.adapter = tunnelingHomeAdapter
mBinding.rvList.let {
it.layoutManager = LinearLayoutManager(this)
it.adapter = workingFaceAdapter
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initData() {
mViewModel.getTunnelingHomeData()
DictUtils.initData()
workingFaceViewModel.getEntityList { it ->
if (it.isNullOrEmpty()) {
return@getEntityList
}
workingFaceList.clear()
workingFaceList.addAll(it)
workingFaceAdapter.notifyDataSetChanged()
}
}
// HttpUtil.get(UrlConst.FACE_LIST, doSuccess = {
// val type = object : TypeToken<MutableList<TunnelingHomeBean>>() {}
// val list: MutableList<TunnelingHomeBean>? = it.toJsonString().toType(typeToken = type)
// if (list.isNullOrEmpty()) {
// ToastTool.toastShort(this@TunnelingActivity, "未查询到数据")
// return@get
// }
// tunnelingHomeAdapter.setNewInstance(list)
// getRecordList(0) {}
// }, doFailure = { code, msg ->
// if (msg.isNullOrEmpty()) {
// return@get
// }
// ToastTool.toastShort(this@TunnelingActivity, msg)
// })
//
//// val gson = Gson()
//// val type: Type = object : TypeToken<MutableList<TunnelingHomeBean>>() {}.type
//// val mutableListOf = gson.fromJson<MutableList<TunnelingHomeBean>>(jsonString, type)
////
//// tunnelingHomeAdapter.setNewInstance(mutableListOf)
//
// }
//
// fun getRecordList(index:Int, action:()-> Unit) {
// val faceId: Long? = tunnelingHomeAdapter.data[index].surfaceId
// HttpUtil.get("${UrlConst.RECORD_LIST + faceId}", doSuccess = {
// val type = object : TypeToken<MutableList<TunnelingHomeItemBean>>() {}
// val list: MutableList<TunnelingHomeItemBean>? = it.toJsonString().toType(typeToken = type)
// if (list.isNullOrEmpty()) {
// ToastTool.toastShort(this@TunnelingActivity, "未查询到数据")
// return@get
// }
// tunnelingHomeAdapter.data[0].contentList = list
// val holder = mBinding.rvList.findViewHolderForLayoutPosition(0)
// val rvContent = holder?.itemView?.findViewById<RecyclerView>(R.id.rv_content)
// rvContent?.adapter.let { adapter ->
// if (adapter is TunnelingHomeListAdapter) {
// adapter.data.clear()
// adapter.data.addAll(list)
// adapter.notifyDataSetChanged()
// }
// }
// action()
// }, doFailure = { code, msg ->
// if (msg.isNullOrEmpty()) {
// return@get
// }
// ToastTool.toastShort(this@TunnelingActivity, msg)
// })
// }
override fun createObserve() {
super.createObserve()
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
mViewModel.tunnelingHomeList.collectLatest { list ->
list?.reverse()
tunnelingHomeAdapter.setNewInstance(list)
}
}
}
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
mViewModel.tunnelingHomeItemList.collectLatest { list ->
if (list.isNullOrEmpty()) {
showToast("未查询到数据")
return@collectLatest
}
tunnelingHomeAdapter.data[mViewModel.itemIndex.value].contentList = list
tunnelingHomeAdapter.notifyDataSetChanged()
}
}
}
}
override fun bindEvent() {
tunnelingHomeAdapter.setOnItemClickListener { adapter, view, position ->
val tunnelingHomeBean = adapter.data.get(position) as TunnelingHomeBean
// 跳转到工作面详情
toActivity(WorkingFaceDetailActivity::class.java, Bundle().apply {
putString("surfaceId", tunnelingHomeBean.surfaceId)
})
}
tunnelingHomeAdapter.setOnItemChildClickListener { adapter, view, position ->
val tunnelingHomeBean = adapter.data.get(position) as TunnelingHomeBean
// 跳转到开始记录页面
if (view.id == R.id.start_record) {
toActivity(AddWorkingPointActivity::class.java, Bundle().apply {
putString(AddWorkingPointActivity.FACE_NAME, tunnelingHomeBean.surfaceName)
putInt(AddWorkingPointActivity.SHOW_TYPE, 0)
})
}
}
mBinding.toolbarLay.titleTvRight.setOnClickListener {
toActivity(WorkFaceActivity::class.java,Bundle().apply {
putString("WorkFaceType", WorkFaceActivity.WorkFaceType.ADD.name)
toActivity(AddWorkingFaceActivity::class.java, Bundle().apply {
putString(AddWorkingFaceActivity.WORK_FACE_TYPE, AddWorkingFaceActivity.WorkFaceType.ADD.name)
})
}
}
@@ -155,8 +116,72 @@ class TunnelingActivity :
}
override fun onMessageEvent(event: Any?) {
if (event is TunnelingWorkFaceRefreshEvent) {
mViewModel.getTunnelingHomeData()
}
@SuppressLint("NotifyDataSetChanged")
private fun getFaceRecord(position: Int) {
val surfaceId = workingFaceList[position].surfaceId
workingFaceRecordViewModel.getEntityList(surfaceId) { recordEntities ->
if (recordEntities.isNullOrEmpty()) {
workingFaceAdapter.notifyItemChanged(position)
return@getEntityList
}
val recordAdapter = getRecordAdapter(position)
recordAdapter.apply {
list.clear()
// list.add(FACE_RECORD_HEADER)
list.addAll(recordEntities)
notifyDataSetChanged()
}
workingFaceAdapter.notifyItemChanged(position)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onWorkingFaceEvent(event: TunnelWorkingFaceEntity) {
val index = workingFaceList.indexOfFirst { it.surfaceId == event.surfaceId }
if (index == -1) {
//新增工作面
val insertIndex = 0
workingFaceList.add(0,event)
workingFaceAdapter.notifyItemInserted(insertIndex)
workingFaceAdapter.notifyItemRangeChanged(insertIndex, insertIndex+1)
return
}
//修改工作面
workingFaceViewModel.getEntityById(event.surfaceId) { entity ->
workingFaceList[index] = entity
workingFaceAdapter.notifyItemChanged(index)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFaceRecordEvent(event: TunnelWorkingFaceRecordEntity) {
val position = workingFaceList.indexOfFirst { it.surfaceId == event.surfaceId }
val faceEntity = workingFaceList[position]
if (faceEntity.isExpandRecord.not()) {
return
}
faceEntity.records?.let { records ->
val index = records.indexOfFirst { it.recordId == event.recordId }
if (index == -1) {
records.add(0,event)
} else {
records[index] = event
}
}
val recordAdapter = getRecordAdapter(position)
recordAdapter.notifyDataSetChanged()
workingFaceAdapter.notifyItemChanged(position)
}
@SuppressLint("SuspiciousIndentation")
private fun getRecordAdapter(position:Int):TunnelWorkingFaceRecordAdapter {
val viewHolder =
mBinding.rvList.findViewHolderForLayoutPosition(position) as TunnelWorkingFaceAdapter.VH
return viewHolder.binding.rvFaceRecord.adapter as TunnelWorkingFaceRecordAdapter
}
}
@@ -1,160 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.databinding.ActivityWorkFaceBinding
import com.zmkg.coaloperation.event.TunnelingWorkFaceRefreshEvent
import com.zmkg.coaloperation.ui.tunneling.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingFaceAddBean
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
/**
* 工作面
*/
class WorkFaceActivity :
BaseVMBActivity<TunnelingViewModel, ActivityWorkFaceBinding>(R.layout.activity_work_face) {
companion object {
const val WORK_FACE_TYPE = "WorkFaceType"
const val FACE_WORK_DETAIL_DATA = "faceWorkDetailData"
}
var currentFaceType = WorkFaceType.ADD
enum class WorkFaceType {
ADD,//新增
EDIT,//修改
SEE//查看
}
override fun initView(savedInstanceState: Bundle?) {
val stringExtra = intent.getStringExtra(WORK_FACE_TYPE)
if (TextUtils.isEmpty(stringExtra)) {
finish()
} else if (stringExtra == WorkFaceType.ADD.name) {
currentFaceType = WorkFaceType.ADD
mBinding.toolbarLay.titleTvName.text = "新增工作面"
mBinding.confirm.text = "确认新增"
} else if (stringExtra == WorkFaceType.EDIT.name) {
currentFaceType = WorkFaceType.EDIT
mBinding.toolbarLay.titleTvName.text = "修改工作面"
mBinding.confirm.text = "确认修改"
val detail = intent.getSerializableExtra(WorkingFaceDetail2Activity.FACE_WORK_DETAIL_DATA) as FaceWorkDetailBean?
detail?.let {
loadDetail(it)
}
} else if (stringExtra == WorkFaceType.SEE.name) {
currentFaceType = WorkFaceType.SEE
}
}
override fun initData() {
}
override fun bindEvent() {
mBinding.apply {
addClickViews(imgExpand, confirm)
}
}
override fun createObserve() {
super.createObserve()
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
mViewModel.tunnelingWorkFaceAdd.collectLatest {
showToast("新增成功")
EventBus.getDefault().post(TunnelingWorkFaceRefreshEvent())
delay(200)
finish()
}
}
}
}
override fun processClick(v: View?) {
when (v?.id) {
R.id.img_expand -> {
if (mBinding.expandLayout.visibility == View.GONE) {
mBinding.expandLayout.visibility = View.VISIBLE
mBinding.imgView.background = getDrawable(R.mipmap.arrow_up_white)
} else {
mBinding.expandLayout.visibility = View.GONE
mBinding.imgView.background = getDrawable(R.mipmap.arrow_down_white)
}
}
R.id.confirm -> {
if (currentFaceType == WorkFaceType.ADD) {
addNewFace()
return
}
if (currentFaceType == WorkFaceType.EDIT) {
editFace()
return
}
}
}
}
private fun loadDetail(it: FaceWorkDetailBean) {
mBinding.etWorkfaceName.setText(it.surfaceName)
mBinding.etTotalFootage.setText("${it.totalFootage}")
mBinding.etCoalSeam.text = it.seamName
mBinding.etCoalArea.text = it.areaName
mBinding.etFaceAngle.setText(it.surfaceAzimuth)
mBinding.etFaceHeight.setText(it.surfaceHeight)
mBinding.etFaceWidth.setText(it.surfaceWidth)
mBinding.tvCoalType.text = it.tunnelNature
mBinding.plannedDate1.setText(it.planStartDate)
mBinding.plannedDate2.setText(it.planEndDate)
mBinding.etGeologicalType.setText(it.geologicalType)
mBinding.etHydrogeologicalType.setText(it.hydrogeologicalType)
mBinding.etSeamIgnition.setText(it.seamIgnition)
mBinding.etSeamGas.setText(it.seamGas)
mBinding.etSeamBumpPressure.setText(it.seamBumpPressure)
mBinding.etSurfaceSupportForm.setText(it.surfaceSupportForm)
}
private fun addNewFace() {
if (TextUtils.isEmpty(mBinding.etWorkfaceName.text.toString())) {
showToast("请输入工作面名称")
return
}
if (TextUtils.isEmpty(mBinding.etTotalFootage.text.toString())) {
showToast("请输入总进尺")
return
}
mViewModel.postTunnellingSurfaceAdd(
TunnelingFaceAddBean(
surfaceName = mBinding.etWorkfaceName.text.toString(),
totalFootage = mBinding.etTotalFootage.text.toString()
)
)
}
private fun editFace() {
}
}
@@ -1,87 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import androidx.recyclerview.widget.LinearLayoutManager
import com.zmkg.coaloperation.adapter.WorkingItemAdapter
import com.zmkg.coaloperation.bean.WorkingFaceItem
import com.zmkg.coaloperation.databinding.ActivityWorkingFaceDetail2Binding
import com.zmkg.coaloperation.ui.tunneling.bean.FaceWorkDetailBean
import java.io.Serializable
/**
* 工作面详情2
*/
class WorkingFaceDetail2Activity :
BaseVMBActivity<TestViewModel, ActivityWorkingFaceDetail2Binding>(R.layout.activity_working_face_detail2) {
companion object {
const val FACE_WORK_DETAIL_DATA = "faceWorkDetailData"
}
private val list: MutableList<WorkingFaceItem> = mutableListOf()
private var detail:FaceWorkDetailBean?=null
private val adapter by lazy {
WorkingItemAdapter(list)
}
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.vLine.visibility = View.GONE
mBinding.toolbarLay.rightText="修改"
mBinding.rvFaceList.let {
it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
it.adapter = adapter
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initData() {
val serializableExtra = intent.getSerializableExtra(FACE_WORK_DETAIL_DATA)
if (serializableExtra==null) {
finish()
} else {
detail = serializableExtra as FaceWorkDetailBean
detail?.let {
mBinding.toolbarLay.title = it.surfaceName
list.add(WorkingFaceItem(pageType = 0, name = "工作面名称", value = it.surfaceName))
list.add(WorkingFaceItem(pageType = 0, name = "所属煤层", value = it.seamName))
list.add(WorkingFaceItem(pageType = 0, name = "所属采区域", value = it.areaName))
list.add(WorkingFaceItem(pageType = 0, name = "工作面方位角", value = it.surfaceAzimuth))
list.add(WorkingFaceItem(pageType = 0, name = "工作面巷高", value = it.surfaceHeight))
list.add(WorkingFaceItem(pageType = 0, name = "工作面巷宽", value = it.surfaceWidth))
list.add(WorkingFaceItem(pageType = 0, name = "巷道性质", value = it.tunnelNature))
list.add(WorkingFaceItem(pageType = 0, name = "计划工期", value = "${it.planStartDate} ~ ${it.planEndDate}"))
list.add(WorkingFaceItem(pageType = 0, name = "地质类型", value = it.geologicalType))
list.add(WorkingFaceItem(pageType = 0, name = "水文地质类型", value = it.hydrogeologicalType))
list.add(WorkingFaceItem(pageType = 0, name = "煤层发火性", value = it.seamIgnition))
list.add(WorkingFaceItem(pageType = 0, name = "瓦斯含量", value = it.seamGas))
list.add(WorkingFaceItem(pageType = 0, name = "冲击地压危险性", value = it.seamBumpPressure))
list.add(WorkingFaceItem(pageType = 0, name = "支护形式", value = it.surfaceSupportForm))
}
adapter.notifyDataSetChanged()
}
}
override fun bindEvent() {
mBinding.toolbarLay.titleTvRight.setOnClickListener {
toActivity(WorkFaceActivity::class.java, Bundle().apply {
putString(WorkFaceActivity.WORK_FACE_TYPE, WorkFaceActivity.WorkFaceType.EDIT.name)
putSerializable(WorkFaceActivity.FACE_WORK_DETAIL_DATA, detail)
})
}
}
override fun processClick(v: View?) {
}
}
@@ -1,158 +1,112 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.annotation.SuppressLint
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import androidx.core.graphics.toColorInt
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import androidx.recyclerview.widget.LinearLayoutManager
import com.zmkg.coaloperation.adapter.TunnelWorkingItemAdapter
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import com.zmkg.coaloperation.databinding.ActivityWorkingFaceDetailBinding
import com.zmkg.coaloperation.superfuntion.orEmptyDefaultInt
import com.zmkg.coaloperation.ui.tunneling.adapter.TunnelingHomeListAdapter
import com.zmkg.coaloperation.ui.tunneling.adapter.TunnelingRockNatureAdapter
import com.zmkg.coaloperation.ui.tunneling.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import com.zmkg.coaloperation.utils.ScreenUtil
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.io.Serializable
import kotlin.math.roundToInt
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* 工作面详情
* 工作面详情2
*/
class WorkingFaceDetailActivity :
BaseVMBActivity<TunnelingViewModel, ActivityWorkingFaceDetailBinding>(R.layout.activity_working_face_detail) {
BaseVMBActivity<TestViewModel, ActivityWorkingFaceDetailBinding>(R.layout.activity_working_face_detail) {
companion object {
const val FACE_WORK_DETAIL_DATA = "faceWorkDetailData"
}
val tunnelingRockNatureAdapter: TunnelingRockNatureAdapter by lazy { TunnelingRockNatureAdapter()}
private val list: MutableList<TunnelWorkingItem> = mutableListOf()
// private var detail:FaceWorkDetailBean?=null
private var detail: TunnelWorkingFaceEntity? = null
private val adapter by lazy {
TunnelWorkingItemAdapter(list)
}
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.rightText = "查看详情"
mBinding.toolbarLay.vLine.visibility = View.GONE
mBinding.rvRockNature.adapter = tunnelingRockNatureAdapter
mBinding.toolbarLay.rightText = "修改"
mBinding.arcViewGreen.let {
it.arcColor = "#30E0A1".toColorInt()
it.startAngle = 0f
it.sweepAngle = 360f
it.strokeWidth = 12f
it.radius = ScreenUtil.dp2px(122f - 12f) / 2f
mBinding.rvFaceList.let {
it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
it.adapter = adapter
}
mBinding.arcViewRed.let {
it.arcColor = "#FA2256".toColorInt()
it.startAngle = -90f
it.strokeWidth = 10f
it.sweepAngle = 0f
it.radius = ScreenUtil.dp2px(100f-10f)/2f
}
mBinding.arcViewBlue.let {
it.arcColor = "#246CF9".toColorInt()
it.startAngle = -90f
it.strokeWidth = 10f
it.sweepAngle = 0f
it.radius = ScreenUtil.dp2px(100f-10f)/2f
}
}
override fun initData() {
val surfaceId = intent.getStringExtra("surfaceId")
if (TextUtils.isEmpty(surfaceId)) {
finish()
} else {
mViewModel.getTunnelingSurfaceDetail(surfaceId)
detail = intent.getParcelableExtra(FACE_WORK_DETAIL_DATA)
detail?.let {
loadFaceDetail(it)
}
}
override fun bindEvent() {
mBinding.toolbarLay.titleTvRight.setOnClickListener {
toActivity(WorkingFaceDetail2Activity::class.java, Bundle().apply {
putSerializable(
WorkingFaceDetail2Activity.FACE_WORK_DETAIL_DATA,
mViewModel.faceWorkDetailData.value as Serializable
)
toActivity(AddWorkingFaceActivity::class.java, Bundle().apply {
putString(AddWorkingFaceActivity.WORK_FACE_TYPE, AddWorkingFaceActivity.WorkFaceType.EDIT.name)
// putSerializable(WorkFaceActivity.FACE_WORK_DETAIL_DATA, detail)
putParcelable(AddWorkingFaceActivity.FACE_WORK_DETAIL_DATA, detail)
})
}
}
override fun processClick(v: View?) {
}
override fun createObserve() {
super.createObserve()
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
mViewModel.faceWorkDetailData.collectLatest {
if (it != null) {
setDataView(it)
}
}
}
}
}
private fun setDataView(bean: FaceWorkDetailBean?) {
bean ?: return
mBinding.apply {
toolbarLay.title = bean.surfaceName
tvLenTotal.text = "总进尺:${bean.totalFootage}m"
tvLenAccumulate.text = "累计进尺:${bean.accumulativeFootage.orEmptyDefaultInt("0")}m"
tvLenRemain.text = "剩余进尺:${bean.remainingFootage.orEmptyDefaultInt("0")}m"
//累计进尺占比
var radio = 0
//累计进尺圆圈占比
var arcViewRadio: Float
if (bean.accumulativeFootage > bean.totalFootage) {
radio = 100
arcViewRadio = 360F
} else if (bean.accumulativeFootage <= 0) {
radio = 0
arcViewRadio = 0F
} else {
radio = (bean.accumulativeFootage * 100F / bean.accumulativeFootage).roundToInt()
arcViewRadio = bean.accumulativeFootage * 360F / bean.accumulativeFootage
}
arcViewRed.let {
it.sweepAngle = arcViewRadio
}
arcViewBlue.let {
it.sweepAngle = (360F-arcViewRadio) * -1F
}
mBinding.tvCompleteRate.text = "$radio%"
tvYesterdayLen.text = "${bean?.yesterdayFootage}m"
tvWorkingFaceAngle.text = "${bean?.latestRecord?.seamDip.orEmptyDefaultInt()}"
tvMonthAccumulateLen.text = "${bean?.monthFootage}m"
tvWorkingFaceWater.text = "${bean?.latestRecord?.waterYield.orEmptyDefaultInt()}m"
val list = bean?.latestRecord?.mineWorkingLithologyList
if (list.isNullOrEmpty()) {
tvYesterdayRockType.visibility = View.GONE
} else {
tvYesterdayRockType.visibility = View.VISIBLE
tunnelingRockNatureAdapter.setNewInstance(list)
}
}
@SuppressLint("NotifyDataSetChanged")
private fun loadFaceDetail(it: TunnelWorkingFaceEntity) {
mBinding.toolbarLay.title = it.surfaceName
list.clear()
list.add(TunnelWorkingItem(pageType = 0, name = "工作面名称", value = it.surfaceName))
list.add(TunnelWorkingItem(pageType = 0, name = "所属煤层", value = it.seamName))
list.add(TunnelWorkingItem(pageType = 0, name = "所属采区域", value = it.areaName))
list.add(TunnelWorkingItem(pageType = 0, name = "工作面方位角", value = it.surfaceAzimuth))
list.add(TunnelWorkingItem(pageType = 0, name = "工作面巷高", value = it.surfaceHeight))
list.add(TunnelWorkingItem(pageType = 0, name = "工作面巷宽", value = it.surfaceWidth))
list.add(TunnelWorkingItem(pageType = 0, name = "巷道性质", value = it.tunnelNature))
list.add(
TunnelWorkingItem(
pageType = 0,
name = "计划工期",
value = "${it.planStartDate} ~ ${it.planEndDate}"
)
)
list.add(TunnelWorkingItem(pageType = 0, name = "地质类型", value = it.geologicalType))
list.add(
TunnelWorkingItem(
pageType = 0,
name = "水文地质类型",
value = it.hydrogeologicalType
)
)
list.add(TunnelWorkingItem(pageType = 0, name = "煤层发火性", value = it.seamIgnition))
list.add(TunnelWorkingItem(pageType = 0, name = "瓦斯含量", value = it.seamGas))
list.add(
TunnelWorkingItem(
pageType = 0,
name = "冲击地压危险性",
value = it.seamBumpPressure
)
)
list.add(TunnelWorkingItem(pageType = 0, name = "支护形式", value = it.surfaceSupportForm))
adapter.notifyDataSetChanged()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onWorkingFaceEvent(event: TunnelWorkingFaceEntity) {
detail = event
detail?.let {
loadFaceDetail(it)
}
}
}
@@ -0,0 +1,118 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.annotation.SuppressLint
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.adapter.TunnelWorkingItemAdapter
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import com.zmkg.coaloperation.databinding.ActivityWorkingFaceRecordBinding
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.utils.DictUtils
import com.zmkg.coaloperation.utils.formatDecimalString
import com.zmkg.coaloperation.utils.toJsonString
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* 查看(棋盘井)
*/
class WorkingFaceRecordActivity :
BaseVMBActivity<TestViewModel, ActivityWorkingFaceRecordBinding>(R.layout.activity_working_face_record) {
companion object {
const val TAG = "WorkingPointActivity"
const val FACE_NAME = "faceName"
const val FACE_RECORD = "faceRecord"
}
private var faceName: String? = null
private var faceRecord: TunnelWorkingFaceRecordEntity? = null
private val list: MutableList<TunnelWorkingItem> = mutableListOf()
private val roofLithologyViewModel: TunnelRoofLithologyViewModel by lazy {
ViewModelProvider(this)[TunnelRoofLithologyViewModel::class.java]
}
private val adapter by lazy {
TunnelWorkingItemAdapter(list)
}
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.vLine.visibility = View.GONE
mBinding.toolbarLay.title = "查看详情"
mBinding.toolbarLay.rightText = "修改"
mBinding.toolbarLay.titleTvRight.setOnClickListener {
toActivity(AddWorkingFaceRecordActivity::class.java, Bundle().apply {
putInt(AddWorkingFaceRecordActivity.SHOW_TYPE, 1)
putString(AddWorkingFaceRecordActivity.FACE_NAME, faceName)
putParcelable(AddWorkingFaceRecordActivity.FACE_RECORD, faceRecord)
})
}
mBinding.rvPointList.let {
it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
it.adapter = adapter
}
}
override fun initData() {
faceName = intent.getStringExtra(FACE_NAME)
faceRecord = intent.getParcelableExtra(FACE_RECORD)
Log.d(TAG, "loadFaceRecord: ${faceRecord.toJsonString()}")
faceRecord?.let {
loadFaceRecord(it)
}
}
@SuppressLint("NotifyDataSetChanged")
private fun loadFaceRecord(it: TunnelWorkingFaceRecordEntity) {
list.clear()
list.add(TunnelWorkingItem(pageType = 1, name = "工作面名称", value = faceName))
list.add(TunnelWorkingItem(pageType = 1, name = "施工日期", value = it.workingDate))
list.add(
TunnelWorkingItem(
pageType = 1,
name = "施工班次",
value = DictUtils.getTeamShift(it.teamShift)
)
)
list.add(TunnelWorkingItem(pageType = 1, name = "施工队伍", value = it.teamName))
list.add(TunnelWorkingItem(pageType = 1, name = "带班队长", value = it.teamLeader))
list.add(TunnelWorkingItem(pageType = 1, name = "本班进尺", value = "${it.workingFootage?.formatDecimalString()}m"))
// val rockList = mutableListOf<TunnelRoofLithologyEntity>()
// rockList.add(RockItem(startLen = 0, endLen = 1, rockType = "泥"))
// rockList.add(RockItem(startLen = 0, endLen = 1, rockType = "砂"))
list.add(TunnelWorkingItem(pageType = 1, name = "顶板岩性", value = "", items = null))
list.add(TunnelWorkingItem(pageType = 1, name = "煤层倾角", value = "${it.seamDip?.formatDecimalString()}°"))
list.add(TunnelWorkingItem(pageType = 1, name = "煤层高", value = "${it.seamHeight?.formatDecimalString()}m"))
list.add(TunnelWorkingItem(pageType = 1, name = "记录人", value = it.recordPerson))
adapter.notifyDataSetChanged()
roofLithologyViewModel.getEntityList(it.recordId) { lithologyEntities ->
list[6].items = lithologyEntities
adapter.notifyItemChanged(6)
}
}
override fun bindEvent() {
}
override fun processClick(v: View?) {
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFaceRecordEvent(event: TunnelWorkingFaceRecordEntity) {
faceRecord = event
faceRecord?.let {
loadFaceRecord(it)
}
}
}
@@ -0,0 +1,208 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.os.Bundle
import android.view.View
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBActivity
import androidx.core.graphics.toColorInt
import androidx.lifecycle.ViewModelProvider
import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
import com.zmkg.coaloperation.adapter.TunnelingRockNatureAdapter
import com.zmkg.coaloperation.databinding.ActivityWorkingFaceStatisticsBinding
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import com.zmkg.coaloperation.utils.ScreenUtil
import com.zmkg.coaloperation.utils.formatDecimalString
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import kotlin.apply
import kotlin.math.roundToInt
/**
* 工作面详情
*/
class WorkingFaceStatisticsActivity :
BaseVMBActivity<TunnelingViewModel, ActivityWorkingFaceStatisticsBinding>(R.layout.activity_working_face_statistics) {
companion object {
const val FACE_DETAIL = "faceDetail"
}
private val workingFaceRecordViewModel: TunnelWorkingFaceRecordViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceRecordViewModel::class.java]
}
private val roofLithologyViewModel: TunnelRoofLithologyViewModel by lazy {
ViewModelProvider(this)[TunnelRoofLithologyViewModel::class.java]
}
private val tunnelingRockNatureAdapter: TunnelingRockNatureAdapter by lazy {
TunnelingRockNatureAdapter(lithologyList)
}
private val lithologyList:MutableList<TunnelRoofLithologyEntity> = mutableListOf()
private var faceDetail: TunnelWorkingFaceEntity? = null
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.rightText = "查看详情"
mBinding.toolbarLay.vLine.visibility = View.GONE
mBinding.rvRockNature.adapter = tunnelingRockNatureAdapter
mBinding.arcViewGreen.let {
it.arcColor = "#30E0A1".toColorInt()
it.startAngle = 0f
it.sweepAngle = 360f
it.strokeWidth = 12f
it.radius = ScreenUtil.dp2px(122f - 12f) / 2f
}
mBinding.arcViewRed.let {
it.arcColor = "#FA2256".toColorInt()
it.startAngle = -90f
it.strokeWidth = 10f
it.sweepAngle = 0f
it.radius = ScreenUtil.dp2px(100f - 10f) / 2f
}
mBinding.arcViewBlue.let {
it.arcColor = "#246CF9".toColorInt()
it.startAngle = -90f
it.strokeWidth = 10f
it.sweepAngle = 0f
it.radius = ScreenUtil.dp2px(100f - 10f) / 2f
}
}
override fun initData() {
// val surfaceId = intent.getStringExtra("surfaceId")
// if (TextUtils.isEmpty(surfaceId)) {
// finish()
// } else {
// mViewModel.getTunnelingSurfaceDetail(surfaceId)
// }
faceDetail = intent.getParcelableExtra(FACE_DETAIL)
faceDetail?.let { detail ->
loadFaceDetail()
workingFaceRecordViewModel.getLastEntity(detail.surfaceId) { record ->
record?.let {
mBinding.tvYesterdayLen.text = "${it.workingFootage?.formatDecimalString()}m"
mBinding.tvWorkingFaceAngle.text = "${it.seamDip?.formatDecimalString()}°"
// mBinding.tvMonthAccumulateLen.text = "${it.monthFootage}m"
mBinding.tvWorkingFaceWater.text = "${it.waterYield?.formatDecimalString()}"
roofLithologyViewModel.getEntityList(it.recordId) { list ->
list?.let {
lithologyList.addAll(it)
tunnelingRockNatureAdapter.notifyDataSetChanged()
}
}
}
}
}
}
override fun bindEvent() {
mBinding.toolbarLay.titleTvRight.setOnClickListener {
toActivity(WorkingFaceDetailActivity::class.java, Bundle().apply {
// putSerializable(
// WorkingFaceDetail2Activity.FACE_WORK_DETAIL_DATA,
// mViewModel.faceWorkDetailData.value as Serializable
// )
putParcelable(WorkingFaceDetailActivity.FACE_WORK_DETAIL_DATA, faceDetail)
})
}
}
override fun processClick(v: View?) {
}
override fun createObserve() {
super.createObserve()
// lifecycleScope.launch {
// repeatOnLifecycle(Lifecycle.State.CREATED) {
// mViewModel.faceWorkDetailData.collectLatest {
// if (it != null) {
// setDataView(it)
// }
// }
// }
// }
}
// private fun setDataView(bean: FaceWorkDetailBean?) {
// bean ?: return
// }
private fun stringToDouble(numText: String?): Double {
if (numText.isNullOrEmpty() || numText.isBlank()) return 0.toDouble()
return numText.toDouble()
}
private fun loadFaceDetail() {
val bean = faceDetail!!
mBinding.apply {
toolbarLay.title = bean.surfaceName
val total = stringToDouble(bean.totalFootage)
val accumulative = stringToDouble(bean.accumulativeFootage)
val remaining = stringToDouble(bean.remainingFootage)
tvLenTotal.text = "总进尺:${bean.totalFootage?.formatDecimalString()}m"
tvLenAccumulate.text = "累计进尺:${bean.accumulativeFootage?.formatDecimalString()}m"
tvLenRemain.text = "剩余进尺:${bean.remainingFootage?.formatDecimalString()}m"
//累计进尺占比
var radio = 0
//累计进尺圆圈占比
var arcViewRadio: Float
if (accumulative >= total) {
radio = 100
arcViewRadio = 360F
} else if (accumulative <= 0) {
radio = 0
arcViewRadio = 0F
} else {
arcViewRadio = (accumulative * 100F / total).toFloat()
radio = arcViewRadio.roundToInt()
}
arcViewRed.let {
it.sweepAngle = arcViewRadio
}
arcViewBlue.let {
it.sweepAngle = (360F - arcViewRadio) * -1F
}
mBinding.tvCompleteRate.text = "$radio%"
// tvYesterdayLen.text = "${bean?.yesterdayFootage}m"
// tvWorkingFaceAngle.text = "${bean?.latestRecord?.seamDip.orEmptyDefaultInt()}"
// tvMonthAccumulateLen.text = "${bean?.monthFootage}m"
// tvWorkingFaceWater.text = "${bean?.latestRecord?.waterYield.orEmptyDefaultInt()}m"
// val list = bean?.latestRecord?.mineWorkingLithologyList
// if (list.isNullOrEmpty()) {
// tvYesterdayRockType.visibility = View.GONE
// } else {
// tvYesterdayRockType.visibility = View.VISIBLE
// tunnelingRockNatureAdapter.setNewInstance(list)
// }
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onWorkingFaceEvent(event: TunnelWorkingFaceEntity) {
faceDetail = event
loadFaceDetail()
}
}
@@ -1,62 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.activity
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.adapter.WorkingItemAdapter
import com.zmkg.coaloperation.base.BaseVMBActivity
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.bean.RockItem
import com.zmkg.coaloperation.bean.WorkingFaceItem
import com.zmkg.coaloperation.databinding.ActivityWorkingPointBinding
/**
* 查看(棋盘井)
*/
class WorkingPointActivity :
BaseVMBActivity<TestViewModel, ActivityWorkingPointBinding>(R.layout.activity_working_point) {
private val list: MutableList<WorkingFaceItem> = mutableListOf()
private val adapter by lazy {
WorkingItemAdapter(list)
}
override fun initView(savedInstanceState: Bundle?) {
mBinding.toolbarLay.vLine.visibility = View.GONE
mBinding.toolbarLay.rightText = "查看详情"
mBinding.rvPointList.let {
it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
it.adapter = adapter
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initData() {
list.add(WorkingFaceItem(pageType = 1, name = "工作面名称", value = "5-20304回风工作面"))
list.add(WorkingFaceItem(pageType = 1, name = "施工日期", value = "2025-08-15"))
list.add(WorkingFaceItem(pageType = 1, name = "施工班次", value = "早班"))
list.add(WorkingFaceItem(pageType = 1, name = "施工队伍", value = "掘进队"))
list.add(WorkingFaceItem(pageType = 1, name = "带班队长", value = "刘某杰"))
list.add(WorkingFaceItem(pageType = 1, name = "班进尺", value = "200m"))
val rockList = mutableListOf<RockItem>()
rockList.add(RockItem(startLen = 0, endLen = 1, rockType = ""))
rockList.add(RockItem(startLen = 0, endLen = 1, rockType = ""))
list.add(WorkingFaceItem(pageType = 1, name = "顶板岩性", value = "", items = rockList))
list.add(WorkingFaceItem(pageType = 1, name = "煤层倾角", value = "60°"))
list.add(WorkingFaceItem(pageType = 1, name = "煤层高", value = "20m"))
list.add(WorkingFaceItem(pageType = 1, name = "记录人", value = "刘某杰"))
adapter.notifyDataSetChanged()
}
override fun bindEvent() {
}
override fun processClick(v: View?) {
}
}
@@ -1,64 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.adapter
import android.content.Intent
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeBean
import com.zmkg.coaloperation.ui.tunneling.activity.WorkingPointActivity
/**
* 掘进首页列表
*/
class TunnelingHomeAdapter(var listener: (Int,String?)->Unit) : BaseQuickAdapter<TunnelingHomeBean, BaseViewHolder>(
R.layout.item_geological_list
) {
override fun convert(holder: BaseViewHolder, item: TunnelingHomeBean) {
val tunnelingHomeListAdapter: TunnelingHomeListAdapter by lazy { TunnelingHomeListAdapter().apply {
setOnItemClickListener { adapter, view, position ->
context.startActivity(Intent(context, WorkingPointActivity::class.java))
}
} }
val rvList = holder.getView<RecyclerView>(R.id.rv_content)
val expand = holder.getView<ImageView>(R.id.expand)
val recordLayout = holder.getView<LinearLayout>(R.id.record_layout)
holder.apply {
setText(R.id.title, item.surfaceName)
rvList.adapter = tunnelingHomeListAdapter
tunnelingHomeListAdapter.setNewInstance(item.contentList?:mutableListOf())
}
expand.setOnClickListener {
val imageView = it as ImageView
if (imageView.tag.equals("0")) {//收起状态
imageView.setImageResource(R.mipmap.ic_arrow_down_white)
recordLayout.visibility = View.VISIBLE
imageView.tag = "1"
if (data[holder.absoluteAdapterPosition].contentList.isNullOrEmpty()) {
// if (context is TunnelingActivity) {
// (context as TunnelingActivity).getRecordList(holder.layoutPosition) {
// tunnelingHomeListAdapter.notifyDataSetChanged()
// }
// }
listener.invoke(holder.absoluteAdapterPosition,data[holder.absoluteAdapterPosition].surfaceId)
}
} else {//展开状态
imageView.setImageResource(R.mipmap.ic_arrow_right)
recordLayout.visibility = View.GONE
imageView.tag = "0"
}
}
}
init {
addChildClickViewIds(R.id.start_record)
}
}
@@ -1,27 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeItemBean
/**
* 掘进首页点击出现的列表
*/
class TunnelingHomeListAdapter :
BaseQuickAdapter<TunnelingHomeItemBean, BaseViewHolder>(R.layout.item_geological_list_content) {
override fun convert(holder: BaseViewHolder, item: TunnelingHomeItemBean) {
if (holder.absoluteAdapterPosition != 0) {
holder.setGone(R.id.head, true)
}
holder.setText(R.id.time, item.workingDate)
.setText(R.id.record, item.recordPerson)
}
}
@@ -1,26 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.ui.tunneling.bean.MineWorkingLithology
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeItemBean
/**
* 顶板岩性
*/
class TunnelingRockNatureAdapter :
BaseQuickAdapter<MineWorkingLithology, BaseViewHolder>(R.layout.item_rock_nature) {
override fun convert(holder: BaseViewHolder, item: MineWorkingLithology) {
holder.setText(R.id.tvRock1Start, "${item.positionStart}")
.setText(R.id.tvRock1End, "${item.positionEnd}")
.setText(R.id.tvRock1Name, item.lithologyType)
}
}
@@ -1,170 +0,0 @@
package com.zmkg.coaloperation.ui.tunneling.bean
import java.io.Serializable
/**
* 掘进
*/
data class TunnelingHomeBean(
var contentList: MutableList<TunnelingHomeItemBean>?,
val createBy: String?,
val createTime: String?,
val updateBy: String?,
val updateTime: String?,
val remark: String?,
val surfaceId: String?,
val totalFootage: String?,
val seamId: String?,
val areaId: String?,
val seamName: String?,
val surfaceName: String?,
val areaName: String?,
val surfaceAzimuth: String?,
val surfaceHeight: String?,
val surfaceWidth: String?,
val tunnelNature: String?,
val planStartDate: String?,
val planEndDate: String?,
val geologicalType: String?,
val hydrogeologicalType: String?,
val seamIgnition: String?,
val seamGas: String?,
val seamBumpPressure: String?,
val surfaceSupportForm: String?
)
class TunnelingHomeItemBean {
var createBy: String? = null
var createTime: String? = null
var updateBy: String? = null
var updateTime: String? = null
var remark: String? = null
var recordId: String? = null
var surfaceId: String? = null
var workingDate: String? = null
var teamShift: String? = null
var teamId: String? = null
var teamName: String? = null
var teamLeader: String? = null
var workingFootage: String? = null
var seamDip: String? = null
var seamHeight: String? = null
var waterYield: String? = null
var recordPerson: String? = null
var mineWorkingLith: String? = null
}
/**
* 新增工作面 给接口的数据
*/
data class TunnelingFaceAddBean(
val surfaceName: String? = null,
val totalFootage: String? = null,
val areaId: Int? = null,
val areaName: String? = null,
val createBy: String? = null,
val createTime: String? = null,
val geologicalType: String? = null,
val hydrogeologicalType: String? = null,
val params: Params? = null,
val planEndDate: String? = null,
val planStartDate: String? = null,
val remark: String? = null,
val seamBumpPressure: String? = null,
val seamGas: String? = null,
val seamId: Int? = null,
val seamIgnition: String? = null,
val seamName: String? = null,
val surfaceAzimuth: String? = null,
val surfaceHeight: String? = null,
val surfaceId: Int? = null,
val surfaceSupportForm: String? = null,
val surfaceWidth: String? = null,
val tunnelNature: String? = null,
val updateBy: String? = null,
val updateTime: String? = null
)
data class Params(
val additionalProp1: String? = null,
val additionalProp2: String? = null,
val additionalProp3: String? = null
):Serializable
/**
* 工作面详情
*/
data class FaceWorkDetailBean(
val accumulativeFootage: Int,
val areaId: Int,
val areaName: String,
val createBy: String,
val createTime: String,
val geologicalType: String,
val hydrogeologicalType: String,
val latestRecord: LatestRecord,
val params: Params,
val planEndDate: String,
val planStartDate: String,
val remainingFootage: Int,
val remark: String,
val seamBumpPressure: String,
val seamGas: String,
val seamId: Int,
val seamIgnition: String,
val seamName: String,
val surfaceAzimuth: String,
val surfaceHeight: String,
val surfaceId: Int,
val surfaceName: String,
val surfaceSupportForm: String,
val surfaceWidth: String,
val totalFootage: Int,
val tunnelNature: String,
val updateBy: String,
val updateTime: String,
val yesterdayFootage: String,
val monthFootage: String
): Serializable
data class LatestRecord(
val createBy: String,
val createTime: String,
val mineWorkingLithologyList: MutableList<MineWorkingLithology>,
val params: Params,
val recordId: Int,
val recordPerson: String,
val remark: String,
val seamDip: Int,
val seamHeight: Int,
val surfaceId: Int,
val surfaceName: String,
val teamId: Int,
val teamLeader: String,
val teamName: String,
val teamShift: Int,
val updateBy: String,
val updateTime: String,
val waterYield: Int,
val workingDate: String,
val workingFootage: Int
):Serializable
data class MineWorkingLithology(
val createBy: String,
val createTime: String,
val lithologyId: Int,
val lithologyType: String,
val params: Params,
val positionEnd: Int,
val positionStart: Int,
val recordId: Int,
val remark: String,
val updateBy: String,
val updateTime: String
):Serializable
@@ -2,14 +2,10 @@ package com.zmkg.coaloperation.ui.tunneling.viewmodel
import com.zmkg.coaloperation.base.viewmodel.BaseViewModel
import com.zmkg.coaloperation.data.repository.HomeRepository
import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity
import com.zmkg.coaloperation.superfuntion.handleRequest
import com.zmkg.coaloperation.superfuntion.launch
import com.zmkg.coaloperation.ui.tunneling.bean.FaceWorkDetailBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingFaceAddBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeBean
import com.zmkg.coaloperation.ui.tunneling.bean.TunnelingHomeItemBean
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
/**
@@ -18,64 +14,91 @@ import kotlinx.coroutines.flow.MutableStateFlow
class TunnelingViewModel : BaseViewModel() {
var tunnelingHomeList = MutableSharedFlow<MutableList<TunnelingHomeBean>?>()
var tunnelingHomeItemList = MutableSharedFlow<MutableList<TunnelingHomeItemBean>?>()
var tunnelingWorkFaceAdd = MutableSharedFlow<Boolean>()//新增面
var faceWorkDetailData = MutableStateFlow<FaceWorkDetailBean?>(null)//面详情
var itemIndex = MutableStateFlow(0)//item的下标
// var tunnelingHomeList = MutableSharedFlow<MutableList<TunnelingHomeBean>?>()
// var tunnelingHomeItemList = MutableSharedFlow<MutableList<TunnelingHomeItemBean>?>()
// var tunnelingWorkFaceAdd = MutableSharedFlow<Boolean>()//新增面
// var faceWorkDetailData = MutableStateFlow<FaceWorkDetailBean?>(null)//面详情
//
// var itemIndex = MutableStateFlow(0)//item的下标
override fun init() {
}
fun getTunnelingHomeData() {
launch(
{
handleRequest(
HomeRepository.getTunnelingHomeData(),
successBlock = {
tunnelingHomeList.emit(it.data)
// fun getTunnelingHomeData() {
// launch(
// {
// handleRequest(
// HomeRepository.getTunnelingHomeData(),
// successBlock = {
// tunnelingHomeList.emit(it.data)
//
// })
// }
// )
// }
})
}
)
}
fun getTunnelingHomeItemData(index: Int,surfaceId: String?) {
launch(
{
itemIndex.emit(index)
handleRequest(
HomeRepository.getTunnelingHomeItemData(surfaceId),
successBlock = {
tunnelingHomeItemList.emit(it.data)
})
}
)
}
fun getTunnelingSurfaceDetail(surfaceId: String?) {
launch(
{
handleRequest(
HomeRepository.getTunnelingSurfaceDetail(surfaceId),
successBlock = {
// fun getTunnelingHomeItemData(index: Int,surfaceId: String?) {
// launch(
// {
// itemIndex.emit(index)
// handleRequest(
// HomeRepository.getTunnelingHomeItemData(surfaceId),
// successBlock = {
// tunnelingHomeItemList.emit(it.data)
faceWorkDetailData.emit(it.data)
})
}
)
}
//
// })
// }
// )
// }
//
// fun getTunnelingSurfaceDetail(surfaceId: String?) {
// launch(
// {
// handleRequest(
// HomeRepository.getTunnelingSurfaceDetail(surfaceId),
// successBlock = {
//// tunnelingHomeItemList.emit(it.data)
// faceWorkDetailData.emit(it.data)
// })
// }
// )
// }
//
// fun postTunnellingSurfaceAdd(tunnelingFaceAddBean: TunnelingFaceAddBean) {
// launch(
// {
// handleRequest(
// HomeRepository.postTunnellingSurfaceAdd(tunnelingFaceAddBean),
// successBlock = {
// tunnelingWorkFaceAdd.emit(true)
// })
// }
// )
// }
fun postTunnellingSurfaceAdd(tunnelingFaceAddBean: TunnelingFaceAddBean) {
var tunnelFaceAndRecordList = MutableSharedFlow<MutableList<TunnelWorkingFaceEntity>?>()
fun getTunnelFaceAndRecordList() {
launch(
{
handleRequest(
HomeRepository.postTunnellingSurfaceAdd(tunnelingFaceAddBean),
HomeRepository.getTunnelHomeList(),
successBlock = {
tunnelingWorkFaceAdd.emit(true)
tunnelFaceAndRecordList.emit(it.data)
})
}
)
}
var tunnelAllDict = MutableSharedFlow<Any?>()
fun getTunnelAllDict() {
launch(
{
handleRequest(
HomeRepository.getTunnelAllDict(),
successBlock = {
tunnelAllDict.emit(it.data)
})
}
)
@@ -1,20 +1,51 @@
package com.zmkg.coaloperation.ui.user.fragment
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.base.BaseVMBFragment
import com.zmkg.coaloperation.base.viewmodel.TestViewModel
import com.zmkg.coaloperation.bean.TunnelSubmitData
import com.zmkg.coaloperation.databinding.FragmentUserBinding
import com.zmkg.coaloperation.db.viewmodel.TunnelRoofLithologyViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel
import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceViewModel
import com.zmkg.coaloperation.superfuntion.hideLoading
import com.zmkg.coaloperation.superfuntion.logout
import com.zmkg.coaloperation.superfuntion.showLoading
import com.zmkg.coaloperation.superfuntion.startLoginActivity
import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel
import com.zmkg.coaloperation.ui.user.activity.AboutUsActivity
import com.zmkg.coaloperation.ui.user.activity.CacheManageActivity
import com.zmkg.coaloperation.ui.user.activity.NetworkConfigActivity
import com.zmkg.coaloperation.utils.SpTool
import com.zmkg.coaloperation.utils.toJsonString
import com.zmkg.coaloperation.view.CommonDialog
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
class UserFragment :
BaseVMBFragment<TestViewModel, FragmentUserBinding>(R.layout.fragment_user) {
BaseVMBFragment<TunnelingViewModel, FragmentUserBinding>(R.layout.fragment_user) {
companion object {
const val TAG = "UserFragment"
}
private val workingFaceViewModel: TunnelWorkingFaceViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceViewModel::class.java]
}
private val workingFaceRecordViewModel: TunnelWorkingFaceRecordViewModel by lazy {
ViewModelProvider(this)[TunnelWorkingFaceRecordViewModel::class.java]
}
private val roofLithologyViewModel: TunnelRoofLithologyViewModel by lazy {
ViewModelProvider(this)[TunnelRoofLithologyViewModel::class.java]
}
private val updateDialog: CommonDialog by lazy {
CommonDialog(requireContext(), R.layout.dialog_common_view) {
@@ -34,11 +65,37 @@ class UserFragment :
override fun initView(root: View?, savedInstanceState: Bundle?) {
mBinding.apply {
networkConfig.setOrderStateInfo("网络配置", R.mipmap.network)
cacheManage.setOrderStateInfo("缓存管理", R.mipmap.buffer)
checkUpdate.setOrderStateInfo("检查更新", R.mipmap.checkupdate)
systemExit.setOrderStateInfo("系统退出", R.mipmap.systemexit)
aboutUs.setOrderStateInfo("关于我们", R.mipmap.about_us)
networkConfig.setOrderStateInfo(
"网络配置",
R.mipmap.network,
R.drawable.bg_icon_network_config
)
dataPull.setOrderStateInfo(
"数据拉取",
R.drawable.ic_data_pull,
R.drawable.bg_icon_data_pull
)
dataPush.setOrderStateInfo(
"数据推送",
R.drawable.ic_data_push,
R.drawable.bg_icon_data_push
)
cacheManage.setOrderStateInfo(
"缓存管理",
R.mipmap.buffer,
R.drawable.bg_icon_cache_manage
)
checkUpdate.setOrderStateInfo(
"检查更新",
R.mipmap.checkupdate,
R.drawable.bg_icon_check_update
)
systemExit.setOrderStateInfo(
"系统退出",
R.mipmap.systemexit,
R.drawable.bg_icon_system_exit
)
aboutUs.setOrderStateInfo("关于我们", R.mipmap.about_us, R.drawable.bg_icon_about_us)
}
}
@@ -46,6 +103,8 @@ class UserFragment :
mBinding.apply {
addClickViews(
networkConfig,
dataPull,
dataPush,
cacheManage,
checkUpdate,
systemExit,
@@ -61,6 +120,31 @@ class UserFragment :
toActivity(NetworkConfigActivity::class.java)
}
R.id.data_pull -> {
checkDataState { state ->
if (state) {
showToast("本地存在待提交的数据")
return@checkDataState
}
showLoading("加载中")
workingFaceViewModel.deleteAll {
workingFaceRecordViewModel.deleteAll {
roofLithologyViewModel.deleteAll {
mViewModel.getTunnelFaceAndRecordList()
mViewModel.getTunnelAllDict()
mBinding.dataPull.postDelayed({
hideLoading()
}, 3000)
}
}
}
}
}
R.id.data_push -> {
dataPush()
}
R.id.cache_manage -> {
toActivity(CacheManageActivity::class.java)
}
@@ -76,7 +160,104 @@ class UserFragment :
R.id.about_us -> {
toActivity(AboutUsActivity::class.java)
}
}
}
override fun createObserve() {
super.createObserve()
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
launch {
getFaceAndRecordList()
}
launch {
getTunnelAllDict()
}
}
}
}
private suspend fun getFaceAndRecordList() {
mViewModel.tunnelFaceAndRecordList.collectLatest {
Log.d(TAG, "getFaceAndRecordList: ${it.toJsonString()}")
it?.let { list ->
//保存工作面数据
workingFaceViewModel.insertList(list) {}
list.forEach { faceEntity ->
faceEntity.records?.let { recordList ->
val lastRecordId = faceEntity.latestRecord?.recordId
val record = recordList.firstOrNull { it.recordId == lastRecordId }
record?.latestRecordState = "1"
//保存工作面记录数据
workingFaceRecordViewModel.insertList(recordList)
recordList.forEach { recordEntity ->
recordEntity.mineWorkingLithologyList?.let { lithologyList ->
//保存工作面记录顶板岩性数据
roofLithologyViewModel.insertList(lithologyList)
}
}
}
}
}
}
}
private suspend fun getTunnelAllDict() {
mViewModel.tunnelAllDict.collectLatest {
val dictJson = it.toJsonString()
Log.d(TAG, "getTunnelAllDict: $dictJson")
SpTool.put(SpTool.DICT_JSON, dictJson)
}
}
/**
* 检查数据状态
* @param block 入参true-有待提交数据,false-无待提交数据
*/
private fun checkDataState(block: (Boolean) -> Unit) {
workingFaceViewModel.getEntityListByState("1") { faceList ->
if (faceList != null && faceList.isNotEmpty()) {
block(true)
return@getEntityListByState
}
workingFaceRecordViewModel.getEntityListByState("1") { recordList ->
if (recordList != null && recordList.isNotEmpty()) {
block(true)
return@getEntityListByState
}
roofLithologyViewModel.getEntityListByState("1") { lithologyList ->
if (lithologyList != null && lithologyList.isNotEmpty()) {
block(true)
return@getEntityListByState
}
block(false)
}
}
}
}
private fun dataPush() {
showLoading()
val submitData = TunnelSubmitData()
workingFaceViewModel.getEntityListByState("1") { faceList ->
submitData.faceList = faceList
workingFaceRecordViewModel.getEntityListByState("1") { recordList ->
submitData.recordList = recordList
roofLithologyViewModel.getEntityListByState("1") { lithologyList ->
hideLoading()
submitData.lithologyList = lithologyList
if (submitData.faceList.isNullOrEmpty() ||
submitData.recordList.isNullOrEmpty() ||
submitData.lithologyList.isNullOrEmpty()
) {
showToast("暂无推送数据")
return@getEntityListByState
}
Log.d(TAG, "dataPush: ${submitData.toJsonString()}")
}
}
}
}
}
}
}
@@ -0,0 +1,33 @@
package com.zmkg.coaloperation.utils
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.Date
object DateTimeUtil {
const val YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"
const val YYYY_MM_DD = "yyyy-MM-dd"
fun formatDateTime(dateTime: LocalDateTime, pattern: String = YYYY_MM_DD_HH_MM_SS): String {
val formatter = DateTimeFormatter.ofPattern(pattern)
return dateTime.format(formatter)
}
fun convert(dateStr: String, pattern: String = YYYY_MM_DD_HH_MM_SS): Date {
val formatter = DateTimeFormatter.ofPattern(pattern)
val ldt = LocalDateTime.parse(dateStr, formatter)
val zdt = ldt.atZone(ZoneId.systemDefault())
return Date.from(zdt.toInstant())
}
fun main() {
val now = LocalDateTime.now()
println("默认格式: ${formatDateTime(now)}")
println("自定义格式: ${formatDateTime(now, "yyyy年MM月dd日 HH时mm分ss秒")}")
}
}
@@ -0,0 +1,59 @@
package com.zmkg.coaloperation.utils
import android.util.Log
import com.google.gson.internal.LazilyParsedNumber
import com.zmkg.coaloperation.bean.WorkOption
import com.zmkg.coaloperation.bean.DictBean
object DictUtils {
val workTeamList: MutableList<WorkOption> = mutableListOf()
val workShiftList: MutableList<WorkOption> = mutableListOf()
val seamList: MutableList<WorkOption> = mutableListOf()
val areaMap: MutableMap<String, MutableList<WorkOption>> = mutableMapOf()
val seamRoadWayList: MutableList<WorkOption> = mutableListOf()
fun initData() {
val dictJson = SpTool.getString(SpTool.DICT_JSON)
if (dictJson.isBlank()) {
return
}
val dict = dictJson.toObject<DictBean?>()
workTeamList.clear()
dict?.team_list?.forEach {
workTeamList.add(WorkOption(id = it.key, name = it.value))
}
workShiftList.clear()
dict?.mine_team_shift?.forEach {
workShiftList.add(WorkOption(id = it.key, name = it.value))
}
seamList.clear()
dict?.seam_list?.forEach {
seamList.add(WorkOption(id = it.key, name = it.value))
}
seamRoadWayList.clear()
dict?.mine_tunnel_nature?.forEach {
seamRoadWayList.add(WorkOption(id = it.key, name = it.value))
}
areaMap.clear()
var tempList: MutableList<WorkOption>?
dict?.area_list?.forEach {
if (areaMap.contains(it.key)) {
tempList = areaMap[it.key]
} else {
tempList =mutableListOf()
areaMap.put(it.key, tempList)
}
val seamId: LazilyParsedNumber = it.value?.get("seamId") as LazilyParsedNumber
//Log.d("DictUtils", "initData: idType= ${seamId?.javaClass?.name}, id=${seamId.toInt()},name=${it.value?.get("areaName")}")
tempList?.add(WorkOption(id = ""+ seamId.toInt(), ""+ it.value?.get("areaName")))
}
}
fun getTeamShift(shift: String?): String {
if (shift == null) return ""
return workShiftList.firstOrNull { it.id == shift }?.name ?: shift
}
}
@@ -0,0 +1,71 @@
package com.zmkg.coaloperation.utils
import android.util.Log
import com.zmkg.coaloperation.bean.TunnelWorkingItem
import org.apache.poi.ss.util.CellRangeAddress
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.FileOutputStream
object ExcelExportUtils {
fun exportToExcel(list: List<TunnelWorkingItem>, filePath: String, block:()-> Unit) {
val workbook = XSSFWorkbook() // 创建XLSX格式工作簿
val sheet = workbook.createSheet("Sheet1")
// 创建表头
val mainHeader = sheet.createRow(0)
list.forEachIndexed { index, item ->
mainHeader.createCell(index).setCellValue(item.name)
}
val subHeader = sheet.createRow(1)
for (i in 0 until list.size - 1) {
subHeader.createCell(i).setCellValue("")
}
val subTitleList = mutableListOf("起始值", "结束值", "岩性")
subTitleList.forEachIndexed { index, subTitle ->
subHeader.createCell(list.size - 1 + index).setCellValue(subTitle)
}
sheet.addMergedRegion(CellRangeAddress(0, 0, 9, 11))
for (i in 0 until list.size - 1) {
sheet.addMergedRegion(CellRangeAddress(0, 1, i, i))
}
var rowNum = 2
var row = sheet.createRow(rowNum)
for (i in 0 until list.size - 1) {
row.createCell(i).setCellValue(list[i].value)
}
list[list.size - 1].items?.let {
for (i in 0 until it.size) {
if (i > 0) {
rowNum++
row = sheet.createRow(rowNum)
}
row.createCell(0 + list.size - 1).setCellValue(it[i].positionStart)
row.createCell(1 + list.size - 1).setCellValue(it[i].positionEnd)
row.createCell(2 + list.size - 1).setCellValue(it[i].lithologyType)
}
}
// 填充数据
// data.forEachIndexed { index, item ->
// val row = sheet.createRow(index + 1)
// row.createCell(0).setCellValue(item.id)
// row.createCell(1).setCellValue(item.name)
// }
// 自动调整列宽
// for (i in 0 until 9) {
// sheet.autoSizeColumn(i)
// }
// 写入文件
FileOutputStream(filePath).use { workbook.write(it) }
workbook.close()
Log.d("ExcelExportUtils", "exportToExcel: $filePath")
block()
}
}
data class DataBean(val id: Int, val name: String)
@@ -1,5 +1,7 @@
package com.zmkg.coaloperation.utils
import android.annotation.SuppressLint
import android.content.SharedPreferences
import android.view.View
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -17,3 +19,67 @@ fun View.clickWithDebounce(delay: Long = 300, action: () -> Unit) {
}
}
}
fun View.visible() {
visibility = View.VISIBLE
}
fun View.invisible() {
visibility = View.INVISIBLE
}
fun View.gone() {
visibility = View.GONE
}
@SuppressLint("ApplySharedPref")
inline fun SharedPreferences.edit(
commit: Boolean = false,
action: SharedPreferences.Editor.() -> Unit
) {
val editor = edit()
action(editor)
if (commit) editor.commit() else editor.apply()
}
fun SharedPreferences.put(vararg pairs: Pair<String, Any>) {
edit {
pairs.forEach { (key, value) ->
when (value) {
is Int -> putInt(key, value)
is String -> putString(key, value)
is Boolean -> putBoolean(key, value)
is Float -> putFloat(key, value)
is Long -> putLong(key, value)
}
}
}
}
/**
* 格式化小数字符串
* 如果小数点后都是零,则去掉小数点和小数部分,否则返回原始字符串
*
* @return 格式化后的字符串
*/
fun String.formatDecimalString(): String {
// 检查字符串是否包含小数点
if (!this.contains('.')) {
return this
}
// 尝试分割整数和小数部分
val parts = this.split('.')
if (parts.size != 2) {
return this
}
// 检查小数部分是否全部为零
val decimalPart = parts[1]
val isAllZeros = decimalPart.all { it == '0' }
return if (isAllZeros) {
parts[0] // 返回整数部分
} else {
this // 返回原始字符串
}
}
@@ -0,0 +1,47 @@
package com.zmkg.coaloperation.utils
import android.os.Environment
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
object FileUtils {
fun getFilePath(fileName:String): String {
val parentPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
val path = File(parentPath, "煤矿数采终端")
if (!path.exists()) path.mkdirs()
val file = File(path, fileName)
if (!file.exists()) file.createNewFile()
return file.absolutePath
}
fun saveToPublicDirectory(fileName: String, content: String) {
val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
val appDir = File(dir, "dcmp")
if (!appDir.exists()) appDir.mkdirs()
val file = File(appDir, fileName)
try {
FileOutputStream(file).use { it.write(content.toByteArray()) }
} catch (e: IOException) {
e.printStackTrace()
}
}
// private fun requestStoragePermission() {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// if (!Environment.isExternalStorageManager()) {
// val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
// startActivity(intent)
// }
// } else {
// ActivityCompat.requestPermissions(
// this,
// arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
// REQUEST_CODE
// )
// }
// }
}
@@ -1,16 +1,26 @@
package com.zmkg.coaloperation.utils
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.ToNumberPolicy
import com.google.gson.reflect.TypeToken
inline fun <reified T> String.toType(gson: Gson? = null, typeToken: TypeToken<T>): T {
var gson: Gson? = GsonBuilder()
// .setNumberToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE)
// .setNumberToObjectStrategy(ToNumberPolicy.STRING)
.setObjectToNumberStrategy(ToNumberPolicy.LAZILY_PARSED_NUMBER)
.create()
inline fun <reified T> String.toType(typeToken: TypeToken<T>): T {
return (gson ?: Gson()).fromJson(this, typeToken.type)
}
inline fun <reified T> String.toObject(gson: Gson? = null): T {
inline fun <reified T> String.toObject(): T {
return (gson ?: Gson()).fromJson(this, T::class.java)
}
fun Any?.toJsonString(gson: Gson? = null): String {
fun Any?.toJsonString(): String {
return (gson ?: Gson()).toJson(this) ?: ""
}
@@ -0,0 +1,17 @@
package com.zmkg.coaloperation.utils
import android.content.Context
import android.view.View
import android.view.inputmethod.InputMethodManager
object KeyboardUtil {
fun hideKeyboard(view: View) {
val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
view.clearFocus() // 清除焦点避免键盘再次弹出
}
}
@@ -2,53 +2,69 @@ package com.zmkg.coaloperation.utils
import android.content.Context
import android.graphics.Color
import android.view.View
import com.bigkoo.pickerview.builder.OptionsPickerBuilder
import com.bigkoo.pickerview.builder.TimePickerBuilder
import com.bigkoo.pickerview.listener.OnOptionsSelectListener
import com.bigkoo.pickerview.listener.OnTimeSelectListener
import okio.Options
import com.zmkg.coaloperation.bean.WorkOption
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
import java.util.Locale
object PickerUtil {
// 时间选择器示例
fun showTimePicker(context: Context, action: (String) -> Unit) {
TimePickerBuilder(context) { date, _ ->
fun showTimePicker(context: Context, dateString:String, action: (String) -> Unit) {
val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
TimePickerBuilder(context) { date, _ ->
action(sdf.format(date))
}.apply {
setType(booleanArrayOf(true, true, true, false, false, false)) // 年月日
setLabel("", "", "", "", "", "")
setDividerColor(Color.GRAY)
setContentTextSize(20)
setDate(Calendar.getInstance())
val calendar = Calendar.getInstance()
try {
sdf.parse(dateString)?.let { date ->
calendar.time = date
}
} catch (e: Exception) {
e.printStackTrace()
}
setDate(calendar)
// 设置日期范围(2023-01-01至2025-12-31
val startDate = Calendar.getInstance().apply { set(2020, 0, 1) }
val endDate = Calendar.getInstance().apply { set(2050, 11, 31) }
setRangDate(startDate, endDate)
setOutSideCancelable(true)
}
.build()
.show()
}
// 三级联动选择器示例
fun showOptionsPicker(context: Context, options: List<String>, action: (String) -> Unit) {
fun showOptionPicker(context: Context, title:String, options: List<WorkOption>, action: (WorkOption) -> Unit) {
OptionsPickerBuilder(context) { opt1, _, _, _ ->
action(options[opt1])
}.apply {
setTitleText("请选择地区")
setTitleText(title)
setContentTextSize(18)
setOutSideCancelable(false)
setOutSideCancelable(true)
}.build<String>().apply {
setPicker( options.map { it.name } , null, null)
show()
}
}
fun showTextPicker(context: Context, title:String, options: List<String>, action: (String) -> Unit) {
OptionsPickerBuilder(context) { opt1, _, _, _ ->
action(options[opt1])
}.apply {
setTitleText(title)
setContentTextSize(18)
setOutSideCancelable(true)
}.build<String>().apply {
setPicker( options , null, null)
show()
}
}
}
@@ -0,0 +1,27 @@
package com.zmkg.coaloperation.utils
import com.zmkg.coaloperation.MyApplication
import kotlin.to
object SpTool {
const val DICT_JSON = "dictJson"
val pref = MyApplication.getSharedPref()!!
fun put(key: String, value: Any) {
pref.put(key to value)
}
fun getInt(key: String, defValue: Int = 0): Int {
return pref.getInt(key, defValue)
}
fun getString(key: String, defValue: String? = ""): String {
return pref.getString(key, defValue) ?: ""
}
fun getBoolean(key: String, defValue: Boolean = false): Boolean {
return pref.getBoolean(key, defValue)
}
}
@@ -0,0 +1,42 @@
//package com.zmkg.coaloperation.view
//
//import android.annotation.SuppressLint
//import android.content.Context
//import android.util.AttributeSet
//import android.view.MotionEvent
//import androidx.recyclerview.widget.RecyclerView
//
//class CRecyclerView @JvmOverloads constructor(
// context: Context,
// attrs: AttributeSet? = null,
// defStyleAttr: Int = 0
//): RecyclerView(context, attrs, defStyleAttr) {
//
// override fun onInterceptTouchEvent(e: MotionEvent?): Boolean {
// parent.requestDisallowInterceptTouchEvent(true)
// return super.onInterceptTouchEvent(e)
// }
// var x1 = 0f
// var y1 = 0f
// @SuppressLint("ClickableViewAccessibility")
// override fun onTouchEvent(e: MotionEvent): Boolean {
// when (e.action) {
// MotionEvent.ACTION_DOWN -> {
// parent.requestDisallowInterceptTouchEvent(true)
// x1 = e.x
// y1 = e.y
// }
// MotionEvent.ACTION_MOVE -> {
// val dy = e.y - y1
// if (!canScrollVertically(-1) && dy > 0) { // 到达顶部继续下滑
// parent.requestDisallowInterceptTouchEvent(false)
// } else if (!canScrollVertically(1) && dy < 0) { // 到达底部继续上滑
// parent.requestDisallowInterceptTouchEvent(false)
// }
// }
// }
// return super.onTouchEvent(e)
// }
//
//
//}
@@ -8,6 +8,8 @@ import android.widget.RelativeLayout
import androidx.databinding.DataBindingUtil
import com.zmkg.coaloperation.R
import com.zmkg.coaloperation.databinding.CustomMyInfoViewBinding
import com.zmkg.coaloperation.utils.gone
import com.zmkg.coaloperation.utils.visible
/**
* 文本和跳转
@@ -21,15 +23,14 @@ class CustomInfoView(context: Context?, attrs: AttributeSet?) : RelativeLayout(c
R.layout.custom_my_info_view, this,true)
fun setOrderStateInfo(name:String, id:Int){
fun setOrderStateInfo(name:String, imgResId:Int, bgResId: Int){
mBinding.apply {
if (id==0) {
customInfoMenuIcon.visibility=View.GONE
}else{
customInfoMenuIcon.visibility=View.VISIBLE
customInfoMenuIcon.run {
if (imgResId == 0) gone() else visible()
setImageResource(imgResId)
setBackgroundResource(bgResId)
}
customInfoMenuIcon.setImageResource(id)
customInfoMenuName.setText(name)
customInfoMenuName.text = name
}
}
@@ -0,0 +1,65 @@
package com.zmkg.coaloperation.view
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.ViewConfiguration
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView
import kotlin.math.abs
class NestedRecyclerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : RecyclerView(context, attrs, defStyleAttr) {
private var lastY = 0f
private var isDragging = false
private var touchSlop = ViewConfiguration.get(context).scaledTouchSlop
override fun onInterceptTouchEvent(e: MotionEvent): Boolean {
when (e.action) {
MotionEvent.ACTION_DOWN -> {
lastY = e.y
parent.requestDisallowInterceptTouchEvent(true)
}
MotionEvent.ACTION_MOVE -> {
val dy = e.y - lastY
if (!canScrollVertically(-1) && dy > 0) {
parent.requestDisallowInterceptTouchEvent(false)
return false
} else if (!canScrollVertically(1) && dy < 0) {
parent.requestDisallowInterceptTouchEvent(false)
return false
}
}
}
return super.onInterceptTouchEvent(e)
}
override fun onTouchEvent(e: MotionEvent): Boolean {
when (e.action) {
MotionEvent.ACTION_MOVE -> {
if (!isDragging && abs(e.y - lastY) > touchSlop) {
isDragging = true
}
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
isDragging = false
}
}
return super.onTouchEvent(e)
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
when (ev.action) {
MotionEvent.ACTION_DOWN -> {
stopNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL)
}
}
return super.dispatchTouchEvent(ev)
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#FF72AFD3"
android:startColor="#FF37ECBA"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:startColor="#ff95fe99"
android:endColor="#fff5feb9"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#FFF89273"
android:startColor="#FFB223F6"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff7657f8"
android:startColor="#fff538f6"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff1657f8"
android:startColor="#fff51856"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff73a3f8"
android:startColor="#ff0a28f4"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#FF96E6A1"
android:startColor="#FFD4FC79"
android:type="linear"
android:useLevel="true" />
<corners
android:radius="12dp" />
</shape>
@@ -3,8 +3,8 @@
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#ff282c38" />
<solid android:color="#ff17181c" />
android:color="#282C38" />
<solid android:color="#17181c" />
<corners
android:radius="10dp" />
</shape>
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FB2B85"/>
<size android:height="5dp" android:width="5dp"/>
</shape>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="3dp" android:top="1dp" android:bottom="10dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@color/scrollbar" />
<size
android:width="2dp"
android:height="20dp" />
</shape>
</item>
</layer-list>
@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="HardcodedText">
<data>
</data>
<RelativeLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
@@ -15,27 +16,20 @@
<include
android:id="@+id/toolbar_lay"
layout="@layout/lay_title_right_bar"
app:title="@{@string/title_work_face}" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar_lay"
android:layout_marginTop="10dp">
layout="@layout/lay_title_right_bar" />
<!-- app:title="@{@string/title_work_face}"-->
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="80dp">
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginHorizontal="20dp">
<com.allen.library.shape.ShapeLinearLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:orientation="vertical"
app:shapeCornersRadius="8dp"
app:shapeSolidColor="#282C38">
android:background="@drawable/bg_stroke_gray">
<RelativeLayout
android:layout_width="match_parent"
@@ -116,7 +110,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
android:visibility="visible">
<RelativeLayout
android:layout_width="match_parent"
@@ -132,12 +126,13 @@
android:textSize="16sp" />
<TextView
android:id="@+id/etCoalSeam"
android:id="@+id/tv_seam_name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:paddingStart="10dp"
android:paddingEnd="0dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="15dp"
android:textColor="@color/white"
@@ -167,12 +162,13 @@
android:textSize="16sp" />
<TextView
android:id="@+id/etCoalArea"
android:id="@+id/tv_area_name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:paddingStart="10dp"
android:paddingEnd="0dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="15dp"
android:textColor="@color/white"
@@ -202,7 +198,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etFaceAngle"
android:id="@+id/et_surface_azimuth"
android:layout_width="140dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
@@ -239,7 +235,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etFaceHeight"
android:id="@+id/et_surface_height"
android:layout_width="140dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
@@ -276,7 +272,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etFaceWidth"
android:id="@+id/et_surface_width"
android:layout_width="140dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
@@ -313,12 +309,13 @@
android:textSize="16sp" />
<TextView
android:id="@+id/tvCoalType"
android:id="@+id/tv_tunnel_nature"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:paddingStart="10dp"
android:paddingEnd="0dp"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:textColor="@color/white"
@@ -347,16 +344,16 @@
android:textColor="#6A6F87"
android:textSize="16sp" />
<EditText
android:id="@+id/planned_date1"
android:layout_width="80dp"
<TextView
android:id="@+id/et_plan_start_date"
android:layout_width="90dp"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/line1"
android:background="@drawable/rectangle_stroke_grey_corner8"
android:hint="请输入"
android:gravity="center_vertical"
android:paddingLeft="5dp"
android:textColor="@color/white"
android:textColorHint="#757B8C"
@@ -368,22 +365,24 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/planned_date2"
android:text="---"
android:layout_toLeftOf="@+id/et_plann_end_date"
android:text="~"
android:layout_marginStart="3dp"
android:layout_marginEnd="3dp"
android:textColor="@color/white"
android:textSize="16sp" />
<EditText
android:id="@+id/planned_date2"
android:layout_width="80dp"
<TextView
android:id="@+id/et_plann_end_date"
android:layout_width="90dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:background="@drawable/rectangle_stroke_grey_corner8"
android:hint="请输入"
android:gravity="center_vertical"
android:paddingLeft="5dp"
android:textColor="@color/white"
android:textColorHint="#757B8C"
@@ -615,40 +614,35 @@
</RelativeLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/img_expand"
<ImageView
android:id="@+id/imgExpand"
android:layout_width="60dp"
android:layout_height="30dp"
android:layout_gravity="center_horizontal">
<ImageView
android:id="@+id/img_view"
android:layout_width="22dp"
android:layout_height="12dp"
android:layout_centerInParent="true"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:layout_gravity="center_horizontal"
android:background="@mipmap/arrow_down_white"
android:scaleType="center" />
</RelativeLayout>
android:src="@drawable/ic_arrow_down_white2"
android:scaleType="fitCenter"
tools:ignore="ContentDescription"
android:visibility="gone"/>
</com.allen.library.shape.ShapeLinearLayout>
</LinearLayout>
</ScrollView>
<com.allen.library.shape.ShapeTextView
android:id="@+id/confirm"
android:layout_width="247dp"
android:layout_width="250dp"
android:layout_height="52dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="15dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:gravity="center"
android:text="确认新增"
android:layout_gravity="center_horizontal"
android:textColor="@color/white"
android:textSize="18sp"
app:shapeCornersRadius="30dp"
app:shapeSolidColor="#21A69A" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</layout>
@@ -18,7 +18,7 @@
android:id="@+id/toolbar_lay"
layout="@layout/lay_title_right_bar" />
<ScrollView
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="20dp"
@@ -31,8 +31,9 @@
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
android:layout_marginBottom="10dp"
android:orientation="vertical"
android:background="@drawable/bg_stroke_gray">
<LinearLayout
android:layout_width="match_parent"
@@ -79,7 +80,7 @@
android:textSize="16sp" />
<TextView
android:id="@+id/tvWorkDate"
android:id="@+id/tvWorkingDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
@@ -111,7 +112,7 @@
android:textSize="16sp" />
<TextView
android:id="@+id/tvWorkType"
android:id="@+id/tvTeamShift"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
@@ -169,7 +170,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etInputLeader"
android:id="@+id/etTeamLeader"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_vertical|end"
@@ -201,12 +202,12 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:text="本进尺"
android:text="本进尺"
android:textColor="#6A6F87"
android:textSize="16sp" />
<EditText
android:id="@+id/etInputTodayLength"
android:id="@+id/etWorkingFootage"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_vertical|end"
@@ -253,16 +254,30 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/llRockPoint"
<!-- <LinearLayout-->
<!-- android:id="@+id/llRockPoint"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginStart="8dp"-->
<!-- android:layout_marginEnd="15dp"-->
<!-- android:orientation="vertical"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toEndOf="@id/tvRockName"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- tools:minHeight="60dp" />-->
<com.zmkg.coaloperation.view.NestedRecyclerView
android:id="@+id/rvLithology"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="15dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvRockName"
app:layout_constraintTop_toTopOf="parent"
tools:itemCount="3"
android:overScrollMode="never"
tools:listitem="@layout/list_item_rock"
tools:minHeight="60dp"/>
<TextView
@@ -278,9 +293,9 @@
android:textColor="@color/white"
android:textSize="14sp"
app:drawableStartCompat="@drawable/ic_add_point"
app:layout_constraintEnd_toEndOf="@id/llRockPoint"
app:layout_constraintStart_toStartOf="@id/llRockPoint"
app:layout_constraintTop_toBottomOf="@id/llRockPoint" />
app:layout_constraintEnd_toEndOf="@id/rvLithology"
app:layout_constraintStart_toStartOf="@id/rvLithology"
app:layout_constraintTop_toBottomOf="@id/rvLithology" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
@@ -301,7 +316,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etInputCoalAngle"
android:id="@+id/etSeamDip"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_vertical|end"
@@ -348,7 +363,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etInputCoalHeight"
android:id="@+id/etSeamHeight"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_vertical|end"
@@ -392,7 +407,7 @@
android:textSize="16sp" />
<EditText
android:id="@+id/etInputRecorder"
android:id="@+id/etRecordPerson"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_vertical|end"
@@ -413,14 +428,14 @@
</FrameLayout>
</LinearLayout>
</ScrollView>
</androidx.core.widget.NestedScrollView>
<LinearLayout
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:orientation="horizontal"
android:paddingStart="30dp"
android:paddingEnd="30dp">
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</layout>
@@ -11,6 +11,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical">
<include
@@ -22,8 +23,9 @@
android:id="@+id/rv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_geological_list" />
tools:listitem="@layout/list_item_tunnel_working_face" />
</LinearLayout>
</layout>
@@ -18,563 +18,18 @@
android:id="@+id/toolbar_lay"
layout="@layout/lay_title_right_bar" />
<ScrollView
android:layout_marginTop="10dp"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFaceList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="进度信息"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="152dp"
android:background="@drawable/bg_stroke_gray">
<TextView
android:id="@+id/tvLenTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/shape_flag_green"
app:layout_constraintBottom_toTopOf="@+id/tvLenAccumulate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="进度信息" />
<TextView
android:id="@+id/tvLenAccumulate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/shape_flag_red"
app:layout_constraintBottom_toTopOf="@+id/tvLenRemain"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLenTotal"
tools:text="进度信息" />
<TextView
android:id="@+id/tvLenRemain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/shape_flag_blue"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLenAccumulate"
tools:text="进度信息" />
<FrameLayout
android:layout_width="122dp"
android:layout_height="122dp"
android:layout_marginEnd="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.zmkg.coaloperation.view.CircleArcView
android:id="@+id/arcViewGreen"
android:layout_width="122dp"
android:layout_height="122dp"
android:layout_gravity="center" />
<com.zmkg.coaloperation.view.CircleArcView
android:id="@+id/arcViewRed"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center" />
<com.zmkg.coaloperation.view.CircleArcView
android:id="@+id/arcViewBlue"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center" />
<TextView
android:id="@+id/tvCompleteRate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="24sp"
tools:text="64%" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="基础信息"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="昨日进尺"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvYesterdayLen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="200.4m" />
</FrameLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="工作面倾角"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvWorkingFaceAngle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="65" />
</FrameLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="本月累计进尺"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvMonthAccumulateLen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1400.4m" />
</FrameLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="工作面涌水量"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvWorkingFaceWater"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="65" />
</FrameLayout>
</LinearLayout>
<TextView
android:id="@+id/tvYesterdayRockType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="昨日顶板岩性"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<androidx.recyclerview.widget.RecyclerView
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:id="@+id/rv_rock_nature"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
tools:itemCount="3"
tools:listitem="@layout/item_rock_nature" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="各类工程"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvTask1Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvTask1Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvTask2Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvTask2Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="隐蔽致灾预报"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvDisaster1Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvDisaster1Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvDisaster2Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvDisaster2Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
tools:itemCount="20"
android:overScrollMode="never"
tools:listitem="@layout/list_item_tunnel_working_item"
android:background="@drawable/bg_stroke_gray"/>
</LinearLayout>
</layout>
@@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="HardcodedText,TooManyViews">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_bg"
android:orientation="vertical">
<include
android:id="@+id/toolbar_lay"
layout="@layout/lay_title_right_bar" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFaceList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="10dp"
tools:itemCount="20"
android:overScrollMode="never"
tools:listitem="@layout/list_item_working_face"
android:background="@drawable/bg_stroke_gray"/>
</LinearLayout>
</layout>
@@ -28,7 +28,7 @@
android:layout_marginBottom="10dp"
tools:itemCount="10"
android:overScrollMode="never"
tools:listitem="@layout/list_item_working_face"
tools:listitem="@layout/list_item_tunnel_working_item"
android:background="@drawable/bg_stroke_gray"/>
</LinearLayout>
@@ -0,0 +1,580 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="HardcodedText,TooManyViews">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_bg"
android:orientation="vertical">
<include
android:id="@+id/toolbar_lay"
layout="@layout/lay_title_right_bar" />
<ScrollView
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="进度信息"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="152dp"
android:background="@drawable/bg_stroke_gray">
<TextView
android:id="@+id/tvLenTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/shape_flag_green"
app:layout_constraintBottom_toTopOf="@+id/tvLenAccumulate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="进度信息" />
<TextView
android:id="@+id/tvLenAccumulate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/shape_flag_red"
app:layout_constraintBottom_toTopOf="@+id/tvLenRemain"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLenTotal"
tools:text="进度信息" />
<TextView
android:id="@+id/tvLenRemain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/shape_flag_blue"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvLenAccumulate"
tools:text="进度信息" />
<FrameLayout
android:layout_width="122dp"
android:layout_height="122dp"
android:layout_marginEnd="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.zmkg.coaloperation.view.CircleArcView
android:id="@+id/arcViewGreen"
android:layout_width="122dp"
android:layout_height="122dp"
android:layout_gravity="center" />
<com.zmkg.coaloperation.view.CircleArcView
android:id="@+id/arcViewRed"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center" />
<com.zmkg.coaloperation.view.CircleArcView
android:id="@+id/arcViewBlue"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center" />
<TextView
android:id="@+id/tvCompleteRate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="24sp"
tools:text="64%" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="基础信息"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="昨日进尺"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvYesterdayLen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="200.4m" />
</FrameLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="工作面倾角"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvWorkingFaceAngle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="65" />
</FrameLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="本月累计进尺"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvMonthAccumulateLen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="1400.4m" />
</FrameLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="工作面涌水量"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvWorkingFaceWater"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="65" />
</FrameLayout>
</LinearLayout>
<TextView
android:id="@+id/tvYesterdayRockType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="昨日顶板岩性"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<androidx.recyclerview.widget.RecyclerView
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:id="@+id/rv_rock_nature"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
tools:itemCount="3"
tools:listitem="@layout/item_rock_nature" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="各类工程"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvTask1Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvTask1Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvTask2Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvTask2Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="隐蔽致灾预报"
android:textColor="@color/white"
app:drawableStartCompat="@drawable/line_green" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:background="@drawable/bg_stroke_gray"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvDisaster1Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvDisaster1Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#20222B" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距"
android:textColor="#6A6F87"
android:textSize="16sp" />
<TextView
android:id="@+id/tvDisaster2Name"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:minWidth="60dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:background="@drawable/dash_line" />
<TextView
android:id="@+id/tvDisaster2Value"
android:layout_width="60dp"
android:layout_height="30dp"
android:background="@drawable/bg_solid_black"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="m"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
</layout>
@@ -7,49 +7,44 @@
</data>
<com.allen.library.shape.ShapeRelativeLayout
<com.allen.library.shape.ShapeLinearLayout
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="#20222B"
app:shapeSolidColor="#20222B"
app:shapeCornersRadius="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#20222B">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="44dp"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:orientation="horizontal">
android:paddingHorizontal="15dp">
<ImageView
android:id="@+id/custom_info_menu_icon"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:scaleType="fitCenter"/>
android:layout_width="44dp"
android:layout_height="44dp"
android:scaleType="fitCenter"
android:padding="11dp"
tools:src="@mipmap/network"
tools:background="@drawable/bg_icon_network_config"/>
<TextView
android:id="@+id/custom_info_menu_name"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
tools:text="菜单"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
android:textSize="16sp" />
<ImageView
android:id="@+id/custom_info_iv_right"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:src="@mipmap/arrow_right" />
</com.allen.library.shape.ShapeRelativeLayout>
</com.allen.library.shape.ShapeLinearLayout>
</layout>
@@ -59,6 +59,10 @@
android:layout_below="@+id/title_sec"
android:layout_marginHorizontal="5dp"
android:layout_marginTop="8dp"
tools:itemCount="6"
app:spanCount="2"
android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/item_home_menu_left_right" />
<LinearLayout
@@ -33,47 +33,55 @@
android:textSize="24sp" />
<TextView
android:id="@+id/tvUserPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center_horizontal"
android:text="账号昵称"
android:text="158****5678"
android:textColor="#6A6F87"
android:textSize="14sp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/network_config"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/data_pull"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/data_push"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/cache_manage"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/check_update"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/system_exit"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<com.zmkg.coaloperation.view.CustomInfoView
android:id="@+id/about_us"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginHorizontal="30dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
</com.allen.library.shape.ShapeLinearLayout>
@@ -85,7 +93,8 @@
android:layout_height="68dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:background="#e3e3e3" />
app:srcCompat="@drawable/ic_avatar"/>
<!-- android:background="#e3e3e3"-->
</RelativeLayout>
</layout>
@@ -12,7 +12,6 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<com.allen.library.shape.ShapeRelativeLayout
android:layout_width="match_parent"
android:layout_height="74dp"
@@ -29,8 +28,7 @@
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="13dp"
android:background="@mipmap/ic_geological"
android:scaleType="fitXY" />
android:background="@drawable/ic_geological" />
<TextView
android:id="@+id/title"
@@ -46,10 +44,11 @@
android:id="@+id/expand"
android:layout_width="36dp"
android:layout_height="36dp"
android:padding="6dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginRight="13dp"
android:src="@mipmap/ic_arrow_right"
android:src="@drawable/ic_arrow_right_gray"
android:tag="0" />
@@ -7,34 +7,36 @@
</data>
<com.allen.library.shape.ShapeRelativeLayout
<com.allen.library.shape.ShapeLinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginHorizontal="4dp"
android:layout_marginVertical="5dp"
android:paddingHorizontal="10dp"
app:shapeCornersRadius="6dp"
app:shapeStrokeColor="#10514C"
app:shapeStrokeWidth="0.5dp">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_weight="1"
android:maxLines="1"
android:ellipsize="end"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="防灭火检查" />
<ImageView
android:id="@+id/img"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="13dp"
android:layout_marginStart="10dp"
android:scaleType="fitXY" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="防灭火检查" />
</com.allen.library.shape.ShapeRelativeLayout>
</com.allen.library.shape.ShapeLinearLayout>
</layout>
@@ -7,9 +7,11 @@
</data>
<com.allen.library.shape.ShapeRelativeLayout
<com.allen.library.shape.ShapeLinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_height="85dp"
android:orientation="vertical"
android:gravity="center"
android:layout_marginHorizontal="2dp"
android:layout_marginVertical="2dp"
app:shapeCornersRadius="6dp"
@@ -20,20 +22,19 @@
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:layout_marginRight="13dp"
android:scaleType="fitXY" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/img"
android:layout_centerHorizontal="true"
android:textColor="@color/white"
android:layout_marginTop="6dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="12sp"
tools:text="防灭火检查" />
</com.allen.library.shape.ShapeRelativeLayout>
</com.allen.library.shape.ShapeLinearLayout>
</layout>
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
@@ -79,4 +79,4 @@
</LinearLayout>
</layout>
@@ -24,7 +24,7 @@
android:maxLines="1"
android:textCursorDrawable="@drawable/cursor_white"
android:minWidth="30dp"
android:maxWidth="35dp"
android:maxWidth="55dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
@@ -47,7 +47,7 @@
android:maxLines="1"
android:textCursorDrawable="@drawable/cursor_white"
android:minWidth="30dp"
android:maxWidth="35dp"
android:maxWidth="55dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
@@ -72,7 +72,7 @@
android:maxLines="1"
android:textCursorDrawable="@drawable/cursor_white"
android:minWidth="30dp"
android:maxWidth="35dp"
android:maxWidth="55dp"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/white"
@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="ContentDescription">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical">
<com.allen.library.shape.ShapeLinearLayout
android:id="@+id/llWorkingFace"
android:layout_width="match_parent"
android:layout_height="74dp"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
app:shapeCornersRadius="10dp"
app:shapeSolidColor="#1C21A69A"
app:shapeStrokeColor="#FF26FFEB"
app:shapeStrokeWidth="0.5dp">
<FrameLayout
android:layout_width="20dp"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivFlagEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_flag_edit"
android:visibility="gone"/>
</FrameLayout>
<!-- android:layout_marginStart="20dp"-->
<ImageView
android:layout_width="30dp"
android:layout_height="38dp"
android:layout_marginEnd="10dp"
android:background="@drawable/ic_geological" />
<TextView
android:id="@+id/tvWorkingFaceName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="5-20304回风工作面" />
<ImageView
android:id="@+id/ivExpandRecord"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginEnd="20dp"
android:padding="13dp"
android:src="@drawable/ic_arrow_right_gray"
android:tag="false" />
</com.allen.library.shape.ShapeLinearLayout>
<LinearLayout
android:id="@+id/llFaceRecord"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:visibility="visible">
<LinearLayout
android:id="@+id/llRvParent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="vertical"
android:background="@drawable/bg_stroke_gray">
<include
android:id="@+id/includeHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/list_item_tunnel_working_face_record" />
<com.zmkg.coaloperation.view.NestedRecyclerView
android:id="@+id/rvFaceRecord"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="ifContentScrolls"
android:fadeScrollbars="false"
android:scrollbars="vertical"
android:scrollbarThumbVertical="@drawable/scrollbar_thumb"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="3"
tools:listitem="@layout/list_item_tunnel_working_face_record" />
</LinearLayout>
<com.allen.library.shape.ShapeTextView
android:id="@+id/start_record"
android:layout_width="154dp"
android:layout_height="44dp"
android:layout_gravity="center_horizontal"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center"
android:text="开始记录"
android:textColor="@color/white"
app:shapeCornersRadius="30dp"
app:shapeSolidColor="#21A69A" />
</LinearLayout>
</LinearLayout>
</layout>
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="HardcodedText">
<data>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
tools:background="#17181C"
android:orientation="horizontal"
android:gravity="center_vertical"
android:descendantFocusability="blocksDescendants">
<TextView
android:id="@+id/time"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.56"
android:gravity="center"
android:text="时间"
android:textColor="@color/white"
android:textSize="14sp" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="1dp"
android:layout_height="match_parent"
app:dividerColor="#282C38"/>
<TextView
android:id="@+id/record"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.11"
android:gravity="center"
android:text="记录人"
android:textColor="@color/white" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="1dp"
android:layout_height="match_parent"
app:dividerColor="#282C38"/>
<TextView
android:id="@+id/operation"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="操作"
android:layout_marginEnd="3dp"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
app:dividerColor="#282C38"
android:layout_gravity="bottom"
android:visibility="visible"/>
<FrameLayout
android:layout_width="20dp"
android:layout_height="match_parent"
android:layout_gravity="start">
<ImageView
android:id="@+id/ivFlagEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_flag_edit"
android:visibility="gone"/>
</FrameLayout>
</FrameLayout>
</layout>
@@ -12,7 +12,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
tools:background="@color/text_gray1">
tools:background="@color/text_green">
<TextView
android:id="@+id/tvItemName"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 B

Some files were not shown because too many files have changed in this diff Show More