app/src/main/java/cn/flightfeather/thirdappmodule/databinding/SceneHistoryViewModel.kt
@@ -1,7 +1,6 @@
package cn.flightfeather.thirdappmodule.databinding
import android.arch.lifecycle.MutableLiveData
import android.view.View
import cn.flightfeather.thirdappmodule.bean.vo.DPChangeInfo
import cn.flightfeather.thirdappmodule.bean.vo.DPProblemRecurrence
import cn.flightfeather.thirdappmodule.bean.vo.QueryOptSingle
@@ -21,22 +20,37 @@
class SceneHistoryViewModel : BaseViewModel() {
    companion object {
        // 整改率阈值
        const val CHANGE_PER = 0.8
        // 整改效率阈值
        const val CHANGE_EFFICIENCY_PER = 0.5
    }
    private val dataProdSingleSceneRepository = DataProdSingleSceneRepository.instance
    // 上个月整改率最差的情况
    var worstChangeInfo = MutableLiveData<DPChangeInfo>()
    // 整改情况
    val changeInfoTxt = MutableLiveData<String>()
    var changeInfoTxt = MutableLiveData<String>()
    var changeEfficiencyTxt = MutableLiveData<String>()
    // 整改效率
    val changeEfficiencyTxt = MutableLiveData<String>()
    // 问题复发情况
//    var problemRecurrenceList = MutableLiveData<List<DPProblemRecurrence>>()
    var worstProblemRecurrence = MutableLiveData<DPProblemRecurrence>()
    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>> {
@@ -44,16 +58,31 @@
                if (!result.isNullOrEmpty()) {
                    changeInfoTxt.value = result.mapIndexed { i, info ->
                        // 筛选存在问题,并且整改率小于80%的月份
                        if (info.subTasks.isNullOrEmpty() && info.changePer >= CHANGE_PER) {
                        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() }.joinToString(",") + ",整改率较低,需加强监管。"
                    }.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}天)。"
                            }
                        }
                    worstChangeInfo.value = result[0]
                    changeInfoList.value = result
                }
            }
@@ -63,7 +92,7 @@
        })
    }
    fun fetchProblemRecurrence(sceneId:String) {
    fun fetchProblemRecurrence(sceneId: String) {
        // 获取前三个月的内的记录
        val queryOpt = QueryOptSingle().apply {
            this.sceneId = sceneId
@@ -83,13 +112,26 @@
                set(Calendar.MINUTE, 0)
                set(Calendar.SECOND, 0)
            }
            now.add(Calendar.MONTH, 2)
            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()) {
                    worstProblemRecurrence.value = result[0]
                    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
                }
            }
@@ -99,6 +141,9 @@
        })
    }
    fun fetchInspectionKeyPoint(sceneId: String) {
        inspectionKeyPointTxt.value = "出入口内、外路面;车辆冲洗;\r\n围墙喷淋;扬尘在线监测设备;技防设施;\r\n干粉砂浆机;渣土垃圾堆放区;纸质台账"
    }
    private fun getQueryOptSingleList(sceneId: String): List<QueryOptSingle> {