diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/WaitUploadTask.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/WaitUploadTask.kt index 23907d60aa..c31501e604 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/WaitUploadTask.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/WaitUploadTask.kt @@ -7,12 +7,30 @@ data class WaitUploadLine(var lineName:String ,var lineId:Long,var task:MutableL other as WaitUploadLine - return lineId == other.lineId + if (lineId != other.lineId) return false + if (task != other.task) return false + + return true } override fun hashCode(): Int { - return lineId.hashCode() + var result = lineId.hashCode() + result = 31 * result + task.hashCode() + return result } } -data class WaitUploadTask(val taskStartTime:Long,val taskId:Long) +data class WaitUploadTask(val taskStartTime:Long,val taskId:Long){ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as WaitUploadTask + + return taskId == other.taskId + } + + override fun hashCode(): Int { + return taskId.hashCode() + } +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/database/dao/EventDataDao.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/database/dao/EventDataDao.kt index 24a017610f..4ce1852cdf 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/database/dao/EventDataDao.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/database/dao/EventDataDao.kt @@ -27,7 +27,7 @@ interface EventDataDao { @Query("SELECT * FROM ${EventDataBean.evnetDataTable} WHERE update_status = ${EventDataBean.notUpdate} LIMIT 10 OFFSET 0") fun queryEventByStatusWithPage():List? - @Query("SELECT * FROM ${EventDataBean.evnetDataTable} WHERE update_status = ${EventDataBean.updated} and event_save_time > :zeroTime GROUP by task_start_time") + @Query("SELECT * FROM ${EventDataBean.evnetDataTable} WHERE update_status = ${EventDataBean.notUpdate} and event_save_time > :zeroTime GROUP by task_start_time") fun queryWaitUploadInfo(zeroTime: Long = DateTimeUtil.getCurrentDateZero()): Observable?> } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt index 0e6a57041a..0f065d4c2c 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt @@ -16,11 +16,12 @@ import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import java.util.concurrent.atomic.AtomicBoolean +import kotlin.properties.Delegates object EventModel : EventRepository.EventCallback { - private val isUpdating = AtomicBoolean(false) + private val isUpdating by lazy { AtomicBoolean(false) } fun load(){ EventRepository.eventCallback = this @@ -97,14 +98,13 @@ object EventModel : EventRepository.EventCallback { if(wait.lineId!=null&&wait.lineName!=null&&wait.taskId!=null&&wait.taskStartTime!=null) { val tempTask = WaitUploadTask(wait.taskStartTime!!,wait.taskId!!) val tempLine = WaitUploadLine(wait.lineName!!, wait.lineId!!, mutableListOf(tempTask)) - if(result.contains(tempLine)){ - result.forEach{ - if(it.lineId == tempLine.lineId){ - it.task.add(tempTask) - } - } - }else{ + val haveSave = result.filter { + it.lineId==tempLine.lineId + } + if(haveSave.isNullOrEmpty()){ result.add(tempLine) + }else{ + haveSave.first().task.add(tempTask) } } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt index 3bd7e197a4..977a67ce19 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt @@ -42,10 +42,15 @@ class SwitchLineAdapter( override fun onBindViewHolder(holder: SwitchLineViewHolder, position: Int) { val currentPosition = holder.bindingAdapterPosition val line = mData[currentPosition] - if(line.name!=null&&line.name.length>10){ - line.name = line.name.substring(0,10)+"…" + + line.name?.let { + val lineName =if(it.length>10){ + it.substring(0,10)+"…" + }else{ + it + } + holder.lineName.text = lineName } - holder.lineName.text = line.name val sb = StringBuilder() if (line.endSiteName!=null&&line.endSiteName.length>10) { sb.append(line.endSiteName.substring(0,5)) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java new file mode 100644 index 0000000000..2416014c64 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java @@ -0,0 +1,39 @@ +package com.mogo.och.weaknet.ui.taskrunning; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +public class BottomDecoration extends RecyclerView.ItemDecoration { + /** + * 第一个视图和最后一个视图偏移的距离 + */ + public static int distance = 0; + + /** + * 设置RecyclerView子视图的边距,本示例仅用于定义两个子视图之间的边距,为space*2 + */ + public BottomDecoration(int distance) { + this.distance = distance; + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + int pos = parent.getChildAdapterPosition(view); + RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)view.getLayoutParams(); + + /** + * 通过设置Item左右边距实现第一个左侧和最后一个右侧设置边距,确保显示的视图位于屏幕中间 + */ + int itemCount = parent.getAdapter().getItemCount(); + if(pos == itemCount-1){ + layoutParams.setMargins(0,0,0,distance); + }else { + layoutParams.setMargins(0,0,0,0); + } + view.setLayoutParams(layoutParams); + super.getItemOffsets(outRect, view, parent, state); + } +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt new file mode 100644 index 0000000000..aede9e5aaa --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt @@ -0,0 +1,92 @@ +package com.mogo.och.weaknet.ui.taskrunning + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.DiffUtil.Callback +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.function.business.travelreality.EventDrawBean +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse +import com.mogo.och.weaknet.ui.adapter.SwitchLineTaskAdapter.SwitchLineTaskViewHolder +import com.mogo.och.shuttle.weaknet.R +import com.mogo.och.weaknet.bean.WaitUploadLine + +/** + * 路线列表adapter + */ +class RunningTaskAdapter( + private val mContext: Context, + private val dataList: MutableList, +) : RecyclerView.Adapter() { + + fun setDataList(dataList: List) { + if (this.dataList == dataList) { + // 如果新旧列表一致,则直接返回 + return + } + + val diffResult = DiffUtil.calculateDiff(MyDiffCallback(this.dataList, dataList)) + this.dataList.clear() + this.dataList.addAll(dataList) + diffResult.dispatchUpdatesTo(this) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RunningTaskViewHolder { + val view = LayoutInflater.from(mContext).inflate( + R.layout.shuttle_wadk_task_running_item, parent, false + ) + return RunningTaskViewHolder(view) + } + + override fun onBindViewHolder(holder: RunningTaskViewHolder, position: Int) { + val currentPosition = holder.bindingAdapterPosition + val lineTasks = dataList!![currentPosition] + val sb = StringBuilder().append("班次:") + lineTasks.task.forEach { + sb.append(TimeUtils.millis2String(it.taskStartTime, "HH:mm")).append(" ") + } + holder.actvLineTaskName.text = lineTasks.lineName + holder.actvWaitUploadItem.text = sb + } + + override fun getItemCount(): Int { + return dataList.size + } + + class RunningTaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val actvLineTaskName: TextView // 时间 + val actvWaitUploadItem: TextView // 时间 + init { + actvLineTaskName = itemView.findViewById(R.id.actv_line_task_name) + actvWaitUploadItem = itemView.findViewById(R.id.actv_wait_upload_item) + } + } + + inner class MyDiffCallback(private val oldData:List, private val newData:List): + Callback(){ + override fun getOldListSize(): Int { + return oldData.size + } + + override fun getNewListSize(): Int { + return newData.size + } + + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = oldData[oldItemPosition] + val newItem = newData[newItemPosition] + return oldItem == newItem + } + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = oldData[oldItemPosition] + val newItem = newData[newItemPosition] + return oldItem == newItem + } + + } +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt index 142d77869f..acc2fe4ae4 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt @@ -8,11 +8,17 @@ import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner +import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.wigets.WindowRelativeLayout import com.mogo.och.shuttle.weaknet.R +import com.mogo.och.weaknet.bean.WaitUploadLine +import com.mogo.och.weaknet.ui.adapter.OpenItemAnimator import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.actvCurrentDate import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.clLayout import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.ivTaskRunningClose +import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.rvDataLiet +import me.jessyan.autosize.utils.AutoSizeUtils /** @@ -20,11 +26,17 @@ import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.ivTaskRunni * @description BadCase录包管理页面 * @since: 2022/12/15 */ -class RunningTaskManagerView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), RunningTastViewModel.RunningTaskViewCallback { +class RunningTaskManagerView: WindowRelativeLayout, RunningTastViewModel.RunningTaskViewCallback { + + + constructor(context: Context?) : super(context) + + constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + companion object { const val TAG = "BadCaseManagerView" @@ -33,6 +45,9 @@ class RunningTaskManagerView @JvmOverloads constructor( private var clickListener:ClickListener?=null private var viewModel:RunningTastViewModel?=null + private lateinit var mAdapter: RunningTaskAdapter + private lateinit var linearLayoutManager:LinearLayoutManager + init { LayoutInflater.from(context).inflate(R.layout.shuttle_wadk_task_running, this, true) initView() @@ -47,6 +62,17 @@ class RunningTaskManagerView @JvmOverloads constructor( clickListener?.onClose() } + + linearLayoutManager = LinearLayoutManager(context) + rvDataLiet.setLayoutManager(linearLayoutManager) + rvDataLiet.setItemAnimator(OpenItemAnimator()) + mAdapter = RunningTaskAdapter(context, mutableListOf()) + rvDataLiet.addItemDecoration( + BottomDecoration( + AutoSizeUtils.dp2px(context, 200f) + ) + ) + rvDataLiet.setAdapter(mAdapter) } fun setOnClickListener(clickListener: ClickListener) { @@ -60,9 +86,7 @@ class RunningTaskManagerView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() - viewModel = findViewTreeViewModelStoreOwner()?.let { - ViewModelProvider(it).get(RunningTastViewModel::class.java) - } + viewModel = ViewModelProvider(this).get(RunningTastViewModel::class.java) viewModel?.setDistanceCallback(this) } @@ -79,8 +103,8 @@ class RunningTaskManagerView @JvmOverloads constructor( super.onDetachedFromWindow() } + override fun showData(data: MutableList) { + mAdapter.setDataList(data) + } } -interface ClickListener { - fun onClose() -} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt index 38bae2b391..fbbb45adae 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt @@ -43,14 +43,14 @@ class RunningTastViewModel : ViewModel() { } override fun onNext(data: MutableList) { - + this@RunningTastViewModel.viewCallback?.showData(data) } }) } interface RunningTaskViewCallback{ - + fun showData(data: MutableList) } } diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_wait_upload_head_title.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_wait_upload_head_title.png new file mode 100644 index 0000000000..7a3502009a Binary files /dev/null and b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_wait_upload_head_title.png differ diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_wadk_task_running.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_wadk_task_running.xml index 158aa44733..7d503a1648 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_wadk_task_running.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_wadk_task_running.xml @@ -65,13 +65,31 @@ android:layout_height="61dp"/> + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml b/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml index 96af25ad68..6ee14e3379 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml @@ -14,6 +14,8 @@ #3FC281 #80203076 + #8E9DD4 + #D4D4D4 #FFFFFF #99FFFFFF diff --git a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml index 21d1d201e2..4d614afe8f 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml @@ -46,6 +46,7 @@ 本站核销成功:0人 暂无待上传任务 + 一键上传