app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuEvidenceViewModel.kt
@@ -2,6 +2,7 @@
import android.arch.lifecycle.MutableLiveData
import cn.flightfeather.thirdapp.bean.*
import cn.flightfeather.thirdapp.bean.vo.ProblemlistVo
import cn.flightfeather.thirdapp.common.net.ResultCallBack
import cn.flightfeather.thirdapp.model.event.ProblemEvent
import cn.flightfeather.thirdapp.module.base.BaseViewModel
@@ -9,6 +10,7 @@
import okhttp3.ResponseBody
import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.toast
import java.io.File
/**
 * @author riku
@@ -31,6 +33,13 @@
    val problemMap = HashMap<String, ArrayList<Problemtype>>()
    val mediaFileList = MutableLiveData<List<Mediafile>>()
    //所有数据加载完成通知
    val loadingOver = MutableLiveData<Boolean>()
    //记录各个数据加载是否完成的状态
    private val loadingStatus = BooleanArray(3)
    /**
     * 获取场景问题可选位置(目前只有工地,但所有场景都使用)
     */
@@ -39,6 +48,7 @@
            override fun onSuccess(result: ArrayList<Domainitem>?) {
                result?.let {
                    locationList.value = it
                    onLoaded(0)
                }
            }
@@ -59,8 +69,8 @@
                    if (it.isEmpty()) {
                        it.add(Problemtype().apply {
                            guid = "0"
                            typename = "无"
                            name = "无"
                            typename = "其他"
                            name = "其他"
                        })
                    }
@@ -76,6 +86,8 @@
                    }
                    problemFatherType.value = typeList
                    onLoaded(1)
                }
            }
@@ -98,6 +110,8 @@
                    }
                    advices.add("暂无建议")
                    suggestionList.value = advices
                    onLoaded(2)
                }
            }
@@ -105,6 +119,57 @@
            }
        })
    }
    /**
     * 根据问题找到服务器和本地的所有图片
     */
    fun getMediaFileList(p: ProblemlistVo) {
        problemRepository.getMediaFileLocal(p.guid, object : ResultCallBack<List<Mediafile>> {
            override fun onSuccess(result: List<Mediafile>?) {
                result?.let {
                    p.mediafileList.addAll(it)
                    mediaFileList.value = p.mediafileList
                }
            }
            override fun onFailure() {
            }
        })
    }
    /**
     * 下载问题图片
     *  fixme: 2020/8/6 目前由于原程序设置图片的方式为手动下载图片,因此沿用,之后统一用Glide等第三方库代替
     */
    fun downLoadMediaFile(mediaFile: Mediafile, s: (file: File) -> Unit) {
        problemRepository.downloadMediaFile(mediaFile, object : ResultCallBack<File> {
            override fun onSuccess(result: File?) {
                result?.let {
                    s(it)
                }
            }
            override fun onFailure() {
            }
        })
    }
    /**
     * 删除问题图片
     */
    fun deleteMediaFile(mediaFile: List<Mediafile>) {
        mediaFile.forEach {
            problemRepository.deleteMediaFile(it, object : ResultCallBack<Boolean> {
                override fun onSuccess(result: Boolean?) {
                }
                override fun onFailure() {
                }
            })
        }
    }
    /**
@@ -124,6 +189,24 @@
                application.toast("提交失败")
            }
        })
    }
    /**
     * 更新一个问题
     */
    fun updateProblem(problem: ProblemlistVo) {
        problemRepository.updateProblem(problem, object : ResultCallBack<ResponseBody> {
            override fun onSuccess(result: ResponseBody?) {
                result?.let {
                    application.toast("修改成功")
                    EventBus.getDefault().post(ProblemEvent(problem.voToEntity()))
                }
            }
            override fun onFailure() {
                application.toast("修改失败,请检查网络")
            }
        })
    }
@@ -151,4 +234,23 @@
            problemType.value = it
        }
    }
    /**
     * 判断是否所有的数据都加载完成
     */
    fun onLoaded(i: Int) {
        if (i < loadingStatus.size) {
            loadingStatus[i] = true
        }
        var isLoadOver = true
        loadingStatus.forEach {
            isLoadOver = isLoadOver.and(it)
        }
        if (isLoadOver) {
            loadingOver.value = isLoadOver
            for (y in loadingStatus.indices) {
                loadingStatus[y] = false
            }
        }
    }
}