Merge branch 'dev_sweeper-d_230423_3.1.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_sweeper-d_230423_3.1.0
This commit is contained in:
@@ -23,14 +23,29 @@ interface ISweeperCloudTaskCallback {
|
||||
*/
|
||||
fun onSweeperCloudTaskConfirm(taskId:String,subTaskId:String)
|
||||
|
||||
/**
|
||||
* 云端下发子任务状态同步
|
||||
*/
|
||||
fun onSweeperCloudTaskStatus(taskId:String,subTaskId:String,subTaskStatus: SweeperCommon.TaskStatus)
|
||||
|
||||
/**
|
||||
* 云端下发结束大任务指令
|
||||
*/
|
||||
fun onSweeperCloudTaskStop(taskId:String,stopTaskType: StopTaskType)
|
||||
|
||||
/**
|
||||
* 挂起/恢复
|
||||
*/
|
||||
fun onSweeperCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType,taskId:String,subTaskId:String,code:Code)
|
||||
|
||||
/**
|
||||
* pad请求云端进入自驾
|
||||
*/
|
||||
fun onSweeperCloudBootable(taskId:String,subTaskId:String,code:Code)
|
||||
|
||||
/**
|
||||
* 云端同步大任务状态
|
||||
*/
|
||||
fun onSweeperCloudBigTaskStatus(taskId:String,subTaskStatus: SweeperBigTaskStatus.BigTaskStatus)
|
||||
/**
|
||||
* 设置轨迹坐标点集合
|
||||
|
||||
@@ -14,7 +14,7 @@ import com.mogo.och.sweepercloud.presenter.SweeperPresenter
|
||||
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.sendCloudTaskInfo
|
||||
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.mockSendCloudTaskInfo
|
||||
import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView
|
||||
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
|
||||
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
@@ -39,7 +39,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null
|
||||
private var mLocation: MogoLocation? = null
|
||||
private var mTaskInfo: SweeperTask.TaskInfo? = null
|
||||
private var mSubTaskType: Int = 0 //0:自动驾驶子任务 1:人工驾驶子任务
|
||||
private var mSubTaskType: Int = -1 //0:自动驾驶子任务 1:人工驾驶子任务 -1:未知任务类型
|
||||
private var mCurrentSubTaskInfo: SubTaskInfo? = null//当前正在执行的子任务
|
||||
private val mLoadingDialog: SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog(requireContext()) }
|
||||
|
||||
override fun getTagName(): String {
|
||||
@@ -173,12 +174,44 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据云端同步的子任务状态,更新列表中任务状态
|
||||
*/
|
||||
fun onSweeperUpdateSubTaskStatus(taskId: String, subTaskId: String, subTaskStatus: SweeperCommon.TaskStatus) {
|
||||
mLoadingDialog.hideLoading()
|
||||
mTaskInfo?.let {
|
||||
//如果云端要更新的任务和本地缓存任务不是同一个,在无法更新子任务状态
|
||||
if (taskId != it.taskId) {
|
||||
return
|
||||
}
|
||||
mSubMutableList?.let { subTaskList ->
|
||||
for (index in 0 until subTaskList.size) {
|
||||
if (subTaskList[index].subTaskId == subTaskId) {
|
||||
val subBuilder = subTaskList[index].toBuilder()
|
||||
subBuilder.taskStatus = subTaskStatus
|
||||
if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) {
|
||||
mCurrentSubTaskInfo = subBuilder.build()
|
||||
//更新当前正在执行的任务状态
|
||||
updateCurrentSubTaskInfo()
|
||||
}
|
||||
val builder = it.toBuilder()
|
||||
builder.setSubList(index,subBuilder.build())
|
||||
mTaskInfo=builder.build()
|
||||
mSubMutableList=mTaskInfo?.subListList
|
||||
getCurrentView().setData(mTaskInfo, index)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//模拟结束子任务
|
||||
override fun debugEndSubTask() {
|
||||
//super.debugEndSubTask()
|
||||
// TODO: 模拟云控获取任务
|
||||
//mPresenter?.getCurrentTask()
|
||||
sendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask)
|
||||
mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -189,8 +222,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
mSubMutableList?.apply {
|
||||
for (index in 0 until size) {
|
||||
if (get(index).taskStatus == SweeperCommon.TaskStatus.RUNNING) {
|
||||
mSubTaskType = get(index).taskModel.number
|
||||
mPresenter?.setSubtask(get(index).subTaskId, get(index).taskModel.number, get(index).lineId)
|
||||
mCurrentSubTaskInfo = get(index)
|
||||
updateCurrentSubTaskInfo()
|
||||
return index
|
||||
}
|
||||
}
|
||||
@@ -206,8 +239,6 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
mSubMutableList?.apply {
|
||||
for (index in 0 until size) {
|
||||
if (get(index).subTaskId == subTaskId) {
|
||||
mSubTaskType = get(index).taskModel.number
|
||||
mPresenter?.setSubtask(get(index).subTaskId, get(index).taskModel.number, get(index).lineId)
|
||||
return get(index)
|
||||
}
|
||||
}
|
||||
@@ -215,6 +246,16 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新当前子任务信息
|
||||
*/
|
||||
private fun updateCurrentSubTaskInfo() {
|
||||
mCurrentSubTaskInfo?.let {
|
||||
mSubTaskType = it.taskModel.number
|
||||
mPresenter?.setSubtask(it.subTaskId, it.taskModel.number, it.lineId)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置路线轨迹
|
||||
*/
|
||||
|
||||
@@ -78,7 +78,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
private ISweeperControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等
|
||||
private ISweeperCloudTaskCallback mSweeperTaskCallback;
|
||||
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> points = new ArrayList<>();//全路径信息
|
||||
private int mSubTaskType = 0; //1自动驾驶 2.人工驾驶
|
||||
private int mSubTaskType = -1; //1自动驾驶 2.人工驾驶 -1:未知任务类型
|
||||
private int mCurrentLineId = 0; //当前路线id
|
||||
private int mLineId = 0;//上一次存储的路线id
|
||||
//自动驾驶状态
|
||||
@@ -457,7 +457,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo);
|
||||
getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
|
||||
// TODO: 2023/5/5 模拟云控获取任务
|
||||
SweeperCloudTaskUtils.sendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq);
|
||||
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -474,7 +474,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo);
|
||||
// TODO: 2023/5/5 模拟 当云控收到pad接取任务成功的指令时, 云控下发子任务开始确认指令
|
||||
if (code == SweeperTask.StartTaskCode.MANUAL_CONFIRM) {
|
||||
SweeperCloudTaskUtils.sendCloudSubTaskConfirm();
|
||||
SweeperCloudTaskUtils.mockSendCloudSubTaskConfirm();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -491,6 +491,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
|
||||
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo);
|
||||
getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
|
||||
// TODO: 2023/5/8 模拟当云控收到pad子任务确认指令后。云控下发子任务状态更新指令
|
||||
if (code == SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM) {
|
||||
SweeperCloudTaskUtils.mockSendCloudUpdateSubTaskStatus();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -178,6 +178,7 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
|
||||
@Override
|
||||
public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, @NonNull SweeperCommon.TaskStatus subTaskStatus) {
|
||||
ThreadUtils.runOnUiThread(()->mView.onSweeperUpdateSubTaskStatus(taskId,subTaskId,subTaskStatus));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -35,7 +35,7 @@ class SweeperCloudLoadingDialog : BaseFloatDialog, LifecycleObserver {
|
||||
private fun startRotation() {
|
||||
objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0f, 360f)
|
||||
objectAnimator?.let {
|
||||
it.duration = 1500
|
||||
it.duration = 1000
|
||||
it.repeatCount = -1
|
||||
it.interpolator = LinearInterpolator()
|
||||
it.start()
|
||||
|
||||
@@ -13,20 +13,21 @@ import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType
|
||||
import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.*
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm
|
||||
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
|
||||
|
||||
object SweeperCloudTaskUtils {
|
||||
/**
|
||||
* 模拟云控发送任务给pad
|
||||
*/
|
||||
@JvmStatic
|
||||
fun sendCloudTaskInfo(messageType: MessageType) {
|
||||
fun mockSendCloudTaskInfo(messageType: MessageType) {
|
||||
val builder = TaskInfo.newBuilder()
|
||||
builder.sn = getDriverSn()
|
||||
builder.taskId = "10"
|
||||
builder.taskName = "烟台清扫车作业任务"
|
||||
builder.currentTime = System.currentTimeMillis()
|
||||
builder.taskStartTime = 1682664162000
|
||||
builder.taskEndTime = 1682750562000
|
||||
builder.taskStartTime = 1683507615000
|
||||
builder.taskEndTime = 1683540015000
|
||||
//第一个子任务
|
||||
val subBuilder0 = SubTaskInfo.newBuilder()
|
||||
subBuilder0.subTaskId = "1"
|
||||
@@ -104,7 +105,7 @@ object SweeperCloudTaskUtils {
|
||||
* 模拟云控发送子任务开始确认信息
|
||||
*/
|
||||
@JvmStatic
|
||||
fun sendCloudSubTaskConfirm() {
|
||||
fun mockSendCloudSubTaskConfirm() {
|
||||
val builder = TaskConfirm.newBuilder()
|
||||
builder.sn = getDriverSn()
|
||||
builder.taskId = "10"
|
||||
@@ -116,7 +117,23 @@ object SweeperCloudTaskUtils {
|
||||
)
|
||||
}, 10000)
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟下发更新子任务状态指令
|
||||
*/
|
||||
@JvmStatic
|
||||
fun mockSendCloudUpdateSubTaskStatus() {
|
||||
val builder = SweeperTaskStatus.TaskStatusPush.newBuilder()
|
||||
builder.sn = getDriverSn()
|
||||
builder.taskId = "10"
|
||||
builder.subTaskId = "3"
|
||||
builder.taskStatus = SweeperCommon.TaskStatus.RUNNING
|
||||
ThreadUtils.runOnUiThreadDelayed({
|
||||
SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus(
|
||||
MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}",
|
||||
System.currentTimeMillis(), builder.build()
|
||||
)
|
||||
}, 10000)
|
||||
}
|
||||
fun getDriverSn(): String? {
|
||||
return MoGoAiCloudClientConfig.getInstance().sn
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ class SubTaskView : ConstraintLayout {
|
||||
/**
|
||||
* 设置子任务信息
|
||||
*/
|
||||
fun setData(taskInfo: SubTaskInfo, isLastTask: Boolean = false) {
|
||||
fun setData(taskInfo: SubTaskInfo,isLastTask: Boolean = false) {
|
||||
tvSubTaskName.text = taskInfo.subTaskName
|
||||
tvSubTaskName.setTextColor(if (taskInfo.taskStatus==SweeperCommon.TaskStatus.RUNNING) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF"))
|
||||
if (taskInfo.taskModel.number == 1) {//人工驾驶子任务
|
||||
|
||||
@@ -39,24 +39,24 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
|
||||
*/
|
||||
fun setData(
|
||||
subTaskBean: TaskInfo?,
|
||||
currentPosition:Int=-1
|
||||
currentPosition: Int = -1
|
||||
) {
|
||||
subTaskBean?.apply {
|
||||
this@SweeperCurrentTaskInfoView.listTask = subListList
|
||||
tvTaskName.text = taskName
|
||||
val calendar = DateTimeUtil.formatLongToCalendar(taskStartTime)
|
||||
tvTaskTime.text = DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm)
|
||||
val calendarStart = DateTimeUtil.formatLongToCalendar(taskStartTime)
|
||||
val calendarEnd = DateTimeUtil.formatLongToCalendar(taskEndTime)
|
||||
tvTaskTime.text = "${DateTimeUtil.formatCalendarToString(calendarStart, DateTimeUtil.HH_mm)}-${DateTimeUtil.formatCalendarToString(calendarEnd, DateTimeUtil.HH_mm)}"
|
||||
}
|
||||
listTask?.let {
|
||||
//特殊处理当前暂无执行中任务的情况
|
||||
var position=currentPosition
|
||||
if (position==-1){
|
||||
position += 1
|
||||
if (currentPosition == -1) {
|
||||
setSubTaskState(false)
|
||||
}else{
|
||||
setSubTaskState(it[position].taskStatus==TaskStatus.RUNNING)
|
||||
setCurrentData(currentPosition + 1)
|
||||
} else {
|
||||
setSubTaskState(it[currentPosition].taskStatus == TaskStatus.RUNNING)
|
||||
setCurrentData(currentPosition)
|
||||
}
|
||||
setCurrentData(position)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
|
||||
/**
|
||||
* 填充数据
|
||||
*/
|
||||
private fun setCurrentData(currentPosition:Int) {
|
||||
private fun setCurrentData(currentPosition: Int) {
|
||||
listTask?.let {
|
||||
if (it.size == 1) {
|
||||
preSubTask.setData(it[currentPosition], isLastTask = true)
|
||||
|
||||
@@ -79,7 +79,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback {
|
||||
d(SceneConstant.M_SWEEPER + TAG, "SystemState operateState:"+operateState.code)
|
||||
}
|
||||
//清扫车暂未选择清扫模式或者任务类型是人工驾驶子任务,则暂无清扫模式
|
||||
if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==1) {
|
||||
if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==1||taskType==-1) {
|
||||
setShowOrHideCleanSystemState(OperateStateEnum.NO_STATUS, cleanSystemState)
|
||||
} else {
|
||||
setShowOrHideCleanSystemState(OperateStateEnum.SUCCESS_STATUS, cleanSystemState)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
android:id="@+id/preSubTask"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_50"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/viewTaskInfoLine" />
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<ImageView
|
||||
android:id="@+id/ivRightDownArrow"
|
||||
android:layout_width="@dimen/dp_16"
|
||||
android:layout_height="@dimen/dp_60"
|
||||
android:layout_height="@dimen/dp_95"
|
||||
android:src="@drawable/icon_right_down_arrow"
|
||||
app:layout_constraintTop_toBottomOf="@+id/ivSubTask"
|
||||
android:layout_marginTop="@dimen/dp_16"
|
||||
|
||||
Reference in New Issue
Block a user