package com.flightfeather.ducha.module.common
|
|
import android.app.DatePickerDialog
|
import android.arch.lifecycle.Observer
|
import android.arch.lifecycle.ViewModelProviders
|
import android.os.Bundle
|
import android.view.MenuItem
|
import android.view.View
|
import android.widget.AdapterView
|
import cn.flightfeather.thirdappmodule.adapter.AllListViewAdapter
|
import cn.flightfeather.thirdappmodule.bean.entity.*
|
import cn.flightfeather.thirdappmodule.bean.vo.TaskVo
|
import cn.flightfeather.thirdappmodule.model.bean.ExcelConfigVo
|
import cn.flightfeather.thirdappmodule.module.base.BaseActivity
|
import cn.flightfeather.thirdappmodule.module.task.NO_CHOICE
|
import cn.flightfeather.thirdappmodule.module.task.SceneDetailViewModel
|
import cn.flightfeather.thirdappmodule.module.task.TaskViewModel
|
import cn.flightfeather.thirdappmodule.util.DateFormatter
|
import cn.flightfeather.thirdappmodule.util.DialogUtil2
|
import com.flightfeather.ducha.R
|
import com.flightfeather.ducha.module.task.DCNewTempTaskActivity.Companion.DEFAULT_DISTRICT
|
import com.flightfeather.ducha.module.task.DCNewTempTaskActivity.Companion.DEFAULT_SCENE_TYPE
|
import kotlinx.android.synthetic.main.dc_activity_file_export.*
|
import java.text.SimpleDateFormat
|
import java.util.*
|
|
/**
|
* @author riku
|
* Date: 2020/6/15
|
*/
|
class FileExportActivity : BaseActivity(), View.OnClickListener {
|
|
private lateinit var viewModel: FileExportViewModel
|
private lateinit var sceneViewModel: SceneDetailViewModel
|
private lateinit var taskViewModel: TaskViewModel
|
|
private lateinit var provinceAdapter: AllListViewAdapter<Province>
|
private lateinit var cityAdapter: AllListViewAdapter<City>
|
private lateinit var districtAdapter: AllListViewAdapter<District>
|
private lateinit var townAdapter: AllListViewAdapter<Town>
|
private lateinit var problemTypeAdapter: AllListViewAdapter<String>
|
private lateinit var problemDetailAdapter: AllListViewAdapter<String>
|
|
private lateinit var sceneTypeAdapter: AllListViewAdapter<Domainitem>
|
|
private lateinit var topTaskAdapter: AllListViewAdapter<TaskVo>
|
|
private val calS = Calendar.getInstance()
|
private var calE: Calendar = Calendar.getInstance()
|
|
private var subTaskDialog: DialogUtil2.MultiDialog? = null
|
private var selectedSubTaskIds = mutableListOf<String>()//选择的子任务id
|
|
override fun getLayoutId(): Int = R.layout.dc_activity_file_export
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
viewModel = ViewModelProviders.of(this).get(FileExportViewModel::class.java)
|
sceneViewModel = ViewModelProviders.of(this).get(SceneDetailViewModel::class.java)
|
taskViewModel = ViewModelProviders.of(this).get(TaskViewModel::class.java)
|
|
|
supportActionBar?.apply {
|
title = "导出文件"
|
setDisplayHomeAsUpEnabled(true)
|
}
|
|
initSpinner()
|
initObserver()
|
initData()
|
|
txt_start_time.setOnClickListener(this)
|
txt_end_time.setOnClickListener(this)
|
txt_submit.setOnClickListener(this)
|
}
|
|
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
when (item?.itemId) {
|
android.R.id.home -> onBackPressed()
|
}
|
return super.onOptionsItemSelected(item)
|
}
|
|
override fun onDestroy() {
|
viewModel.disposableList.forEach {
|
it.dispose()
|
}
|
super.onDestroy()
|
}
|
|
private fun initSpinner() {
|
provinceAdapter = object : AllListViewAdapter<Province>(sceneViewModel.provinceList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: Province?) {
|
holder?.setText(R.id.tv_item, obj?.provincename)
|
}
|
}
|
cityAdapter = object : AllListViewAdapter<City>(sceneViewModel.cityList, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: City?) {
|
holder?.setText(R.id.tv_item, obj?.cityname)
|
}
|
}
|
districtAdapter = object : AllListViewAdapter<District>(sceneViewModel.districtList, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: District?) {
|
holder?.setText(R.id.tv_item, obj?.districtname)
|
}
|
}
|
townAdapter = object : AllListViewAdapter<Town>(sceneViewModel.townList, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: Town?) {
|
holder?.setText(R.id.tv_item, obj?.townname)
|
}
|
}
|
sceneTypeAdapter = object : AllListViewAdapter<Domainitem>(sceneViewModel.allSceneTypeList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: Domainitem?) {
|
holder?.setText(R.id.tv_item, obj?.text)
|
}
|
}
|
topTaskAdapter = object : AllListViewAdapter<TaskVo>(taskViewModel.topTaskList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: TaskVo?) {
|
holder?.setText(R.id.tv_item, obj?.name)
|
}
|
}
|
problemTypeAdapter = object : AllListViewAdapter<String>(taskViewModel.problemTypeList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: String?) {
|
holder?.setText(R.id.tv_item, obj)
|
}
|
}
|
problemDetailAdapter = object : AllListViewAdapter<String>(taskViewModel.problemDetailList.value, R.layout.item_scense_detail_list) {
|
override fun bindView(holder: ViewHolder?, obj: String?) {
|
holder?.setText(R.id.tv_item, obj)
|
}
|
}
|
sp_province.apply {
|
adapter = provinceAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
sceneViewModel.cityList.apply {
|
clear()
|
val pId = (sp_province.selectedItem as Province).provinceid
|
sceneViewModel.allCityList.forEach {
|
if (it.pronvinceid == pId) {
|
add(it)
|
}
|
}
|
}
|
|
cityAdapter.notifyDataSetChanged()
|
}
|
}
|
}
|
|
sp_city.apply {
|
adapter = cityAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
sceneViewModel.districtList.apply {
|
clear()
|
add(District().apply { districtname = NO_CHOICE })
|
val cId = (sp_city.selectedItem as City).cityId
|
sceneViewModel.allDistrictList.forEach {
|
if (it.cityid == cId) {
|
add(it)
|
}
|
}
|
}
|
var index = 0
|
for (i in sceneViewModel.districtList.indices) {
|
if (sceneViewModel.districtList[i].districtname == DEFAULT_DISTRICT) {
|
index = i
|
break
|
}
|
}
|
|
districtAdapter.notifyDataSetChanged()
|
sp_district.setSelection(index)
|
}
|
}
|
}
|
|
sp_district.apply {
|
adapter = districtAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
sceneViewModel.townList.apply {
|
clear()
|
add(Town().apply { townname = NO_CHOICE })
|
val dId = (sp_district.selectedItem as District).districtid
|
sceneViewModel.allTownList.forEach {
|
if (it.districtid == dId) {
|
add(it)
|
}
|
}
|
}
|
|
townAdapter.notifyDataSetChanged()
|
}
|
}
|
}
|
|
sp_town.adapter = townAdapter
|
sp_scene_type.adapter = sceneTypeAdapter
|
sp_top_task.apply {
|
adapter = topTaskAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
getSubTask()
|
}
|
}
|
}
|
|
sp_problem_type.apply {
|
adapter = problemTypeAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
val pName = sp_problem_type.selectedItem as String
|
taskViewModel.onProblemTypeSelected(pName)
|
}
|
}
|
}
|
|
sp_problem_detail.apply {
|
adapter = problemDetailAdapter
|
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
getSubTask()
|
}
|
}
|
}
|
}
|
|
private fun initObserver() {
|
sceneViewModel.provinceList.observe(this, Observer {
|
provinceAdapter.notifyDataSetChanged()
|
})
|
|
sceneViewModel.allSceneTypeList.observe(this, Observer {
|
sceneTypeAdapter.notifyDataSetChanged()
|
it?.let {
|
it.add(0, Domainitem().apply {
|
text = DEFAULT_SCENE_TYPE
|
value = "0"
|
})
|
var index = 0
|
for (i in it.indices) {
|
if (it[i].text == DEFAULT_SCENE_TYPE) {
|
index = i
|
break
|
}
|
}
|
sp_scene_type.setSelection(index)
|
}
|
})
|
|
taskViewModel.topTaskList.observe(this, Observer {
|
topTaskAdapter.notifyDataSetChanged()
|
})
|
|
viewModel.progress.observe(this, Observer {
|
it?.let {
|
circularProgressBar.visibility = View.VISIBLE
|
txt_submit.visibility = View.GONE
|
txt_download.visibility = View.VISIBLE
|
circularProgressBar.progress = it.first.toFloat()
|
circularProgressBar.progressMax = it.second.toFloat()
|
|
if (it.first < it.second) {
|
txt_download.text = "文件下载中..."
|
} else {
|
txt_download.text = "文件下载完成"
|
}
|
}
|
})
|
|
taskViewModel.problemTypeList.observe(this, Observer {
|
problemTypeAdapter.notifyDataSetChanged()
|
})
|
|
taskViewModel.problemDetailList.observe(this, Observer {
|
problemDetailAdapter.notifyDataSetChanged()
|
})
|
|
taskViewModel.subTaskNameList.observe(this, Observer {
|
txt_subTask_content.setOnClickListener(this)
|
createSubTaskDialog()
|
})
|
}
|
|
private fun initData() {
|
calS.apply {
|
set(Calendar.HOUR_OF_DAY, 0)
|
set(Calendar.MINUTE, 0)
|
set(Calendar.SECOND, 0)
|
set(Calendar.MILLISECOND, 0)
|
}
|
calE.apply {
|
set(Calendar.HOUR_OF_DAY, 23)
|
set(Calendar.MINUTE, 59)
|
set(Calendar.SECOND, 59)
|
set(Calendar.MILLISECOND, 999)
|
}
|
val dateStart = DateFormatter.dateTimeFormat2.format(calS.time)
|
txt_start_time.text = dateStart
|
val dateEnd = DateFormatter.dateTimeFormat2.format(calE.time)
|
txt_end_time.text = dateEnd
|
|
sceneViewModel.getData()
|
sceneViewModel.getSceneType()
|
taskViewModel.getTopTask(0)
|
taskViewModel.getProblemType()
|
}
|
|
private var lastTopTaskId = ""
|
private var lastStartTime = ""
|
private var lastEndTime = ""
|
private fun getSubTask() {
|
val topTaskId = (sp_top_task.selectedItem as TaskVo).tguid
|
val startTime = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(calS.time)
|
val endTime = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(calE.time)
|
if (topTaskId != lastTopTaskId || startTime != lastStartTime || endTime != lastEndTime) {
|
taskViewModel.getSubTask(topTaskId, startTime, endTime)
|
lastTopTaskId = topTaskId
|
lastStartTime = startTime
|
lastEndTime = endTime
|
}
|
}
|
|
private fun createSubTaskDialog() {
|
val dataArray = taskViewModel.subTaskNameList.value?.toTypedArray() ?: emptyArray()
|
subTaskDialog = DialogUtil2.createMultiDialog(this, "选择子任务", dataArray) {
|
val text = StringBuilder()
|
selectedSubTaskIds.clear()
|
for (i in it.indices) {
|
if (i > 0) {
|
text.append("\r\n")
|
}
|
text.append(it[i].second)
|
selectedSubTaskIds.add(it[i].first)
|
}
|
if (text.isNotEmpty()) {
|
txt_subTask_content.text = text.toString()
|
}
|
}
|
}
|
|
private fun showDatePickerDialog(cal: Calendar, isStartTime: Boolean) {
|
val mYear = cal[Calendar.YEAR]
|
val mMonth = cal[Calendar.MONTH]
|
val mDay = cal[Calendar.DAY_OF_MONTH]
|
|
val dpDialog = DatePickerDialog(this, DatePickerDialog.OnDateSetListener { _, year, month, dayOfMonth ->
|
if (isStartTime) {
|
calS.set(year, month, dayOfMonth, 0, 0, 0)
|
val dateString = DateFormatter.dateTimeFormat2.format(calS.time)
|
txt_start_time.text = dateString
|
}
|
// calE.set(year, month, dayOfMonth, 23, 59, 59)
|
// val dateString = DateFormatter.dateTimeFormat2.format(calE.time)
|
// txt_end_time.text = dateString
|
|
getSubTask()
|
}, mYear, mMonth, mDay)
|
|
//结束时间的选择不能小于开始时间
|
if (!isStartTime) {
|
try {
|
dpDialog.datePicker.minDate = DateFormatter.dateTimeFormat2.parse(txt_start_time.text.toString()).time
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
}
|
dpDialog.show()
|
}
|
|
override fun onClick(v: View?) {
|
when (v?.id) {
|
R.id.txt_start_time -> {
|
showDatePickerDialog(calS, true)
|
}
|
R.id.txt_end_time -> {
|
showDatePickerDialog(calE, false)
|
}
|
R.id.txt_subTask_content -> {
|
subTaskDialog?.dialog?.show()
|
|
}
|
R.id.txt_submit -> {
|
try {
|
val topTaskId = (sp_top_task.selectedItem as TaskVo).tguid
|
val startTime = calS.time
|
val endTime = calE.time
|
val pCode = (sp_province.selectedItem as Province).provincecode
|
val cCode = (sp_city.selectedItem as City).citycode
|
val dCode = (sp_district.selectedItem as District).districtcode
|
val tCode = (sp_town.selectedItem as Town).towncode
|
val sceneType = if ((sp_scene_type.selectedItem as Domainitem).value == DEFAULT_SCENE_TYPE) {
|
null
|
} else {
|
(sp_scene_type.selectedItem as Domainitem).value.toIntOrNull()
|
}
|
val problemTypeName = if ((sp_problem_type.selectedItem as String) == TaskViewModel.ALL_PROBLEM) {
|
null
|
} else {
|
sp_problem_type.selectedItem as String
|
}
|
val problemDetail = if ((sp_problem_detail.selectedItem as String) == TaskViewModel.ALL_PROBLEM) {
|
null
|
} else {
|
sp_problem_detail.selectedItem as String
|
}
|
|
// val pCode = null
|
// val cCode = null
|
// val dCode = null
|
// val tCode = null
|
// val sceneType = null
|
val config = ExcelConfigVo(topTaskId, startTime, endTime, pCode, cCode, dCode, tCode, sceneType, selectedSubTaskIds, problemTypeName, problemDetail)
|
viewModel.exportFile(config) {
|
onBackPressed()
|
}
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
}
|
}
|
}
|
}
|