From 35d33f34885072f12e4b5826f56311e3e1305ec1 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 27 Aug 2024 13:15:55 +0800 Subject: [PATCH] =?UTF-8?q?[6.6.0]=20[=E6=9C=AA=E4=B8=8A=E4=BC=A0=E4=BB=BB?= =?UTF-8?q?=E3=80=81=E9=A1=B5=E9=9D=A2]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/weaknet/bean/WaitUploadTask.kt | 24 ++++- .../och/weaknet/database/dao/EventDataDao.kt | 2 +- .../com/mogo/och/weaknet/model/EventModel.kt | 16 +-- .../weaknet/ui/adapter/SwitchLineAdapter.kt | 11 ++- .../ui/taskrunning/BottomDecoration.java | 39 ++++++++ .../ui/taskrunning/RunningTaskAdapter.kt | 92 ++++++++++++++++++ .../ui/taskrunning/RunningTaskManagerView.kt | 46 ++++++--- .../ui/taskrunning/RunningTastViewModel.kt | 4 +- .../shuttle_wait_upload_head_title.png | Bin 0 -> 1424 bytes .../res/layout/shuttle_wadk_task_running.xml | 20 +++- .../layout/shuttle_wadk_task_running_item.xml | 61 ++++++++++++ .../src/main/res/values/colors.xml | 2 + .../src/main/res/values/strings.xml | 1 + 13 files changed, 289 insertions(+), 29 deletions(-) create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_wait_upload_head_title.png create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_wadk_task_running_item.xml 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 0000000000000000000000000000000000000000..7a3502009ad286f4dc26729d6a9864b0f7414b19 GIT binary patch literal 1424 zcmV;B1#kL^P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR919-spN1ONa40RR919smFU0Lno(1poj9`bk7VR7eetmQ83~RS?JT$NNaq zmzT7apv2}inhJu5;-cWfg$kmJ`h_bIx^rW6g0?^Y-&dNZY>KyI*o%pW7PvwXD7qjz_7C2!k zK%#8C)@fhksaoZ}hmJ(;FbJ()N%ZY3AJW%}tLz;;LM{U+8*^U@JSh|k<17!4AAdPc z;zqQY22sZnN}BEp$z@hVniqq#cvoyDq;qG|)Ey{`+`(a{Fnhan#sV%z?E{z6joa6va{M5vI6MCgr6Zl+ zYEJE+4nsN;N?IG&OwgciwX0L3CI*A!WckW$X>Y>;1CWh6OC%jB^39+a6$`dr_emYaF?|&A9l1lovY(sVw*`>-X{%>>c=QI9VIx`oM!SVd`doyWseUY4hZ_a6mf0jHk*s{)8jMBn@fi$U;w!Wd}r-;b9rO=*Dt1gP>OJcc#@kR zZrV^KO^@8`mPvAui=26Gz1Qx*&E{@2MKF49VCDMk=_`Yc=Lf5`eUF5xCAX5eq4#7L zn+EIiXHQ@J@{O-7*Sc}j_?9u>vU^0hX&fI6Fl)eF0ZZpk% zNZXZ90olH_a&_^SPo^$@_tta{3NRhtH1>guOG~#fW9~8Lf0VlMfbpPle_ZabHx5o5 z92j}-iQf9Yk*HF~Z-4cyt!=FRy|A+IY-^bFUf;T)?heeI@>=dENxx zZ@QRbdX4?(&z9~|a(OsE&XEooub4HU#rc|^`rk2?K%9floi%nP2ABt*eM|_FpFeW| z<~)7IuCo<}OJH{Q{Q|~k#o-eO`D+p|33bfVP$@LP!Fr z|KQuwb*vc1Nt^)vPL+>6#pQB~{6}L((v?0j04Y>9{E&)M=YZ+Kz$QRsLE2mxaz%E| z5giF2QmhyfG9@u!=(3yYbYwx=To^n>K3}R3*%Yp>1c+T7N-EaL?FqIxy@em=>t09! egl$JKKlne%(-Hy4y70*W0000 + + + + + + + + + + + + + \ 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人 暂无待上传任务 + 一键上传