[6.6.0]
[未上传任、页面]
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ interface EventDataDao {
|
||||
@Query("SELECT * FROM ${EventDataBean.evnetDataTable} WHERE update_status = ${EventDataBean.notUpdate} LIMIT 10 OFFSET 0")
|
||||
fun queryEventByStatusWithPage():List<EventDataBean>?
|
||||
|
||||
@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<List<EventDataBean>?>
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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<WaitUploadLine>,
|
||||
) : RecyclerView.Adapter<RunningTaskAdapter.RunningTaskViewHolder>() {
|
||||
|
||||
fun setDataList(dataList: List<WaitUploadLine>) {
|
||||
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<WaitUploadLine>, private val newData:List<WaitUploadLine>):
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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<WaitUploadLine>) {
|
||||
mAdapter.setDataList(data)
|
||||
}
|
||||
|
||||
}
|
||||
interface ClickListener {
|
||||
fun onClose()
|
||||
}
|
||||
|
||||
@@ -43,14 +43,14 @@ class RunningTastViewModel : ViewModel() {
|
||||
}
|
||||
|
||||
override fun onNext(data: MutableList<WaitUploadLine>) {
|
||||
|
||||
this@RunningTastViewModel.viewCallback?.showData(data)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
interface RunningTaskViewCallback{
|
||||
|
||||
fun showData(data: MutableList<WaitUploadLine>)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -65,13 +65,31 @@
|
||||
android:layout_height="61dp"/>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvManagerTitle"
|
||||
android:id="@+id/rvDataLiet"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actvCurrentDate"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_41"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/switch_line_btn_commit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginStart="@dimen/dp_85"
|
||||
android:layout_marginEnd="@dimen/dp_85"
|
||||
android:layout_height="@dimen/dp_126"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_marginBottom="@dimen/dp_73"
|
||||
android:textSize="@dimen/dp_42"
|
||||
android:textColor="@android:color/white"
|
||||
android:text="@string/bus_running_task_upload"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/bus_switch_line_btn_commit"/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvManagerTitle"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/clLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_180"
|
||||
android:background="#F0151D41">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="@dimen/dp_30"
|
||||
android:layout_height="@dimen/dp_30"
|
||||
android:layout_marginStart="@dimen/dp_75"
|
||||
android:layout_marginTop="@dimen/dp_3"
|
||||
android:src="@drawable/shuttle_wait_upload_head_title"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/actv_line_task_name"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/actv_line_task_name" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_line_task_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_115"
|
||||
android:layout_marginTop="@dimen/dp_27"
|
||||
android:layout_marginEnd="@dimen/dp_80"
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/shuttle_color_8E9DD4"
|
||||
android:textSize="@dimen/dp_38"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="任务名称AAAA任务名称AAAA任务名称AAAA任务名称AAAA任务名称AAAA任务名称AAAA任务名称AAAA任务名称AAAA" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_wait_upload_item"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/dp_80"
|
||||
android:textColor="@color/shuttle_color_D4D4D4"
|
||||
android:textSize="@dimen/dp_30"
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@+id/actv_line_task_name"
|
||||
app:layout_constraintTop_toBottomOf="@+id/actv_line_task_name"
|
||||
tools:text="班次:9:10 15:30 17:00 9:10 15:30 17:009:10 15:30 17:009:10 15:30 17:009:10 15:30 17:009:10 15:30 17:009:10 15:30 17:009:10 15:30 17:00" />
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="2dp"
|
||||
android:layout_marginStart="@dimen/dp_80"
|
||||
android:layout_marginEnd="@dimen/dp_80"
|
||||
android:background="@color/bus_station_tag_txt_un_color"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -14,6 +14,8 @@
|
||||
<color name="bus_arrived_dash_color">#3FC281</color>
|
||||
|
||||
<color name="shuttle_color_80203076">#80203076</color>
|
||||
<color name="shuttle_color_8E9DD4">#8E9DD4</color>
|
||||
<color name="shuttle_color_D4D4D4">#D4D4D4</color>
|
||||
|
||||
<color name="bus_autopilot_text_color_normal">#FFFFFF</color>
|
||||
<color name="bus_autopilot_text_color_disable">#99FFFFFF</color>
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
<string name="shuttle_write_off_count_default">本站核销成功:0人</string>
|
||||
|
||||
<string name="bus_no_running_task">暂无待上传任务</string>
|
||||
<string name="bus_running_task_upload">一键上传</string>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user