[Sweeper cloud 3.2.0] refactor: 自动驾驶状态监听方法修改;代码格式修改;

This commit is contained in:
aibingbing
2023-07-18 15:26:34 +08:00
parent e30a575112
commit dc2bf86ac2
3 changed files with 67 additions and 65 deletions

View File

@@ -19,6 +19,7 @@ import com.mogo.och.sweepercloud.database.MyDataBase
import com.mogo.och.sweepercloud.presenter.SweeperPresenter
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog
@@ -35,8 +36,9 @@ import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel
import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import kotlinx.android.synthetic.main.fragment_och_sweeper.*
import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
import kotlinx.android.synthetic.main.fragment_och_sweeper.sweeper_cl_work_mode
import kotlinx.android.synthetic.main.fragment_och_sweeper.sweeper_current_task_view
import kotlinx.android.synthetic.main.sweeper_no_data_common_view.noTaskDataView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -114,7 +116,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
getCurrentView().getAutoBtn().setOnClickListener {
//前置条件 (1)必须处于人工驾驶状态 2必须有正在执行的子任务且子任务类型为自动驾驶子任务 才能请求云端进入自驾
mCurrentSubTaskInfo?.let {
if (mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE && it.taskModel == TaskModel.AUTO) {
if (mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE
&& it.taskModel == TaskModel.AUTO) {
mLoadingDialog.showLoading()
mPresenter?.sendSweeperAutopilotBootable(mTaskInfo?.taskId, it.subTaskId, it.lineId.toLong())
}
@@ -189,7 +192,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
//主动拉取云端正在执行的任务,有则直接在任务列表展示
if (messageType == SweeperCloudTask.MessageType.PadSendGetTaskReq) {
getCurrentView().setData(taskInfo, getCurrentPosition())
getCurrentView().setData(taskInfo, getCurrentRunningSubTaskPosition())
setShowCurrentTaskPanelView(true)
addTaskData()
mPresenter?.isHasTaskInfo(true)
@@ -273,7 +276,6 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
}
}
}
/**
@@ -281,7 +283,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
*/
private fun sweeperCloudTaskStopDialog(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType, taskInfo: SweeperTask.TaskInfo) {
mLoadingDialog.hideLoading()
val timeout: String = getTimeSpent(taskInfo.taskEndTime)
val timeoutHintString: String = SweeperCloudTaskUtils.getTimeSpentString(taskInfo.taskEndTime)
//数据重复导致连续弹窗
if (mDialog != null && mDialog!!.isShowing) {
return
@@ -313,7 +315,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun onNext() {
}
}, stopTaskType, timeout)
}, stopTaskType, timeoutHintString)
}
mDialog?.show()
}
@@ -340,7 +342,6 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun onNext() {
}
})
}
@@ -441,7 +442,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
*
* 获取当前正在执行的子任务在列表中的位置
*/
private fun getCurrentPosition(): Int {
private fun getCurrentRunningSubTaskPosition(): Int {
mSubMutableList = mTaskInfo?.subListList
mSubMutableList?.apply {
for (index in 0 until size) {
@@ -458,7 +459,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 根据子任务id获取子任务信息
*/
private fun bySubTaskIdFindSubTaskInfo(subTaskId: String): SubTaskInfo? {
private fun getSubTaskInfoBySubId(subTaskId: String): SubTaskInfo? {
mSubMutableList = mTaskInfo?.subListList
mSubMutableList?.apply {
for (index in 0 until size) {
@@ -494,14 +495,13 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun getCurrentView(): SweeperCurrentTaskInfoView = sweeper_current_task_view
fun handleSubTaskInfoDialog(taskId: String, subTaskId: String, isPop: Boolean) {
if (mTaskInfo == null) return
if (mTaskInfo?.taskId != taskId) return
val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
val subInfo = getSubTaskInfoBySubId(subTaskId)
subInfo?.let {
if (isPop) {
showSubTaskInfoDialog(taskId, subTaskId, it)
showSubTaskConfirmDialog(taskId, subTaskId, it)
} else {
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
//mPresenter?.setPreLineId(-1)
@@ -513,7 +513,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 云控下发子任务确认弹窗
*/
private fun showSubTaskInfoDialog(taskId: String, subTaskId: String, subTaskInfo: SubTaskInfo) {
private fun showSubTaskConfirmDialog(taskId: String, subTaskId: String, subTaskInfo: SubTaskInfo) {
mLoadingDialog.hideLoading()
if (mTaskInfo == null) return
if (mTaskInfo?.taskId != taskId) return
@@ -591,33 +591,9 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun onNext() {
}
}, it)
mDialog?.show()
showNotice("请确认是否接取任务")
}
}
/**
* 计算任务超时时间
*/
private fun getTimeSpent(taskEndTime: Long): String {
val timeLag: Long = System.currentTimeMillis() - taskEndTime
//天
val day: Long = timeLag / (24 * 60 * 60 * 1000)
//小时
val hour = (timeLag / (60 * 60 * 1000) - day * 24)
//分钟
val minute = ((timeLag / (60 * 1000)) - day * 24 * 60 - hour * 60)
if (day >= 1) {
return "${day}${hour}${minute}分钟"
}
if (hour >= 1) {
return "${hour}${minute}分钟"
}
return "${minute}分钟"
}
}

View File

@@ -182,7 +182,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
});
}
public void setControllerStatusCallback(ISweeperControllerStatusCallback callback) {
this.mControllerStatusCallback = callback;
}
@@ -216,7 +215,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
}
}
};
public void setSubtask(String subTaskId, SweeperTask.TaskModel subTaskType, int currentLineId) {
@@ -256,8 +254,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
return this.mAutopilotState;
}
public static List<SweeperRoutePlanningUpdateReqBean.Result> coordinateConverterWgsToGcjList(Context mContext,
List<MessagePad.Location> mogoLatLngList) {
public static List<SweeperRoutePlanningUpdateReqBean.Result> coordinateConverterWgsToGcjList(
Context mContext,
List<MessagePad.Location> mogoLatLngList) {
List<SweeperRoutePlanningUpdateReqBean.Result> points = new ArrayList<>();
for (MessagePad.Location m : mogoLatLngList) {
LatLng mogoLatLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(mContext, m);
@@ -304,7 +303,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
if (mSubTaskType == SweeperTask.TaskModel.MANUAL) {//收集人工驾驶子任务坐标点
addCoordinates(gnssInfo);
return;
}
}
};
@@ -334,7 +332,6 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime,
SweeperTask.TaskInfo taskInfo) {
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"messageType: " + messageType.getNumber() + " sysTime" + sysTime + " reqNo" + reqNo + " onSweeperFutianCloudTask" + (taskInfo == null ? "null" : printMessage(taskInfo)) + " mSweeperTaskCallback" + mSweeperTaskCallback);
if (mSweeperTaskCallback != null) {
@@ -493,7 +490,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
}
}
public static String format(double value) {
private static String format(double value) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.toString();
@@ -507,6 +504,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setSn(getDriverSn());
String reqNo = SweeperCloudTaskUtils.getRequestId();
SweeperTask.GetTaskReq getTaskReq = builder.build();
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber());
getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq);
@@ -522,6 +520,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setCode(code);
SweeperTask.StartTaskResp startTaskResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber());
getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp);
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTask.getNumber());
@@ -538,6 +537,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setCode(code);
SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber());
getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp);
@@ -556,6 +556,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setCode(code);
SweeperTaskStop.StopTaskResp stopTaskResp = builder.build();
String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber());
getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp);
@@ -576,10 +577,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
builder.setLineId(lineId);
SweeperBootable.IsBootable isBootable = builder.build();
String reqNo = SweeperCloudTaskUtils.getRequestId();
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendBootable.getNumber());
getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable);
// TODO: 2023/5/16
//SweeperCloudTaskUtils.mockSendCloudBootable();
}
@@ -593,23 +594,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) {
//CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState());
this.mAutopilotState = autoPilotStatusInfo.getState();
if (mControllerStatusCallback != null) {
mControllerStatusCallback.onAutopilotState(autoPilotStatusInfo.getState());
}
switch (autoPilotStatusInfo.getState()) {
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中
break;
case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶
break;
default:
break;
}
}
@Override
@@ -660,11 +645,27 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onAutopilotStatusResponse(int state) {
// TODO: 2023/6/19 bingbing
//CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + state);
this.mAutopilotState = state;
if (mControllerStatusCallback != null) {
mControllerStatusCallback.onAutopilotState(state);
}
switch (state) {
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶
break;
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中
break;
case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶
break;
default:
break;
}
}
@Override
public void onAutopilotDockerInfo(@NonNull String dockerVersion) {
// TODO: 2023/6/19 bingbing
}
}

View File

@@ -362,8 +362,33 @@ object SweeperCloudTaskUtils {
fun printMessage(message: MessageOrBuilder): String {
return "\n"+TextFormat.printer().escapingNonAscii(false).printToString(message)
}
@JvmStatic
fun getRequestId():String{
return UUID.randomUUID().toString()
}
/**
* 计算任务超时时间
*/
@JvmStatic
fun getTimeSpentString(taskEndTime: Long): String {
val timeLag: Long = System.currentTimeMillis() - taskEndTime
//天
val day: Long = timeLag / (24 * 60 * 60 * 1000)
//小时
val hour = (timeLag / (60 * 60 * 1000) - day * 24)
//分钟
val minute = ((timeLag / (60 * 1000)) - day * 24 * 60 - hour * 60)
if (day >= 1) {
return "${day}${hour}${minute}分钟"
}
if (hour >= 1) {
return "${hour}${minute}分钟"
}
return "${minute}分钟"
}
}