From be579ea7e417dc75d5a635838953ce9d61aff09d Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Mon, 15 Sep 2025 19:15:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E3=80=81=E5=B7=A5=E4=BD=9C=E9=9D=A2=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E3=80=81=E8=AE=B0=E5=BD=95=E5=88=97=E8=A1=A8=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=80=92=E5=BA=8F=EF=BC=8C=E6=96=B0=E6=95=B0=E6=8D=AE=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E5=9C=A8=E6=9C=80=E4=B8=8A=E9=9D=A2=E3=80=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BE=85=E6=8F=90=E4=BA=A4=E6=95=B0=E6=8D=AE=E6=A0=87?= =?UTF-8?q?=E8=AF=86=E3=80=81=E5=85=B6=E5=AE=83=E9=97=AE=E9=A2=98=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coalMiningApp/app/build.gradle | 5 + .../app/src/main/AndroidManifest.xml | 17 +- .../adapter/TunnelWorkingFaceAdapter.kt | 3 + .../adapter/TunnelWorkingFaceRecordAdapter.kt | 7 + .../coaloperation/bean/TunnelWorkingItem.kt | 8 + .../zmkg/coaloperation/bean/TunnelingBean.kt | 244 +++++++++--------- .../zmkg/coaloperation/data/api/HomeApi.kt | 15 +- .../db/dao/TunnelWorkingFaceDao.kt | 4 +- .../db/dao/TunnelWorkingFaceRecordDao.kt | 6 +- .../activity/AddWorkingFaceRecordActivity.kt | 159 ++++++++---- .../tunneling/activity/TunnelingActivity.kt | 9 +- .../activity/WorkingFaceRecordActivity.kt | 17 +- .../activity/WorkingFaceStatisticsActivity.kt | 9 +- .../ui/user/fragment/UserFragment.kt | 77 +++++- .../zmkg/coaloperation/utils/DateTimeUtil.kt | 1 + .../coaloperation/utils/ExcelExportUtils.kt | 71 +++++ .../com/zmkg/coaloperation/utils/FileUtils.kt | 47 ++++ .../zmkg/coaloperation/view/CustomInfoView.kt | 15 +- .../main/res/drawable-xxhdpi/ic_data_push.png | Bin 0 -> 9658 bytes .../main/res/drawable/bg_icon_about_us.xml | 12 + .../res/drawable/bg_icon_cache_manage.xml | 12 + .../res/drawable/bg_icon_check_update.xml | 12 + .../main/res/drawable/bg_icon_data_pull.xml | 12 + .../main/res/drawable/bg_icon_data_push.xml | 12 + .../res/drawable/bg_icon_network_config.xml | 12 + .../main/res/drawable/bg_icon_system_exit.xml | 12 + .../app/src/main/res/drawable/ic_avatar.png | Bin 0 -> 14846 bytes .../src/main/res/drawable/ic_flag_edit.xml | 7 + .../main/res/layout/custom_my_info_view.xml | 63 +++-- .../app/src/main/res/layout/fragment_home.xml | 4 + .../app/src/main/res/layout/fragment_user.xml | 30 ++- .../res/layout/item_home_menu_left_right.xml | 32 +-- .../res/layout/item_home_menu_top_bottom.xml | 15 +- .../src/main/res/layout/list_item_rock.xml | 6 +- .../layout/list_item_tunnel_working_face.xml | 14 +- .../list_item_tunnel_working_face_record.xml | 18 +- .../app/src/main/res/xml/file_paths.xml | 4 + 37 files changed, 694 insertions(+), 297 deletions(-) create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/ExcelExportUtils.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/FileUtils.kt create mode 100644 coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_data_push.png create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_about_us.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_cache_manage.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_check_update.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_data_pull.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_data_push.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_network_config.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/bg_icon_system_exit.xml create mode 100644 coalMiningApp/app/src/main/res/drawable/ic_avatar.png create mode 100644 coalMiningApp/app/src/main/res/drawable/ic_flag_edit.xml create mode 100644 coalMiningApp/app/src/main/res/xml/file_paths.xml diff --git a/coalMiningApp/app/build.gradle b/coalMiningApp/app/build.gradle index fb10295..9acea61 100644 --- a/coalMiningApp/app/build.gradle +++ b/coalMiningApp/app/build.gradle @@ -26,6 +26,8 @@ android { arg("room.schemaLocation", "$projectDir/schemas") } } + // 设置输出APK文件名格式 + setProperty("archivesBaseName", "煤矿数采终端v${versionName}") } signingConfigs{ @@ -105,4 +107,7 @@ dependencies { implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" implementation 'com.google.code.gson:gson:2.10.1' + implementation("org.apache.poi:poi:5.2.3") + implementation("org.apache.poi:poi-ooxml:5.2.3") + } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/AndroidManifest.xml b/coalMiningApp/app/src/main/AndroidManifest.xml index 371d9d2..fe52274 100644 --- a/coalMiningApp/app/src/main/AndroidManifest.xml +++ b/coalMiningApp/app/src/main/AndroidManifest.xml @@ -3,7 +3,11 @@ xmlns:tools="http://schemas.android.com/tools" package="com.zmkg.coaloperation"> - + + + + + + + + + diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceAdapter.kt index 53bb06e..d0f16f3 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceAdapter.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceAdapter.kt @@ -49,6 +49,9 @@ class TunnelWorkingFaceAdapter(var list: MutableList) : 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 ) diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceRecordAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceRecordAdapter.kt index cd751cb..50ba583 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceRecordAdapter.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/TunnelWorkingFaceRecordAdapter.kt @@ -10,6 +10,8 @@ import com.zmkg.coaloperation.R import com.zmkg.coaloperation.db.entiry.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) : BaseQuickAdapter( @@ -50,6 +52,11 @@ class TunnelWorkingFaceRecordAdapter(var list: MutableList?=null, + var recordList: MutableList?=null, + var lithologyList: MutableList?=null +) diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/TunnelingBean.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/TunnelingBean.kt index 04d33c8..990d01f 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/TunnelingBean.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/TunnelingBean.kt @@ -33,60 +33,60 @@ import java.io.Serializable // 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 -) +// +//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, @@ -98,73 +98,73 @@ data class Params( /** * 工作面详情 */ -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 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, - 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 LatestRecord( +// val createBy: String, +// val createTime: String, +// val mineWorkingLithologyList: MutableList, +// 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 \ No newline at end of file +// +//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 \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/data/api/HomeApi.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/data/api/HomeApi.kt index 2bb3bb8..39f3cbd 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/data/api/HomeApi.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/data/api/HomeApi.kt @@ -3,7 +3,6 @@ package com.zmkg.coaloperation.data.api import com.zmkg.coaloperation.data.bean.ApiResponse import com.zmkg.coaloperation.db.entiry.tunnel.TunnelWorkingFaceEntity import com.zmkg.coaloperation.retorfit.UrlConfig -import com.zmkg.coaloperation.bean.FaceWorkDetailBean import com.zmkg.coaloperation.ui.home.bean.WaterLedgerBean import okhttp3.RequestBody import retrofit2.http.Body @@ -35,17 +34,17 @@ interface HomeApi { // @GET("/api/mine/tunnelling/surface/record/{recordId}") // suspend fun getTunnelingHomeItemData(@Path("recordId") recordId: String?): ApiResponse> - /** - * 掘进-工作面详情 - */ - @GET("/api/mine/tunnelling/surface/detail/{surfaceId}") - suspend fun getTunnelingSurfaceDetail(@Path("surfaceId") surfaceId: String?): ApiResponse +// /** +// * 掘进-工作面详情 +// */ +// @GET("/api/mine/tunnelling/surface/detail/{surfaceId}") +// suspend fun getTunnelingSurfaceDetail(@Path("surfaceId") surfaceId: String?): ApiResponse /** * 掘进-新增工作面 */ - @POST("/api/mine/tunnelling/surface/add") - suspend fun postTunnellingSurfaceAdd(@Body requestBody: RequestBody): ApiResponse +// @POST("/api/mine/tunnelling/surface/add") +// suspend fun postTunnellingSurfaceAdd(@Body requestBody: RequestBody): ApiResponse @GET("/api/mine/tunnelling/surface/detailList") suspend fun getTunnelHomeList(): ApiResponse?> diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceDao.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceDao.kt index 3266ae4..84cb629 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceDao.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceDao.kt @@ -20,10 +20,10 @@ interface TunnelWorkingFaceDao { @Update fun update(entity: TunnelWorkingFaceEntity) - @Query("SELECT * FROM tunnel_working_face ORDER BY createTime ASC") + @Query("SELECT * FROM tunnel_working_face ORDER BY createTime DESC") fun getEntityList(): MutableList? - @Query("SELECT * FROM tunnel_working_face WHERE dataState = :dataState ORDER BY createTime ASC") + @Query("SELECT * FROM tunnel_working_face WHERE dataState = :dataState ORDER BY createTime DESC") fun getEntityListByState(dataState: String): MutableList? @Query("SELECT * FROM tunnel_working_face WHERE surfaceId = :surfaceId") diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceRecordDao.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceRecordDao.kt index 2aba4c4..edc19e7 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceRecordDao.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/TunnelWorkingFaceRecordDao.kt @@ -21,16 +21,16 @@ interface TunnelWorkingFaceRecordDao { @Update fun update(entity: TunnelWorkingFaceRecordEntity) - @Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime ASC") + @Query("SELECT * FROM tunnel_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime DESC") fun getEntityList(surfaceId: Long): MutableList? - @Query("SELECT * FROM tunnel_working_face_record WHERE dataState = :dataState ORDER BY createTime ASC") + @Query("SELECT * FROM tunnel_working_face_record WHERE dataState = :dataState ORDER BY createTime DESC") fun getEntityListByState(dataState: String): MutableList? @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 ASC LIMIT 1") + @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") diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/AddWorkingFaceRecordActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/AddWorkingFaceRecordActivity.kt index 0c70aed..81ece71 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/AddWorkingFaceRecordActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/AddWorkingFaceRecordActivity.kt @@ -10,17 +10,23 @@ 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.entiry.tunnel.TunnelRoofLithologyEntity import com.zmkg.coaloperation.db.entiry.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 @@ -115,13 +121,19 @@ class AddWorkingFaceRecordActivity : mBinding.btnSave.clickWithDebounce { if (showType == 0) { - saveFaceRecord() + judgeInputParam { + saveFaceRecord() + } return@clickWithDebounce } - updateFaceRecord() + judgeInputParam { + updateFaceRecord() + } } mBinding.btnExport.clickWithDebounce { - showToast("开发中……") + judgeInputParam { + exportExcelFile() + } } mBinding.rvLithology.let { @@ -169,46 +181,6 @@ class AddWorkingFaceRecordActivity : } private fun saveFaceRecord() { - if (mBinding.tvWorkingDate.text.isBlank()) { - showToast("请选择施工日期") - return - } - if (mBinding.tvTeamShift.text.isBlank()) { - showToast("请选择施工班次") - return - } - if (mBinding.tvWorkTeam.text.isBlank()) { - showToast("请选择施工队伍") - return - } - if (mBinding.etTeamLeader.text.isBlank()) { - showToast("请输入带班队长") - return - } - if (mBinding.etWorkingFootage.text.isBlank()) { - showToast("请输入本班进尺") - return - } - if (mBinding.etSeamDip.text.isBlank()) { - showToast("请输入煤层倾角") - return - } - if (mBinding.etSeamHeight.text.isBlank()) { - showToast("请输入煤层高") - return - } - if (mBinding.etRecordPerson.text.isBlank()) { - showToast("请输入填写人") - return - } - val emptyDataList = roofLithologyList.filter { - it.positionStart.isBlank() || it.positionEnd.isBlank() || it.lithologyType.isBlank() - } - if (emptyDataList.isNotEmpty()) { - showToast("顶板岩性中存在部分编录点数据为空") - return - } - val faceRecord = TunnelWorkingFaceRecordEntity().also { it.recordId = recordId it.surfaceId = surfaceId @@ -218,9 +190,9 @@ class AddWorkingFaceRecordActivity : it.teamId = mBinding.tvWorkTeam.tag.toString() it.teamLeader = mBinding.etTeamLeader.text.toString().trim() - it.workingFootage = mBinding.etWorkingFootage.text.toString().trim() - it.seamDip = mBinding.etSeamDip.text.toString().trim() - it.seamHeight = mBinding.etSeamHeight.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()) @@ -230,8 +202,8 @@ class AddWorkingFaceRecordActivity : Log.d(TAG, "saveFaceRecord: ${roofLithologyList.toJson()}") workingFaceRecordViewModel.insert(faceRecord) { - EventBus.getDefault().post(faceRecord) roofLithologyViewModel.insertList(roofLithologyList) { + EventBus.getDefault().post(faceRecord) finish() } } @@ -263,18 +235,18 @@ class AddWorkingFaceRecordActivity : it.teamId = mBinding.tvWorkTeam.tag.toString() it.teamLeader = mBinding.etTeamLeader.text.toString().trim() - it.workingFootage = mBinding.etWorkingFootage.text.toString().trim() - it.seamDip = mBinding.etSeamDip.text.toString().trim() - it.seamHeight = mBinding.etSeamHeight.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) { - EventBus.getDefault().post(faceRecord) roofLithologyViewModel.deleteList(recordId) { roofLithologyViewModel.insertList(roofLithologyList) { + EventBus.getDefault().post(faceRecord) finish() } } @@ -286,4 +258,89 @@ class AddWorkingFaceRecordActivity : } + 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 = 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) + } + } + } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/TunnelingActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/TunnelingActivity.kt index 2076f43..99977b8 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/TunnelingActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/TunnelingActivity.kt @@ -143,8 +143,8 @@ class TunnelingActivity : val index = workingFaceList.indexOfFirst { it.surfaceId == event.surfaceId } if (index == -1) { //新增工作面 - val insertIndex = workingFaceList.size - workingFaceList.add(event) + val insertIndex = 0 + workingFaceList.add(0,event) workingFaceAdapter.notifyItemInserted(insertIndex) workingFaceAdapter.notifyItemRangeChanged(insertIndex, insertIndex+1) return @@ -166,15 +166,18 @@ class TunnelingActivity : faceEntity.records?.let { records -> val index = records.indexOfFirst { it.recordId == event.recordId } if (index == -1) { - records.add(event) + 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 diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceRecordActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceRecordActivity.kt index ad925f7..3595138 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceRecordActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceRecordActivity.kt @@ -15,6 +15,7 @@ import com.zmkg.coaloperation.databinding.ActivityWorkingFaceRecordBinding import com.zmkg.coaloperation.db.entiry.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 @@ -65,10 +66,6 @@ class WorkingFaceRecordActivity : Log.d(TAG, "loadFaceRecord: ${faceRecord.toJsonString()}") faceRecord?.let { loadFaceRecord(it) - roofLithologyViewModel.getEntityList(it.recordId) { lithologyEntities -> - list[6].items = lithologyEntities - adapter.notifyItemChanged(6) - } } } @@ -86,17 +83,23 @@ class WorkingFaceRecordActivity : ) 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)) + list.add(TunnelWorkingItem(pageType = 1, name = "本班进尺", value = "${it.workingFootage?.formatDecimalString()}m")) // val rockList = mutableListOf() // 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)) - list.add(TunnelWorkingItem(pageType = 1, name = "煤层高", value = it.seamHeight)) + 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() { diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceStatisticsActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceStatisticsActivity.kt index 605d66c..1d98e18 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceStatisticsActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/tunneling/activity/WorkingFaceStatisticsActivity.kt @@ -12,7 +12,6 @@ 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.bean.FaceWorkDetailBean import com.zmkg.coaloperation.ui.tunneling.viewmodel.TunnelingViewModel import com.zmkg.coaloperation.utils.ScreenUtil import com.zmkg.coaloperation.utils.formatDecimalString @@ -91,7 +90,7 @@ class WorkingFaceStatisticsActivity : workingFaceRecordViewModel.getLastEntity(detail.surfaceId) { record -> record?.let { mBinding.tvYesterdayLen.text = "${it.workingFootage?.formatDecimalString()}m" - mBinding.tvWorkingFaceAngle.text = "${it.seamDip?.formatDecimalString()}" + mBinding.tvWorkingFaceAngle.text = "${it.seamDip?.formatDecimalString()}°" // mBinding.tvMonthAccumulateLen.text = "${it.monthFootage}m" mBinding.tvWorkingFaceWater.text = "${it.waterYield?.formatDecimalString()}" @@ -134,9 +133,9 @@ class WorkingFaceStatisticsActivity : // } } - private fun setDataView(bean: FaceWorkDetailBean?) { - bean ?: return - } +// private fun setDataView(bean: FaceWorkDetailBean?) { +// bean ?: return +// } private fun stringToDouble(numText: String?): Double { if (numText.isNullOrEmpty() || numText.isBlank()) return 0.toDouble() diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/user/fragment/UserFragment.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/user/fragment/UserFragment.kt index 9f2fbc2..4fc71a3 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/user/fragment/UserFragment.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/user/fragment/UserFragment.kt @@ -9,6 +9,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.zmkg.coaloperation.R import com.zmkg.coaloperation.base.BaseVMBFragment +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 @@ -30,9 +31,9 @@ import kotlinx.coroutines.launch class UserFragment : BaseVMBFragment(R.layout.fragment_user) { - companion object { - const val TAG = "UserFragment" - } + companion object { + const val TAG = "UserFragment" + } private val workingFaceViewModel: TunnelWorkingFaceViewModel by lazy { ViewModelProvider(this)[TunnelWorkingFaceViewModel::class.java] @@ -64,12 +65,37 @@ class UserFragment : override fun initView(root: View?, savedInstanceState: Bundle?) { mBinding.apply { - networkConfig.setOrderStateInfo("网络配置", R.mipmap.network) - dataPull.setOrderStateInfo("数据拉取", R.drawable.ic_data_pull) - 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) } } @@ -78,6 +104,7 @@ class UserFragment : addClickViews( networkConfig, dataPull, + dataPush, cacheManage, checkUpdate, systemExit, @@ -94,13 +121,12 @@ class UserFragment : } R.id.data_pull -> { - showLoading("加载中") checkDataState { state -> if (state) { showToast("本地存在待提交的数据") return@checkDataState } - + showLoading("加载中") workingFaceViewModel.deleteAll { workingFaceRecordViewModel.deleteAll { roofLithologyViewModel.deleteAll { @@ -115,6 +141,10 @@ class UserFragment : } } + R.id.data_push -> { + dataPush() + } + R.id.cache_manage -> { toActivity(CacheManageActivity::class.java) } @@ -156,7 +186,7 @@ class UserFragment : list.forEach { faceEntity -> faceEntity.records?.let { recordList -> val lastRecordId = faceEntity.latestRecord?.recordId - val record = recordList.firstOrNull {it.recordId == lastRecordId} + val record = recordList.firstOrNull { it.recordId == lastRecordId } record?.latestRecordState = "1" //保存工作面记录数据 @@ -207,4 +237,27 @@ class UserFragment : } } + 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()}") + } + } + } + } + } diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/DateTimeUtil.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/DateTimeUtil.kt index a07207a..ae6b034 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/DateTimeUtil.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/DateTimeUtil.kt @@ -9,6 +9,7 @@ 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) diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/ExcelExportUtils.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/ExcelExportUtils.kt new file mode 100644 index 0000000..2ac1576 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/ExcelExportUtils.kt @@ -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, 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) diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/FileUtils.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/FileUtils.kt new file mode 100644 index 0000000..f182234 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/FileUtils.kt @@ -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 +// ) +// } +// } + + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/view/CustomInfoView.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/view/CustomInfoView.kt index ef50d4e..f3bbcd6 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/view/CustomInfoView.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/view/CustomInfoView.kt @@ -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 } } diff --git a/coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_data_push.png b/coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_data_push.png new file mode 100644 index 0000000000000000000000000000000000000000..97d08fb1fdffead21f8e2de05b4c0bd085129dd2 GIT binary patch literal 9658 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 Z0DyM)O|Q-fjxqw!*D=w4rRfs){{Z-+cfkMv literal 0 HcmV?d00001 diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_about_us.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_about_us.xml new file mode 100644 index 0000000..4c844ab --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_about_us.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_cache_manage.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_cache_manage.xml new file mode 100644 index 0000000..e4fce57 --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_cache_manage.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_check_update.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_check_update.xml new file mode 100644 index 0000000..2f1be6a --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_check_update.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_data_pull.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_data_pull.xml new file mode 100644 index 0000000..878e3ab --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_data_pull.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_data_push.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_data_push.xml new file mode 100644 index 0000000..2bd5c88 --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_data_push.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_network_config.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_network_config.xml new file mode 100644 index 0000000..d94bfff --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_network_config.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable/bg_icon_system_exit.xml b/coalMiningApp/app/src/main/res/drawable/bg_icon_system_exit.xml new file mode 100644 index 0000000..2bbda2f --- /dev/null +++ b/coalMiningApp/app/src/main/res/drawable/bg_icon_system_exit.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable/ic_avatar.png b/coalMiningApp/app/src/main/res/drawable/ic_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ec41d7207491915281246a9cef63cd9b9a72ef GIT binary patch literal 14846 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 + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/custom_my_info_view.xml b/coalMiningApp/app/src/main/res/layout/custom_my_info_view.xml index 87ee061..8c7ac1a 100644 --- a/coalMiningApp/app/src/main/res/layout/custom_my_info_view.xml +++ b/coalMiningApp/app/src/main/res/layout/custom_my_info_view.xml @@ -7,49 +7,44 @@ - + android:paddingHorizontal="15dp"> - - - - - - - + android:scaleType="fitCenter" + android:padding="11dp" + tools:src="@mipmap/network" + tools:background="@drawable/bg_icon_network_config"/> + - - + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/fragment_home.xml b/coalMiningApp/app/src/main/res/layout/fragment_home.xml index 49291b7..6b2e962 100644 --- a/coalMiningApp/app/src/main/res/layout/fragment_home.xml +++ b/coalMiningApp/app/src/main/res/layout/fragment_home.xml @@ -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" /> + + @@ -92,7 +93,8 @@ android:layout_height="68dp" android:layout_centerHorizontal="true" android:layout_marginTop="60dp" - android:background="#e3e3e3" /> + app:srcCompat="@drawable/ic_avatar"/> + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/item_home_menu_left_right.xml b/coalMiningApp/app/src/main/res/layout/item_home_menu_left_right.xml index 8bbfe27..e7ac021 100644 --- a/coalMiningApp/app/src/main/res/layout/item_home_menu_left_right.xml +++ b/coalMiningApp/app/src/main/res/layout/item_home_menu_left_right.xml @@ -7,34 +7,36 @@ - + + - - - + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/item_home_menu_top_bottom.xml b/coalMiningApp/app/src/main/res/layout/item_home_menu_top_bottom.xml index 88c6509..a6c6022 100644 --- a/coalMiningApp/app/src/main/res/layout/item_home_menu_top_bottom.xml +++ b/coalMiningApp/app/src/main/res/layout/item_home_menu_top_bottom.xml @@ -7,9 +7,11 @@ - - + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/list_item_rock.xml b/coalMiningApp/app/src/main/res/layout/list_item_rock.xml index 602d7c4..3794596 100644 --- a/coalMiningApp/app/src/main/res/layout/list_item_rock.xml +++ b/coalMiningApp/app/src/main/res/layout/list_item_rock.xml @@ -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" diff --git a/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face.xml b/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face.xml index cb1e861..923f70c 100644 --- a/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face.xml +++ b/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face.xml @@ -26,10 +26,22 @@ app:shapeStrokeColor="#FF26FFEB" app:shapeStrokeWidth="0.5dp"> + + + + + diff --git a/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face_record.xml b/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face_record.xml index 4263451..7117155 100644 --- a/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face_record.xml +++ b/coalMiningApp/app/src/main/res/layout/list_item_tunnel_working_face_record.xml @@ -8,7 +8,7 @@ - @@ -68,7 +68,21 @@ android:layout_width="match_parent" android:layout_height="1dp" app:dividerColor="#282C38" + android:layout_gravity="bottom" android:visibility="visible"/> - + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/xml/file_paths.xml b/coalMiningApp/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..ffa74ab --- /dev/null +++ b/coalMiningApp/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file