package cn.flightfeather.thirdapp.module.inspection
|
|
import android.app.Dialog
|
import android.arch.lifecycle.Observer
|
import android.arch.lifecycle.ViewModelProviders
|
import android.content.Intent
|
import android.os.Bundle
|
import android.os.Handler
|
import android.support.v7.widget.LinearLayoutManager
|
import android.view.View
|
import android.view.animation.AnimationUtils
|
import android.widget.AdapterView
|
import android.widget.ArrayAdapter
|
import cn.flightfeather.thirdapp.CommonApplication
|
import cn.flightfeather.thirdapp.R
|
import cn.flightfeather.thirdapp.activity.UploadMediaFilesActivity
|
import cn.flightfeather.thirdapp.adapter.TaskListAdapter
|
import cn.flightfeather.thirdapp.bean.entity.Subtask
|
import cn.flightfeather.thirdapp.bean.vo.DayTaskProgressVo
|
import cn.flightfeather.thirdapp.module.base.BaseFragment
|
import cn.flightfeather.thirdapp.util.DateFormatter
|
import cn.flightfeather.thirdapp.util.DialogUtil
|
import cn.flightfeather.thirdapp.util.Domain
|
import com.haibin.calendarview.Calendar
|
import com.haibin.calendarview.CalendarView
|
import kotlinx.android.synthetic.main.fragment_inspection2.*
|
import java.util.*
|
import kotlin.collections.ArrayList
|
import kotlin.collections.HashMap
|
import kotlin.math.abs
|
|
/**
|
* @author riku
|
* Date: 2019/7/29
|
* 巡查任务查询日历fragment
|
*/
|
class InspectionFragment:BaseFragment(), View.OnClickListener {
|
|
lateinit var viewModel: InspectionViewModel
|
|
private val schemeMap = HashMap<String, Calendar>()
|
//当前选中日任务的子任务列表
|
private val curSubTaskList = ArrayList<Subtask>()
|
//当前选中的总任务的日任务列表
|
private var curDayTaskList = ArrayList<DayTaskProgressVo>()
|
//当前选中的日期
|
private var curDate = Date()
|
|
private lateinit var subTaskListAdapter: TaskListAdapter
|
|
private var loadingDialog: Dialog? = null
|
|
//日历显示模式(1:展示子任务完成百分比;0:展示整改完成百分比)
|
private var calendarMode = 1
|
|
override fun getLayoutId(): Int = R.layout.fragment_inspection2
|
|
override fun onCreateView() {
|
super.onCreateView()
|
viewModel = ViewModelProviders.of(this).get(InspectionViewModel::class.java)
|
}
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
super.onViewCreated(view, savedInstanceState)
|
initCalender()
|
initWidget()
|
|
viewModel.monthTaskList.observe(this, Observer {
|
activity?.let {a ->
|
it?.let {
|
val items = arrayListOf<String>()
|
if (it.size == 0) {
|
items.add("无任务")
|
}
|
it.forEach {vo ->
|
items.add(vo.name)
|
}
|
sp_top_task.adapter = ArrayAdapter(a, R.layout.item_spinner_drop_down, items)
|
}
|
}
|
})
|
|
viewModel.dayTaskList.observe(this, Observer {
|
// 2019/7/29 在日历上添加标记点
|
it?.let {
|
curDayTaskList = it
|
addScheme(it)
|
refreshText(it)
|
// closeLoading()
|
}
|
})
|
|
viewModel.subTaskList.observe(this, Observer {
|
it?.let {
|
refreshSubTaskList(it,curDate)
|
}
|
})
|
|
viewModel.hasUnUploadImage.observe(this, Observer {
|
it?.let {
|
img_upload_image.isSelected = it
|
}
|
})
|
|
showLoading()
|
viewModel.getMonthTask(DateFormatter.YearMonthFormat.format(Date()))
|
viewModel.checkUnUploadImage()
|
}
|
|
private fun refreshDate(calendar: Calendar) {
|
calendar.apply {
|
val monthDay = "${month}月${day}日"
|
tv_month_day.text = monthDay
|
tv_year.text = "$year"
|
tv_lunar.text = lunar
|
|
val yearMonth = "${year}年${month}月"
|
tv_year_month.text = yearMonth
|
|
val cal = java.util.Calendar.getInstance().apply {
|
set(year, month - 1, day)
|
}
|
curDate = cal.time
|
}
|
}
|
|
private fun refreshSubTaskList(newSubTaskList: ArrayList<Subtask> = arrayListOf(), taskDate:Date) {
|
curSubTaskList.clear()
|
with(curDayTaskList) breaking@{
|
forEach {
|
val cal1 = java.util.Calendar.getInstance().apply { time = taskDate }
|
val cal2 = java.util.Calendar.getInstance().apply { time = it.date }
|
if (cal1.get(java.util.Calendar.YEAR) == cal2.get(java.util.Calendar.YEAR)
|
&& cal1.get(java.util.Calendar.MONTH) == cal2.get(java.util.Calendar.MONTH)
|
&& cal1.get(java.util.Calendar.DAY_OF_MONTH) == cal2.get(java.util.Calendar.DAY_OF_MONTH)) {
|
curSubTaskList.add(Subtask().apply {
|
planstarttime = it.date
|
extension1 = it.totalTaskNum.toString()
|
extension2 = it.completeTaskNum.toString()
|
extension3 = it.changedTaskNum.toString()
|
})
|
return@breaking
|
}
|
}
|
}
|
if (curSubTaskList.isEmpty()) {
|
curSubTaskList.add(Subtask().apply {
|
planstarttime = taskDate
|
extension1 = "0"
|
extension2 = "0"
|
extension3 = "0"
|
})
|
}
|
curSubTaskList.addAll(newSubTaskList.sortedBy {
|
when (it.status) {
|
Domain.TASK_STATUS_WAITING -> 1
|
Domain.TASK_STATUS_RUNNING -> 2
|
Domain.TASK_STATUS_FINISHED -> 3
|
else -> -1
|
}
|
})
|
subTaskListAdapter.notifyDataSetChanged()
|
closeLoading()
|
}
|
/**
|
* 初始化日历控件
|
*/
|
private fun initCalender() {
|
// 2019/7/29 日期选择时,列表展示当天子任务
|
// 2019/7/29 月份变换时,重新获取月任务
|
calendarView.setOnCalendarSelectListener(object : CalendarView.OnCalendarSelectListener {
|
override fun onCalendarSelect(calendar: Calendar?, isClick: Boolean) {
|
calendar?.apply {
|
refreshDate(this)
|
|
if (hasScheme()) {
|
showLoading()
|
schemes[0]?.other?.let {
|
viewModel.getSubTask(it)
|
}
|
} else {
|
refreshSubTaskList(arrayListOf(), curDate)
|
}
|
}
|
|
}
|
|
override fun onCalendarOutOfRange(calendar: Calendar?) {
|
}
|
})
|
|
calendarView.setOnMonthChangeListener { year, month ->
|
viewModel.getMonthTask("$year-${if (month < 10) "0$month" else "$month"}")
|
}
|
}
|
|
/**
|
* 初始化其余控件
|
*/
|
private fun initWidget() {
|
calendarView.run {
|
val monthDay = "${curMonth}月${curDay}日"
|
tv_month_day.text = monthDay
|
tv_year.text = "$curYear"
|
tv_lunar.text = "今日"
|
|
val yearMonth = "${curYear}年${curMonth}月"
|
tv_year_month.text = yearMonth
|
}
|
|
sp_top_task.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
override fun onNothingSelected(parent: AdapterView<*>?) = Unit
|
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
if (viewModel.monthTaskList.value?.size != 0) {
|
viewModel.monthTaskList.value?.get(position)?.tguid?.let {
|
showLoading()
|
viewModel.getDayTask(it)
|
}
|
} else {
|
//清空日历标记
|
calendarView.run {
|
clearSchemeDate()
|
scrollToSelectCalendar()
|
}
|
}
|
}
|
}
|
|
recyclerView.apply {
|
layoutManager = LinearLayoutManager(context)
|
|
subTaskListAdapter = TaskListAdapter(context, curSubTaskList).apply {
|
setOnDeleteListener {position ->
|
viewModel.deleteSubTask(curSubTaskList[position].stguid) {
|
subTaskListAdapter.notifyItemRemoved(position)
|
subTaskListAdapter.notifyItemRangeChanged(position, curSubTaskList.size - position)
|
curSubTaskList.removeAt(position)
|
}
|
}
|
setOnItemClickListener {
|
val intent = Intent(activity, InspectionDetailActivity::class.java)
|
intent.putExtra("subTask", curSubTaskList[it])
|
startActivity(intent)
|
}
|
}
|
adapter = subTaskListAdapter
|
|
//给管理员添加滑动删除子任务功能
|
if (CommonApplication.getInstance().currentUser.usertypeid == 0.toByte()) {
|
subTaskListAdapter.setDeleteable(true)
|
// val callback = PlusItemSlideCallback(WItemTouchHelperPlus.SLIDE_ITEM_TYPE_ITEMVIEW)
|
// WItemTouchHelperPlus(callback as WItemTouchHelperPlus.Callback?).attachToRecyclerView(this)
|
}
|
}
|
|
fab_map.hide()
|
|
fab_map.setOnClickListener(this)
|
sw.setOnClickListener(this)
|
img_refresh.setOnClickListener(this)
|
img_upload_image.setOnClickListener(this)
|
}
|
|
/**
|
* 在日历上添加标记
|
* 此处规定第一个参数 type=1 时,表示展示该标记,type=0 时,表示隐藏该标记
|
* @see [cn.flightfeather.thirdapp.view.calendarview.ProgressMonthView.onDrawScheme] 和 [cn.flightfeather.thirdapp.view.calendarview.ProgressWeekView.onDrawScheme]
|
*/
|
private fun addScheme(dayTasks: ArrayList<DayTaskProgressVo>) {
|
schemeMap.clear()
|
dayTasks.forEach {
|
val scheme = getSchemeCalendar(java.util.Calendar.getInstance().apply { time = it.date }).apply {
|
val changeP = if (it.changedTaskNum == 0) 0 else it.changedTaskNum * 100 / if (it.totalTaskNum == 0) 1 else it.totalTaskNum
|
val completeP = if (it.completeTaskNum == 0) 0 else it.completeTaskNum * 100 / if (it.totalTaskNum == 0) 1 else it.totalTaskNum
|
|
addScheme(abs(calendarMode - 1), 0, "$changeP", it.guid)
|
addScheme(calendarMode, 0, "$completeP", it.guid)
|
if (it.check) {
|
addScheme(2, 0, "待审核", it.guid)
|
}
|
}
|
schemeMap[scheme.toString()] = scheme
|
}
|
calendarView.run {
|
clearSchemeDate()
|
setSchemeDate(schemeMap)
|
scrollToSelectCalendar()
|
}
|
}
|
|
private fun getSchemeCalendar(cal: java.util.Calendar, color: Int? = null): Calendar {
|
val calendar = Calendar()
|
calendar.year = cal.get(java.util.Calendar.YEAR)
|
calendar.month = cal.get(java.util.Calendar.MONTH) + 1
|
calendar.day = cal.get(java.util.Calendar.DAY_OF_MONTH)
|
color?.let { calendar.schemeColor = it }//如果单独标记颜色、则会使用这个颜色
|
return calendar
|
}
|
|
private fun refreshText(dayTasks: ArrayList<DayTaskProgressVo>) {
|
var a = 0
|
var b = 0
|
var c = 0
|
dayTasks.forEach {
|
a += it.changedTaskNum
|
b += it.completeTaskNum
|
c += it.totalTaskNum
|
}
|
val t1 = "整改:$a/$c"
|
val t2 ="进度:$b/$c"
|
tv_statistic.text = t1
|
tv_progress.text = t2
|
}
|
|
fun showLoading() {
|
if (loadingDialog == null) {
|
loadingDialog = DialogUtil.createLoadingDialog(activity, "")
|
} else {
|
if (loadingDialog?.isShowing == false) {
|
loadingDialog?.show()
|
}
|
}
|
|
// Handler().postDelayed({
|
// closeLoading()
|
// }, 10000)
|
}
|
|
private fun closeLoading() {
|
if (loadingDialog?.isShowing == true) {
|
loadingDialog?.dismiss()
|
}
|
}
|
|
override fun onClick(v: View?) {
|
when (v?.id) {
|
R.id.fab_map -> {
|
// todo: 2019/7/30 goto [SubTaskMapActivity]
|
}
|
R.id.sw -> {
|
calendarMode = abs(calendarMode - 1)
|
refreshText(curDayTaskList)
|
addScheme(curDayTaskList)
|
}
|
R.id.img_refresh -> {
|
v.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.anim_rotate))
|
calendarView.selectedCalendar.run {
|
viewModel.getMonthTask("$year-${if (month < 10) "0$month" else "$month"}")
|
}
|
}
|
R.id.img_upload_image -> {
|
val intent = Intent(activity, UploadMediaFilesActivity::class.java)
|
startActivity(intent)
|
}
|
}
|
}
|
}
|