|
|
@@ -1,22 +1,30 @@
|
|
|
package com.yingyang.workbenches.datamonitor
|
|
|
|
|
|
import android.text.Html
|
|
|
+import android.text.TextUtils
|
|
|
+import androidx.recyclerview.widget.GridLayoutManager
|
|
|
import com.yingyang.workbenches.adapter.DataMonitorAdapter
|
|
|
+import com.yingyang.workbenches.adapter.DateAdapter
|
|
|
import com.yingyang.workbenches.databinding.FragmentDataMonitorBinding
|
|
|
+import com.yingyang.workbenches.entity.DayBean
|
|
|
import com.yingyang.workbenches.entity.MonthRecordBean
|
|
|
import com.yingyangfly.baselib.mvvm.BaseMVVMFragment
|
|
|
import com.yingyangfly.baselib.utils.RxBusCodes
|
|
|
+import com.yingyangfly.baselib.utils.StringUtil
|
|
|
import com.yingyangfly.baselib.utils.User
|
|
|
import gorden.rxbus2.Subscribe
|
|
|
import gorden.rxbus2.ThreadMode
|
|
|
-
|
|
|
+import java.util.*
|
|
|
|
|
|
/**
|
|
|
* 数据监控
|
|
|
*/
|
|
|
class DataMonitorFragment : BaseMVVMFragment<FragmentDataMonitorBinding, DataMonitorViewModel>() {
|
|
|
|
|
|
+ private val calendar by lazy { Calendar.getInstance() }
|
|
|
private var monthRecordList = mutableListOf<MonthRecordBean>()
|
|
|
+ private var dataList = mutableListOf<DayBean>()
|
|
|
+ private val dateAdapter by lazy { DateAdapter() }
|
|
|
|
|
|
/**
|
|
|
* 数据监控adapter
|
|
|
@@ -26,7 +34,11 @@ class DataMonitorFragment : BaseMVVMFragment<FragmentDataMonitorBinding, DataMon
|
|
|
|
|
|
override fun initViews() {
|
|
|
binding {
|
|
|
- val summarize = "您已开通居家训练<font color='#FF0000'>10</font>天,共累计完成了专属专属训练<font color='#FF0000'>5</font>次"
|
|
|
+ rvDate.layoutManager = GridLayoutManager(mContext, 7)
|
|
|
+ rvDate.adapter = dateAdapter
|
|
|
+ dateAdapter.setData(dataList)
|
|
|
+ val summarize =
|
|
|
+ "您已开通专属训练<font color='#FF0000'>10</font>天,共累计完成了专属训练<font color='#FF0000'>5</font>次"
|
|
|
tvSummarize.setText(Html.fromHtml(summarize))
|
|
|
val trainingTime = "累计训练时长(含自由训练)<font color='#FF0000'>300</font>分钟"
|
|
|
tvTrainingTime.setText(Html.fromHtml(trainingTime))
|
|
|
@@ -39,15 +51,24 @@ class DataMonitorFragment : BaseMVVMFragment<FragmentDataMonitorBinding, DataMon
|
|
|
|
|
|
override fun initData() {
|
|
|
binding.tvDate.text = User.getNowDay()
|
|
|
-
|
|
|
+ //年
|
|
|
+ val year = calendar[Calendar.YEAR]
|
|
|
+ //月
|
|
|
+ val month = calendar[Calendar.MONTH] + 1
|
|
|
+ val time = if (month < 10) {
|
|
|
+ year.toString() + "0" + month
|
|
|
+ } else {
|
|
|
+ year.toString() + month
|
|
|
+ }
|
|
|
+ loadData(time)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 加载数据监控
|
|
|
*/
|
|
|
@Subscribe(code = RxBusCodes.GetDataMonitor, threadMode = ThreadMode.MAIN)
|
|
|
- fun loadData() {
|
|
|
- viewModel.getMonthRecord(User.getNowMonth(), fail = {
|
|
|
+ fun loadData(time: String) {
|
|
|
+ viewModel.getMonthRecord(time, fail = {
|
|
|
setNowDate()
|
|
|
}, success = {
|
|
|
monthRecordList.clear()
|
|
|
@@ -62,7 +83,103 @@ class DataMonitorFragment : BaseMVVMFragment<FragmentDataMonitorBinding, DataMon
|
|
|
* 设置日历数据
|
|
|
*/
|
|
|
private fun setNowDate() {
|
|
|
+ dataList.clear()
|
|
|
+ // 得到本月一号的星期索引
|
|
|
+ // 索引从 1 开始,第一个为星期日,减1是为了与星期对齐,如星期一对应索引1,星期二对应索引二
|
|
|
+ calendar[Calendar.DAY_OF_MONTH] = 1
|
|
|
+ var weekIndex = calendar[Calendar.DAY_OF_WEEK] - 1
|
|
|
+ // 将日期设为上个月
|
|
|
+ calendar[Calendar.MONTH] = calendar[Calendar.MONTH] - 1
|
|
|
+ val preMonthDays: Int = StringUtil.getMonth(
|
|
|
+ calendar[Calendar.MONTH] + 1,
|
|
|
+ calendar[Calendar.YEAR]
|
|
|
+ )
|
|
|
+ // 拿到上一个月的最后几天的天数
|
|
|
+ for (i in 0 until weekIndex) {
|
|
|
+ val bean = DayBean()
|
|
|
+ val month = calendar[Calendar.MONTH] + 1
|
|
|
+ bean.year = calendar[Calendar.YEAR].toString()
|
|
|
+ bean.month = if (month < 10) {
|
|
|
+ "0$month"
|
|
|
+ } else {
|
|
|
+ month.toString()
|
|
|
+ }
|
|
|
+ val day = preMonthDays - weekIndex + i + 1
|
|
|
+ bean.day = if (day < 10) {
|
|
|
+ "0$day"
|
|
|
+ } else {
|
|
|
+ day.toString()
|
|
|
+ }
|
|
|
+ bean.status = ""
|
|
|
+ bean.isCurrentDay = false
|
|
|
+ bean.isCurrentMonth = false
|
|
|
+ dataList.add(bean)
|
|
|
+ }
|
|
|
+ // 将日期设为当月
|
|
|
+ calendar[Calendar.MONTH] = calendar[Calendar.MONTH] + 1
|
|
|
+ val currentDays = StringUtil.getMonth(calendar[Calendar.MONTH] + 1, calendar[Calendar.YEAR])
|
|
|
+ // 拿到当月的天数
|
|
|
+ for (i in 0 until currentDays) {
|
|
|
+ val bean = DayBean()
|
|
|
+ val month = calendar[Calendar.MONTH] + 1
|
|
|
+ bean.year = calendar[Calendar.YEAR].toString()
|
|
|
+ bean.month = if (month < 10) {
|
|
|
+ "0$month"
|
|
|
+ } else {
|
|
|
+ month.toString()
|
|
|
+ }
|
|
|
+ val day = i + 1
|
|
|
+ bean.day = if (day < 10) {
|
|
|
+ "0$day"
|
|
|
+ } else {
|
|
|
+ day.toString()
|
|
|
+ }
|
|
|
+ // 当前日期
|
|
|
+ val nowDate: String = StringUtil.getFormatTime("yyyy-M-d", Calendar.getInstance().time)
|
|
|
+ // 选择的日期
|
|
|
+ val selectDate: String = StringUtil.getFormatTime("yyyy-M-", calendar.time) + (i + 1)
|
|
|
+ // 假如相等的话,那么就是今天的日期了
|
|
|
+ bean.isCurrentDay = nowDate.contentEquals(selectDate)
|
|
|
+ bean.isCurrentMonth = true
|
|
|
+ bean.status = ""
|
|
|
+ if (monthRecordList.isNullOrEmpty().not()) {
|
|
|
+ monthRecordList.forEach {
|
|
|
+ if (TextUtils.equals(it.time, bean.time)) {
|
|
|
+ bean.status = it.status
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataList.add(bean)
|
|
|
+ }
|
|
|
|
|
|
+ // 拿到下个月第一周的天数
|
|
|
+ // 先拿到下个月第一天的星期索引
|
|
|
+ // 之前设为了1号,所以将日历对象的月数加 1 就行了
|
|
|
+ calendar[Calendar.MONTH] = calendar[Calendar.MONTH] + 1
|
|
|
+ weekIndex = calendar[Calendar.DAY_OF_WEEK] - 1
|
|
|
+ for (i in 0 until 7 - weekIndex) {
|
|
|
+ val bean = DayBean()
|
|
|
+ val month = calendar[Calendar.MONTH] + 1
|
|
|
+ bean.year = calendar[Calendar.YEAR].toString()
|
|
|
+ bean.month = if (month < 10) {
|
|
|
+ "0$month"
|
|
|
+ } else {
|
|
|
+ month.toString()
|
|
|
+ }
|
|
|
+ val day = i + 1
|
|
|
+ bean.day = if (day < 10) {
|
|
|
+ "0$day"
|
|
|
+ } else {
|
|
|
+ day.toString()
|
|
|
+ }
|
|
|
+ bean.status = ""
|
|
|
+ bean.isCurrentDay = false
|
|
|
+ bean.isCurrentMonth = false
|
|
|
+ dataList.add(bean)
|
|
|
+ }
|
|
|
+ dateAdapter.setData(dataList)
|
|
|
+ // 最后将日期设为当月
|
|
|
+ calendar[Calendar.MONTH] = calendar[Calendar.MONTH] - 1
|
|
|
}
|
|
|
|
|
|
}
|