package cn.flightfeather.thirdappmodule.databinding
|
|
import android.arch.lifecycle.MutableLiveData
|
import cn.flightfeather.thirdappmodule.bean.vo.DPChangeInfo
|
import cn.flightfeather.thirdappmodule.bean.vo.DPProblemRecurrence
|
import cn.flightfeather.thirdappmodule.bean.vo.QueryOptSingle
|
import cn.flightfeather.thirdappmodule.common.net.ResultCallBack
|
import cn.flightfeather.thirdappmodule.module.base.BaseViewModel
|
import cn.flightfeather.thirdappmodule.repository.DataProdSingleSceneRepository
|
import cn.flightfeather.thirdappmodule.util.DateUtil
|
import org.jetbrains.anko.toast
|
import java.util.*
|
import kotlin.math.round
|
|
/**
|
* 场景历史情况
|
* @author riku
|
* Date: 2025/10/30
|
*/
|
class SceneHistoryViewModel : BaseViewModel() {
|
|
companion object {
|
// 整改率阈值
|
const val CHANGE_PER = 0.8
|
|
// 整改效率阈值
|
const val CHANGE_EFFICIENCY_PER = 0.5
|
}
|
|
private val dataProdSingleSceneRepository = DataProdSingleSceneRepository.instance
|
|
// 整改情况
|
val changeInfoTxt = MutableLiveData<String>()
|
|
// 整改效率
|
val changeEfficiencyTxt = MutableLiveData<String>()
|
|
// 问题复发情况
|
val problemRecurrenceTxt = MutableLiveData<String>()
|
|
// 巡查要点
|
val inspectionKeyPointTxt = MutableLiveData<String>()
|
|
// 应急巡查
|
val tempInspectionTxt = MutableLiveData<String>()
|
|
|
// 上个月整改率最差的情况
|
val changeInfoList = MutableLiveData<List<DPChangeInfo>>()
|
|
// 问题复发情况
|
val problemRecurrenceList = MutableLiveData<List<DPProblemRecurrence>>()
|
|
fun fetchChangeInfoList(sceneId: String) {
|
val queryOpts = getQueryOptSingleList(sceneId)
|
dataProdSingleSceneRepository.getChangeInfoList(queryOpts, object : ResultCallBack<List<DPChangeInfo>> {
|
override fun onSuccess(result: List<DPChangeInfo>?) {
|
if (!result.isNullOrEmpty()) {
|
changeInfoTxt.value = result.mapIndexed { i, info ->
|
// 筛选存在问题,并且整改率小于80%的月份
|
if (info.subTasks.isNullOrEmpty() || info.proCount == 0 || info.changePer >= CHANGE_PER) {
|
""
|
} else {
|
val time = DateUtil.parseYearMonth(queryOpts[i].startTime) ?: return@mapIndexed ""
|
val cal = Calendar.getInstance().apply { setTime(time) }
|
"${cal.get(Calendar.MONTH) + 1}月整改率为${round(info.changePer * 100)}%"
|
}
|
}.filter { it.isNotBlank() }.run {
|
if (this.isEmpty()) {
|
// "近期整改率都高于${round(CHANGE_PER * 100)}%,该工地表现良好。"
|
null
|
} else {
|
joinToString(",") + ",整改率较低。"
|
}
|
}
|
changeEfficiencyTxt.value = result.maxByOrNull { it.changeTime }
|
?.takeIf { it.proCount > 0 && it.changeEfficiency < CHANGE_EFFICIENCY_PER }
|
.run {
|
this?.subTasks?.takeIf { s -> s.isNotEmpty() }?.get(0)?.let { s ->
|
val time = DateUtil.getMonthStr(s.planstarttime)
|
"前三个月中, ${time}月份整改效率仅为${round(this.changeEfficiency * 100)}%(实际整改耗时${this.changeTime}天)。"
|
}
|
}
|
|
changeInfoList.value = result
|
}
|
}
|
|
override fun onFailure() {
|
application.toast("获取整改率情况失败")
|
}
|
})
|
}
|
|
fun fetchProblemRecurrence(sceneId: String) {
|
// 获取前三个月的内的记录
|
val queryOpt = QueryOptSingle().apply {
|
this.sceneId = sceneId
|
val now = Calendar.getInstance().apply {
|
set(Calendar.DAY_OF_MONTH, 1)
|
set(Calendar.HOUR_OF_DAY, 0)
|
set(Calendar.MINUTE, 0)
|
set(Calendar.SECOND, 0)
|
}
|
// 得到上月最后一天
|
now.add(Calendar.SECOND, -1)
|
endTime = DateUtil.getDateStr(now.time)
|
// 得到前4个月第一天
|
now.apply {
|
set(Calendar.DAY_OF_MONTH, 1)
|
set(Calendar.HOUR_OF_DAY, 0)
|
set(Calendar.MINUTE, 0)
|
set(Calendar.SECOND, 0)
|
}
|
now.add(Calendar.MONTH, -2)
|
startTime = DateUtil.getDateStr(now.time)
|
}
|
dataProdSingleSceneRepository.getProblemRecurrence(queryOpt, object : ResultCallBack<List<DPProblemRecurrence>> {
|
override fun onSuccess(result: List<DPProblemRecurrence>?) {
|
if (!result.isNullOrEmpty()) {
|
problemRecurrenceTxt.value = result
|
// .filter { it.changePer < CHANGE_PER }
|
.filter { it.count > 1 }
|
.mapIndexed { i, p ->
|
"${i + 1}. ${p.problemTag}(出现${p.count}次)"
|
}.joinToString(";\r\n").run {
|
if (this.isBlank()) {
|
null
|
} else {
|
"前三个月存在如下复发问题:\r\n$this"
|
}
|
}
|
|
problemRecurrenceList.value = result
|
}
|
}
|
|
override fun onFailure() {
|
application.toast("获取问题复发情况失败")
|
}
|
})
|
}
|
|
fun fetchInspectionKeyPoint(sceneId: String) {
|
inspectionKeyPointTxt.value = "出入口内、外路面;车辆冲洗;\r\n围墙喷淋;扬尘在线监测设备;技防设施;\r\n干粉砂浆机;渣土垃圾堆放区;纸质台账"
|
}
|
|
|
private fun getQueryOptSingleList(sceneId: String): List<QueryOptSingle> {
|
val queryOpts = mutableListOf<QueryOptSingle>()
|
|
// 获取前三个月的月头和月末时间
|
val now = Calendar.getInstance().apply {
|
set(Calendar.DAY_OF_MONTH, 1)
|
set(Calendar.HOUR_OF_DAY, 0)
|
set(Calendar.MINUTE, 0)
|
set(Calendar.SECOND, 0)
|
}
|
repeat(3) {
|
val queryOptSingle = QueryOptSingle().apply { this.sceneId = sceneId }
|
// 得到上月最后一天
|
now.add(Calendar.SECOND, -1)
|
queryOptSingle.endTime = DateUtil.getDateStr(now.time)
|
// 得到上月第一天
|
now.apply {
|
set(Calendar.DAY_OF_MONTH, 1)
|
set(Calendar.HOUR_OF_DAY, 0)
|
set(Calendar.MINUTE, 0)
|
set(Calendar.SECOND, 0)
|
}
|
queryOptSingle.startTime = DateUtil.getDateStr(now.time)
|
|
queryOpts.add(queryOptSingle)
|
}
|
|
return queryOpts
|
}
|
}
|