diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt index bafb243..90f10d8 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt @@ -3,6 +3,7 @@ import android.graphics.Color import android.graphics.Paint import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.StandardFileModel @@ -28,9 +29,9 @@ fileNumberView.text = dataRow.fileNo categoryView.text = dataRow.fileTypeName publisherView.text = dataRow.publisher - implementTimeView.text = dataRow.effectiveTime + implementTimeView.text = dataRow.effectiveTime.formatToYearMonthDay() implementStateView.text = dataRow.effectiveStatusName - createTimeView.text = dataRow.publishTime + createTimeView.text = dataRow.publishTime.formatToYearMonthDay() remarkView.text = dataRow.remark if (dataRow.minioFileName.isNullOrBlank()) { diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt index bafb243..90f10d8 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt @@ -3,6 +3,7 @@ import android.graphics.Color import android.graphics.Paint import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.StandardFileModel @@ -28,9 +29,9 @@ fileNumberView.text = dataRow.fileNo categoryView.text = dataRow.fileTypeName publisherView.text = dataRow.publisher - implementTimeView.text = dataRow.effectiveTime + implementTimeView.text = dataRow.effectiveTime.formatToYearMonthDay() implementStateView.text = dataRow.effectiveStatusName - createTimeView.text = dataRow.publishTime + createTimeView.text = dataRow.publishTime.formatToYearMonthDay() remarkView.text = dataRow.remark if (dataRow.minioFileName.isNullOrBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt index 0b1abb1..470a6a6 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -174,7 +175,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt index bafb243..90f10d8 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt @@ -3,6 +3,7 @@ import android.graphics.Color import android.graphics.Paint import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.StandardFileModel @@ -28,9 +29,9 @@ fileNumberView.text = dataRow.fileNo categoryView.text = dataRow.fileTypeName publisherView.text = dataRow.publisher - implementTimeView.text = dataRow.effectiveTime + implementTimeView.text = dataRow.effectiveTime.formatToYearMonthDay() implementStateView.text = dataRow.effectiveStatusName - createTimeView.text = dataRow.publishTime + createTimeView.text = dataRow.publishTime.formatToYearMonthDay() remarkView.text = dataRow.remark if (dataRow.minioFileName.isNullOrBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt index 0b1abb1..470a6a6 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -174,7 +175,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 3d01b59..d103c45 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -184,13 +186,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt index bafb243..90f10d8 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt @@ -3,6 +3,7 @@ import android.graphics.Color import android.graphics.Paint import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.StandardFileModel @@ -28,9 +29,9 @@ fileNumberView.text = dataRow.fileNo categoryView.text = dataRow.fileTypeName publisherView.text = dataRow.publisher - implementTimeView.text = dataRow.effectiveTime + implementTimeView.text = dataRow.effectiveTime.formatToYearMonthDay() implementStateView.text = dataRow.effectiveStatusName - createTimeView.text = dataRow.publishTime + createTimeView.text = dataRow.publishTime.formatToYearMonthDay() remarkView.text = dataRow.remark if (dataRow.minioFileName.isNullOrBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt index 0b1abb1..470a6a6 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -174,7 +175,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 3d01b59..d103c45 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -184,13 +186,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 332865d..de5aa99 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -7,9 +7,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -173,23 +173,26 @@ ) { //根据创建时间和计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt index bafb243..90f10d8 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt @@ -3,6 +3,7 @@ import android.graphics.Color import android.graphics.Paint import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.StandardFileModel @@ -28,9 +29,9 @@ fileNumberView.text = dataRow.fileNo categoryView.text = dataRow.fileTypeName publisherView.text = dataRow.publisher - implementTimeView.text = dataRow.effectiveTime + implementTimeView.text = dataRow.effectiveTime.formatToYearMonthDay() implementStateView.text = dataRow.effectiveStatusName - createTimeView.text = dataRow.publishTime + createTimeView.text = dataRow.publishTime.formatToYearMonthDay() remarkView.text = dataRow.remark if (dataRow.minioFileName.isNullOrBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt index 0b1abb1..470a6a6 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -174,7 +175,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 3d01b59..d103c45 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -184,13 +186,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 332865d..de5aa99 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -7,9 +7,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -173,23 +173,26 @@ ) { //根据创建时间和计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index 44e9aea..e90f80e 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.search +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -15,6 +18,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant @@ -26,6 +30,7 @@ class SearchStandardDeviceResultActivity : KotlinBaseActivity() { + private val context: Context = this@SearchStandardDeviceResultActivity private lateinit var param: String private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel @@ -169,6 +174,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -176,7 +191,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/build.gradle b/app/build.gradle index 17e74d2..4c7d981 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,14 +23,16 @@ targetSdkVersion 31 versionCode 1 versionName "1.0.0.0" + + ndk { + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64' + } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - - ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6f9aaab..2acc2f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,7 +42,7 @@ android:name=".view.BigImageActivity" android:theme="@style/Theme.BigImageActivity" /> - + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..617c554 --- /dev/null +++ b/app/src/main/ic_launcher-playstore.png Binary files differ diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt index 744e3a1..bc4b162 100644 --- a/app/src/main/java/com/casic/xz/meterage/extensions/String.kt +++ b/app/src/main/java/com/casic/xz/meterage/extensions/String.kt @@ -150,16 +150,10 @@ return "$defaultValue/test/${this.replace("\\", "/")}" } -fun String.isEarlier(time: String): Boolean { - val t1 = this.dateToTimestamp() - val t2 = time.dateToTimestamp() - return (t2 - t1) > 0 -} - -fun String.isLater(): Boolean { +fun String.isEarlierThenCurrent(): Boolean { val t1 = this.dateToTimestamp() val t2 = System.currentTimeMillis() - return (t2 - t1) > 0 + return (t1 - t2) < 0 } /** @@ -186,6 +180,17 @@ return dateFormat.format(date) } +fun String.formatToYearMonthDay(): String { + if (this.isBlank()) { + return this + } + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val date = simpleDateFormat.parse(this) + + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(date) +} + fun String.toChineseGrade(): String { if (this.isBlank()) { return "级别未知" diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt index 3a0fe2e..344fff7 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -28,7 +29,7 @@ projectCodeView.text = data.projectNo constStdProjView.text = data.constructionStandardProject // unitCodeView.text = data.modelNo - preparationDateView.text = data.preparationDate + preparationDateView.text = data.preparationDate.formatToYearMonthDay() categoryView.text = data.categoryName standardLevelView.text = data.standardLevelName transmitRangeView.text = data.transmitRangeName @@ -40,7 +41,7 @@ metrologyView.text = data.measureMajorName managerStateView.text = data.managerStateName assessmentUnitView.text = data.assessmentUnit - appraisalDateView.text = data.assessDate + appraisalDateView.text = data.assessDate.formatToYearMonthDay() uncertaintyView.text = data.uncertainty measureRangeView.text = data.mesureRange stdTempView.text = data.standardTemperature @@ -48,7 +49,7 @@ // certificateCodeView.text=data. // issuanceUnitView.text=data. // issuanceDateView.text=data. -// effectiveDateView.text=data. + effectiveDateView.text = data.validTime.formatToYearMonthDay() if (data.fileList.size == 0) { documentsView.text = "暂无" } else { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt index f42d017..51b3375 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/MeasurementStaffFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.StaffListModel import com.casic.xz.meterage.vm.MeterageTrainViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_measurement_staff.* class MeasurementStaffFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +37,26 @@ item.deptName } + if (item.certificateDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText(R.id.nameTagView, item.name.last().toString()) .setText(R.id.userNameView, item.name) .setText(R.id.useDeptView, useDept) .setText(R.id.certificateView, "证书编号:${item.verifierCertificateNo}") - .setText(R.id.expirationDateView, "有效期至:${item.certificateDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.certificateDate.formatToYearMonthDay()}" + ) } } staffRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt index aa45f3d..a7c42b5 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/SupportEquipmentFragment.kt @@ -3,11 +3,14 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.model.SupportEquipmentListModel import com.casic.xz.meterage.vm.EquipmentViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_device_support_equipment.* class SupportEquipmentFragment(private val id: String) : KotlinBaseFragment() { @@ -28,12 +31,28 @@ position: Int, item: SupportEquipmentListModel.DataModel.RowsModel ) { + + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.red.convertColor(requireContext()) + ) + } else { + viewHolder.setTextColor( + R.id.expirationDateView, + R.color.gray.convertColor(requireContext()) + ) + } + viewHolder.setText( R.id.nameTagView, item.equipmentName.last().toString() ).setText(R.id.deviceNameView, item.equipmentName) .setText(R.id.modelView, item.modelNo) .setText(R.id.deviceCodeView, "设备编号:${item.equipmentNo}") - .setText(R.id.expirationDateView, "有效期至:${item.validDate}") + .setText( + R.id.expirationDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) } } supportRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt index 376455b..573abd9 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/device/VerifyRegulationFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import kotlinx.android.synthetic.main.fragment_device_verify_regulation.* +//TODO 缺少UI设计 class VerifyRegulationFragment(private val id: String) : KotlinBaseFragment() { private lateinit var verifyViewModel: VerifyViewModel diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt index 365140a..0c5211d 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/entrust/BasicInformationFragment.kt @@ -6,6 +6,7 @@ import com.casic.xz.meterage.R import com.casic.xz.meterage.adapter.CertificateTypeAdapter import com.casic.xz.meterage.adapter.CustomerSampleAdapter +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.EntrustDetailModel import com.casic.xz.meterage.vm.ConfigViewModel @@ -21,9 +22,9 @@ entrustCodeView.text = data.orderCode senderView.text = data.deliverer contactView.text = data.delivererTel - entrustCreateView.text = data.orderTime - estimateTimeView.text = data.planDeliverTime - completedView.text = data.requireOverTime + entrustCreateView.text = data.orderTime.formatToYearMonthDay() + estimateTimeView.text = data.planDeliverTime.formatToYearMonthDay() + completedView.text = data.requireOverTime.formatToYearMonthDay() entrustNameView.text = data.customerName entrustContactView.text = data.customerPhone entrustAddressView.text = data.customerAddress diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt index 7bc3b01..f71db9e 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/BasicInformationFragment.kt @@ -4,6 +4,7 @@ import android.graphics.Paint import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.utils.LoadingDialogHub import com.casic.xz.meterage.vm.EquipmentViewModel @@ -31,7 +32,7 @@ verificationMethodView.text = data.mesureTypeName measuringRangeView.text = data.mesureRange uncertaintyView.text = data.uncertainty - firstUseView.text = data.createTime + firstUseView.text = data.createTime.formatToYearMonthDay() originalValueView.text = data.originValue usageDeptView.text = data.useDeptName userView.text = data.usePersonName @@ -39,8 +40,8 @@ verificationDeptView.text = data.useDeptName // nextVerificationDeptView.text = data. verificationPeriodView.text = data.mesureCycle - verificationDateView.text = data.mesureDate - effectiveDateView.text = data.validDate + verificationDateView.text = data.mesureDate.formatToYearMonthDay() + effectiveDateView.text = data.validDate.formatToYearMonthDay() verificationResultsView.text = data.mesureResultName abcView.text = data.abcName isNeedTechnicalView.text = if ( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt index e72ca2b..56ba98b 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/equipment/StateChangeLogFragment.kt @@ -8,6 +8,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.convertColor import kotlinx.android.synthetic.main.fragment_equipment_state_change_log.* class StateChangeLogFragment(private val id: String) : KotlinBaseFragment() { @@ -34,11 +35,16 @@ item.applyPersonName } - viewHolder.setText( - R.id.nameTagView, name.last().toString() - ).setText(R.id.userNameView, name) + if (!item.managerStateName.contains("在用")) { + viewHolder.setBackgroundColor( + R.id.stateView, R.color.gray.convertColor(requireContext()) + ) + } + + viewHolder.setText(R.id.nameTagView, name.last().toString()) + .setText(R.id.userNameView, name) .setText(R.id.dateView, "时间:${item.startDate} ~ ${item.endDate}") - .setText(R.id.stateView, "状态:${item.managerStateName}") + .setText(R.id.stateView, item.managerStateName) } } stateLogRecyclerView.addItemDecoration( diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt index 8190fd7..a1c00df 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/file/StandardFileFragment.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardFileModel import com.casic.xz.meterage.view.home.StandardFileDetailActivity @@ -144,7 +145,10 @@ .setText(R.id.fileStateView, item.effectiveStatusName) .setText(R.id.remarkView, "备注:$remark") .setText(R.id.fileCodeView, "文件号:${item.fileNo}") - .setText(R.id.releaseDateView, "实施时间:${item.publishTime}") + .setText( + R.id.releaseDateView, + "实施时间:${item.publishTime.formatToYearMonthDay()}" + ) if (!item.effectiveStatus.equals("1")) { viewHolder.setBackgroundColor( diff --git a/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt new file mode 100644 index 0000000..739167e --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/view/ChangePasswordActivity.kt @@ -0,0 +1,99 @@ +package com.casic.xz.meterage.view + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.utils.AuthenticationHelper +import com.casic.xz.meterage.utils.LoadingDialogHub +import com.casic.xz.meterage.utils.RSAUtils +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_change_password.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.nio.charset.StandardCharsets + +class ChangePasswordActivity : KotlinBaseActivity() { + + private lateinit var userViewModel: UserViewModel + private lateinit var newPassword: String + + override fun initData() { + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.changePwdResult.observe(this) { + if (it.code == 200) { + val intent = Intent() + intent.putExtra("newPassword", newPassword) + setResult(RESULT_OK, intent) + finish() + } + } + } + + override fun initEvent() { + leftBackView.setOnClickListener { finish() } + + submitButton.setOnClickListener { + /** + * isEmpty 认为空格(无论单空格还是多空格)都是不是空. + * isBlank 认为空格,换行符号(\n),tab(\t)都是空. + * */ + val oldPassword: String = oldPasswordView.text.toString().trim() + if (oldPassword.isBlank()) { + "请先输入原密码".show(this) + return@setOnClickListener + } + val newPassword: String = newPasswordView.text.toString().trim() + if (newPassword.isBlank()) { + "请输入新密码".show(this) + return@setOnClickListener + } + val repeatPassword: String = repeatPasswordView.text.toString().trim() + if (repeatPassword.isBlank()) { + "请再次输入新密码".show(this) + return@setOnClickListener + } + if (newPassword != repeatPassword) { + "新密码和确认密码输入不一致,请重新输入".show(this) + return@setOnClickListener + } + if (newPassword.length < 6 || newPassword.length > 16) { + "新密码长度不正确,请重新输入".show(this) + return@setOnClickListener + } + this.newPassword = newPassword + + //数据校验OK,可以修改密码 + val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! + val oldPassKey = RSAUtils.encryptDataByPublicKey( + oldPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + val newPassKey = RSAUtils.encryptDataByPublicKey( + newPassword.toByteArray(StandardCharsets.UTF_8), + publicKey + ) + userViewModel.changePassword(oldPassKey, newPassKey) + } + } + + override fun initLayoutView(): Int = R.layout.activity_change_password + + override fun observeRequestState() { + userViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") + else -> LoadingDialogHub.dismiss() + } + } + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + initLayoutImmersionBar(rootView) + titleView.text = "修改密码" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt deleted file mode 100644 index f68a025..0000000 --- a/app/src/main/java/com/casic/xz/meterage/view/ForgetPasswordActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.xz.meterage.view - -import android.content.Intent -import androidx.lifecycle.ViewModelProvider -import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.utils.AuthenticationHelper -import com.casic.xz.meterage.utils.LoadingDialogHub -import com.casic.xz.meterage.utils.RSAUtils -import com.casic.xz.meterage.vm.UserViewModel -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.vm.LoadState -import kotlinx.android.synthetic.main.activity_forget_password.* -import kotlinx.android.synthetic.main.include_base_title.* -import java.nio.charset.StandardCharsets - -class ForgetPasswordActivity : KotlinBaseActivity() { - - private lateinit var userViewModel: UserViewModel - private lateinit var newPassword: String - - override fun initData() { - userViewModel = ViewModelProvider(this)[UserViewModel::class.java] - userViewModel.changePwdResult.observe(this) { - if (it.code == 200) { - val intent = Intent() - intent.putExtra("newPassword", newPassword) - setResult(RESULT_OK, intent) - finish() - } - } - } - - override fun initEvent() { - leftBackView.setOnClickListener { finish() } - - submitButton.setOnClickListener { - /** - * isEmpty 认为空格(无论单空格还是多空格)都是不是空. - * isBlank 认为空格,换行符号(\n),tab(\t)都是空. - * */ - val oldPassword: String = oldPasswordView.text.toString().trim() - if (oldPassword.isBlank()) { - "请先输入原密码".show(this) - return@setOnClickListener - } - val newPassword: String = newPasswordView.text.toString().trim() - if (newPassword.isBlank()) { - "请输入新密码".show(this) - return@setOnClickListener - } - val repeatPassword: String = repeatPasswordView.text.toString().trim() - if (repeatPassword.isBlank()) { - "请再次输入新密码".show(this) - return@setOnClickListener - } - if (newPassword != repeatPassword) { - "新密码和确认密码输入不一致,请重新输入".show(this) - return@setOnClickListener - } - if (newPassword.length < 6 || newPassword.length > 16) { - "新密码长度不正确,请重新输入".show(this) - return@setOnClickListener - } - this.newPassword = newPassword - - //数据校验OK,可以修改密码 - val publicKey = RSAUtils.keyStrToPublicKey(AuthenticationHelper.publicKey)!! - val oldPassKey = RSAUtils.encryptDataByPublicKey( - oldPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - val newPassKey = RSAUtils.encryptDataByPublicKey( - newPassword.toByteArray(StandardCharsets.UTF_8), - publicKey - ) - userViewModel.changePassword(oldPwd = oldPassKey, newPwd = newPassKey) - } - } - - override fun initLayoutView(): Int = R.layout.activity_forget_password - - override fun observeRequestState() { - userViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "修改中,请稍后") - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(true).init() - initLayoutImmersionBar(rootView) - titleView.text = "修改密码" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt index f26d40e..f602804 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/LoginActivity.kt @@ -1,7 +1,6 @@ package com.casic.xz.meterage.view import android.app.Activity -import android.content.Intent import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts @@ -51,9 +50,9 @@ }) override fun initEvent() { - forgetPasswordView.setOnClickListener { - changePwdLauncher.launch(Intent(this, ForgetPasswordActivity::class.java)) - } +// forgetPasswordView.setOnClickListener { +// changePwdLauncher.launch(Intent(this, ChangePasswordActivity::class.java)) +// } loginButton.setOnClickListener { val userPhone = userPhoneView.text.toString() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt index b4a44b8..1592f3c 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/CertificateReportDetailActivity.kt @@ -20,6 +20,7 @@ import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_certificate_detail.* +//TODO 查看详情会闪退 class CertificateReportDetailActivity : KotlinBaseActivity() { private var fragmentPages: ArrayList = ArrayList() diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt index f90402b..3b8b4a3 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EntrustActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -168,7 +169,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt index cb474ff..6f9cf71 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/EquipmentActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -175,13 +177,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt index e888afb..c47a471 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/MeterageTrainActivity.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -145,25 +145,28 @@ position: Int, item: MeterageTrainListModel.DataModel.RowsModel ) { - //根据创建时间和计划培训时间判断培训状态 + //根据计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt index 44e1ad8..9366445 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardDeviceActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.home +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.LoadingDialogHub @@ -14,6 +17,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -24,6 +28,7 @@ class StandardDeviceActivity : KotlinBaseActivity() { + private val context: Context = this@StandardDeviceActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel private lateinit var deviceAdapter: NormalRecyclerAdapter @@ -152,6 +157,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -159,7 +174,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt index bafb243..90f10d8 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/home/StandardFileDetailActivity.kt @@ -3,6 +3,7 @@ import android.graphics.Color import android.graphics.Paint import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile import com.casic.xz.meterage.model.StandardFileModel @@ -28,9 +29,9 @@ fileNumberView.text = dataRow.fileNo categoryView.text = dataRow.fileTypeName publisherView.text = dataRow.publisher - implementTimeView.text = dataRow.effectiveTime + implementTimeView.text = dataRow.effectiveTime.formatToYearMonthDay() implementStateView.text = dataRow.effectiveStatusName - createTimeView.text = dataRow.publishTime + createTimeView.text = dataRow.publishTime.formatToYearMonthDay() remarkView.text = dataRow.remark if (dataRow.minioFileName.isNullOrBlank()) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt index 0b1abb1..470a6a6 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEntrustResultActivity.kt @@ -4,6 +4,7 @@ import android.os.Handler import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EntrustListModel @@ -174,7 +175,10 @@ .setText(R.id.customerPhoneView, item.customerPhone) .setText(R.id.sampleCountView, item.sampleCount) .setText(R.id.remarkView, remark) - .setText(R.id.entrustDateView, "委托时间:${item.orderTime}") + .setText( + R.id.entrustDateView, + "委托时间:${item.orderTime.formatToYearMonthDay()}" + ) .setText(R.id.entrustCodeView, "委托编号:${item.orderCode}") if (item.isUrgent == "0") { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt index 3d01b59..d103c45 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentResultActivity.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.EquipmentListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -184,13 +186,26 @@ item.usePersonName } + if (item.validDate.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.equipmentName, item.equipmentName) .setText(R.id.modelView, modelNo) .setText(R.id.equipmentStateView, item.managerStateName) .setText(R.id.equipmentCodeView, "装置编号:${item.equipmentNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.useDeptView, useDept) - .setText(R.id.deviceDateView, "有效期至:${item.validDate}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validDate.formatToYearMonthDay()}" + ) .setText(R.id.usePersonView, "管理员:$usePerson") if (!item.managerStateName.contains("在用")) { diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt index 332865d..de5aa99 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchMeterageTrainResultActivity.kt @@ -7,9 +7,9 @@ import androidx.lifecycle.ViewModelProvider import cn.bertsir.zbar.utils.QRUtils import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.diffCurrentTime import com.casic.xz.meterage.extensions.initLayoutImmersionBar -import com.casic.xz.meterage.extensions.isEarlier -import com.casic.xz.meterage.extensions.isLater +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.MeterageTrainListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -173,23 +173,26 @@ ) { //根据创建时间和计划培训时间判断培训状态 when { - item.createTime.isEarlier(item.trainTime) -> { - viewHolder.setText(R.id.trainStateView, "未进行") - viewHolder.setBackgroundColor( - R.id.trainStateView, Color.BLUE - ) - } - item.trainTime.isLater() -> { + item.trainTime.isEarlierThenCurrent() -> { viewHolder.setText(R.id.trainStateView, "已结束") viewHolder.setBackgroundColor( R.id.trainStateView, Color.GRAY ) } else -> { - viewHolder.setText(R.id.trainStateView, "培训中") - viewHolder.setBackgroundColor( - R.id.trainStateView, R.color.green.convertColor(context) - ) + val deltaT = item.trainTime.diffCurrentTime() + if (deltaT <= 1) { + viewHolder.setText(R.id.trainStateView, "培训中") + viewHolder.setBackgroundColor( + R.id.trainStateView, + R.color.green.convertColor(context) + ) + } else { + viewHolder.setText(R.id.trainStateView, "未开始") + viewHolder.setBackgroundColor( + R.id.trainStateView, Color.BLUE + ) + } } } viewHolder.setText(R.id.trainTitleView, item.planName) diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt index 44e9aea..e90f80e 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchStandardDeviceResultActivity.kt @@ -1,10 +1,13 @@ package com.casic.xz.meterage.view.search +import android.content.Context import android.os.Handler import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R +import com.casic.xz.meterage.extensions.formatToYearMonthDay import com.casic.xz.meterage.extensions.initLayoutImmersionBar +import com.casic.xz.meterage.extensions.isEarlierThenCurrent import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.StandardDeviceListModel import com.casic.xz.meterage.utils.AppMemoryCache @@ -15,6 +18,7 @@ import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant @@ -26,6 +30,7 @@ class SearchStandardDeviceResultActivity : KotlinBaseActivity() { + private val context: Context = this@SearchStandardDeviceResultActivity private lateinit var param: String private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var equipmentViewModel: EquipmentViewModel @@ -169,6 +174,16 @@ item.standardLaboratoryName } + if (item.validTime.isEarlierThenCurrent()) { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.red.convertColor(context) + ) + } else { + viewHolder.setTextColor( + R.id.deviceDateView, R.color.gray.convertColor(context) + ) + } + viewHolder.setText(R.id.deviceNameView, item.standardName) .setText(R.id.deviceStateView, item.managerStateName) .setText(R.id.transmitRangeView, transmitRange) @@ -176,7 +191,10 @@ .setText(R.id.deviceCodeView, "装置编号:${item.standardNo}") .setText(R.id.remarkView, "备注:$remark") .setText(R.id.deviceLibView, lab) - .setText(R.id.deviceDateView, "有效期至:${item.validTime}") + .setText( + R.id.deviceDateView, + "有效期至:${item.validTime.formatToYearMonthDay()}" + ) .setText(R.id.labOwnerView, "管理员:${item.laboratoryOwnerName}") } } diff --git a/app/src/main/res/layout/activity_change_password.xml b/app/src/main/res/layout/activity_change_password.xml new file mode 100644 index 0000000..6d8d42a --- /dev/null +++ b/app/src/main/res/layout/activity_change_password.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +