[清扫车]接口添加字段及其逻辑修改
This commit is contained in:
@@ -5,5 +5,7 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
data class SubStartRequest(
|
||||
var carSn:String=MoGoAiCloudClientConfig.getInstance().sn,
|
||||
var taskId:Int,
|
||||
var startTime:Long
|
||||
var startTime:Long,
|
||||
var isFirst:Boolean,
|
||||
var isEnd:Boolean
|
||||
)
|
||||
@@ -5,7 +5,7 @@ package com.mogo.och.sweeper.bean
|
||||
*/
|
||||
data class SweeperSubTaskBean(var taskId:Int=0,
|
||||
var taskName:String?,
|
||||
var taskStartTime:Long?,
|
||||
var taskStartTime:Long=0,
|
||||
var sort:Int=1,
|
||||
var subList:MutableList<SubInfo>?)
|
||||
data class SubInfo(
|
||||
@@ -15,5 +15,9 @@ data class SubInfo(
|
||||
var taskStatus: Int,// 状态1未执行 2执行中 3结束 4跳过
|
||||
var taskType: Int,//1自动驾驶 2人工驾驶
|
||||
var timeSpent: String,
|
||||
var startWgs84Lon:Double,//起点经度
|
||||
var startWgs84Lat:Double,//起点纬度
|
||||
var endWgs84Lon:Double,//终点经度
|
||||
var endWgs84Lat:Double,//终点纬度
|
||||
var sort: Int = 0,
|
||||
)
|
||||
@@ -19,7 +19,7 @@ interface ISweeperTaskCallback {
|
||||
/**
|
||||
* 获取子任务列表
|
||||
*/
|
||||
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean?,isWorkingSubTask:Boolean)
|
||||
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean,isWorkingSubTask:Boolean)
|
||||
|
||||
/**
|
||||
* 更新子任务状态
|
||||
|
||||
@@ -8,10 +8,10 @@ import com.mogo.commons.debug.DebugConfig
|
||||
class SweeperConst {
|
||||
companion object {
|
||||
|
||||
private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com"
|
||||
//private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com"
|
||||
private const val BASE_URL_OCH_QA = "http://sweep-dev.svc.zhidaoauto.com"
|
||||
private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com"
|
||||
private const val BASE_URL_OCH_DEV = "https://och-driver-dev.zhidaozhixing.com"
|
||||
//private const val BASE_URL_OCH_QA = "https://och-driver-qa.zhidaozhixing.com"
|
||||
private const val BASE_URL_OCH_QA = "https://och-driver-dev.zhidaozhixing.com"
|
||||
private const val BASE_URL_OCH_RELEASE = "https://och-driver.zhidaozhixing.com"
|
||||
|
||||
@JvmStatic
|
||||
fun getBaseUrl(): String {
|
||||
@@ -31,23 +31,27 @@ class SweeperConst {
|
||||
|
||||
// 上报心跳轮询ms
|
||||
const val LOOP_PERIOD_60S = 60 * 1000L
|
||||
|
||||
// 开始服务启动自动驾驶等待时间(埋点上传)
|
||||
const val LOOP_PERIOD_15S = 15 * 1000L
|
||||
const val LOOP_PERIOD_1S = 1 * 1000L
|
||||
const val LOOP_DELAY = 100L
|
||||
|
||||
// 下发给MEC轨迹信息间隔时间 10秒
|
||||
const val LOOP_PERIOD_10S = 10 * 1000L
|
||||
const val LOOP_PERIOD_10S = 10 * 1000L
|
||||
|
||||
// 尝试下发给MEC轨迹最多10次
|
||||
const val LOOP_SEND_TRAJ_TIMES = 10
|
||||
|
||||
//起点UUID
|
||||
const val SWEEPER_START_MAP_MAKER = "sweeper_start_map_maker";
|
||||
|
||||
//终点UUID
|
||||
const val SWEEPER_END_MAP_MAKER = "sweeper_end_map_maker";
|
||||
|
||||
// 埋点key:接管后点击'自动驾驶'按钮启动
|
||||
const val EVENT_KEY_RESTART_AUTOPILOT = "event_key_och_sweeper_restart_autopilot"
|
||||
|
||||
// 埋点key:开始服务开启自动驾驶(成功/失败)
|
||||
const val EVENT_KEY_START_SERVICE = "event_key_och_sweeper_start_service"
|
||||
const val EVENT_PARAM_SN = "sn"
|
||||
@@ -60,6 +64,7 @@ class SweeperConst {
|
||||
const val EVENT_PARAM_START_FAILURE_MSG = "start_autopilot_failure_msg" // 启动自驾失败原因
|
||||
const val EVENT_PARAM_PLATE_NUM = "plate_number" // 车牌号
|
||||
const val EVENT_PARAM_ENV_ONLINE = "env_online" // 是否线上环境:true/false
|
||||
|
||||
// 埋点key:开启自动驾驶前已识别的异常,会导致无法开启自驾
|
||||
const val EVENT_KEY_AP_UNABLE_START_REASON = "event_key_och_bus_ap_unable_start_reason"
|
||||
const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason";
|
||||
|
||||
@@ -2,11 +2,12 @@ package com.mogo.och.sweeper.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import chassis.ChassisStatesOuterClass
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.SubInfo
|
||||
import com.mogo.och.sweeper.bean.SweeperMainTaskBean
|
||||
@@ -25,20 +26,19 @@ import kotlinx.android.synthetic.main.sweeper_no_data_common_view.*
|
||||
/**
|
||||
* 清扫车主界面
|
||||
*/
|
||||
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>(), MenuPopWindow.OnMenuItemOnClickListener{
|
||||
class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresenter?>(), MenuPopWindow.OnMenuItemOnClickListener {
|
||||
private var mAdapter: TaskListAdapter? = null
|
||||
private var mCurrentSubPosition: Int = 0 //子任务下标
|
||||
private var mMainMutableList: MutableList<SweeperMainTaskBean>? = null
|
||||
private var mSubMutableList: MutableList<SubInfo>? = null
|
||||
private var mSubTaskBean: SweeperSubTaskBean? = null
|
||||
private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务
|
||||
private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null
|
||||
private var mIsLastSubTask: Boolean = false //是否最后一个子任务
|
||||
private var mSubTaskId: Int = -1//子任务id
|
||||
private var mSubTaskName: String? = null
|
||||
private var mMainTask: SweeperMainTaskBean? = null
|
||||
private var mLocation:MogoLocation?=null
|
||||
private var mSubTaskDetailBean:SweeperSubTaskDetailBean?=null
|
||||
private var mLocation: MogoLocation? = null
|
||||
private var mSubTaskDetailBean: SweeperSubTaskDetailBean? = null
|
||||
|
||||
//当前经纬度
|
||||
override fun getTagName(): String {
|
||||
return "SweepersFragment"
|
||||
@@ -46,29 +46,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
|
||||
override fun initViews() {
|
||||
super.initViews()
|
||||
mMainMutableList = mutableListOf()
|
||||
mMainMutableList?.add(SweeperMainTaskBean(1, "环球贸易中心", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(2, "惠新西街南口地铁站公交站", 10, 1675935380000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(3, "环球贸易中心", 10, 1675762580000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(4, "环球贸易中心", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(5, "惠新西街南口地铁站公交站", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(6, "惠新西街南口地铁站公交站", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(7, "惠新西街南口地铁站公交站", 10, 1675762580000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(8, "环球贸易中心", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(9, "惠新西街南口地铁站公交站", 10, 1675848980000L))
|
||||
mMainMutableList?.add(SweeperMainTaskBean(10, "惠新西街南口地铁站公交站", 10, 1675935380000L))
|
||||
mSubMutableList = mutableListOf()
|
||||
mSubMutableList?.add(SubInfo(1, "环球贸易中心", 1200, 1, 1, "1小时40分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(2, "环球贸易中心", 2000, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(3, "环球贸易中心", 500, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(4, "环球贸易中心", 10, 1, 1, "10小时34分钟", 0))
|
||||
mSubMutableList?.add(SubInfo(5, "惠新西街南口地铁站公交站", 800, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(6, "惠新西街南口地铁站公交站", 90000, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(7, "惠新西街南口地铁站公交站", 12356, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(8, "环球贸易中心", 400, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(9, "惠新西街南口地铁站公交站", 200, 1, 1, "10小时34分钟", 1))
|
||||
mSubMutableList?.add(SubInfo(10, "惠新西街南口地铁站公交站", 300, 1, 1, "10小时34分钟", 1))
|
||||
mAdapter = context?.let { TaskListAdapter(it, mMainMutableList) }
|
||||
mAdapter = context?.let { TaskListAdapter() }
|
||||
val linearLayoutManager = LinearLayoutManager(context)
|
||||
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
|
||||
rvTaskList?.layoutManager = linearLayoutManager
|
||||
@@ -96,25 +74,27 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
fun setShowTaskListPanelView(isShow: Boolean) {
|
||||
private fun setShowTaskListPanelView(isShow: Boolean) {
|
||||
if (isShow) {
|
||||
sweeper_current_task_list_view.visibility = View.VISIBLE
|
||||
} else {
|
||||
sweeper_current_task_list_view.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前任务面板隐藏或显示
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
fun setShowCurrentTaskPanelView(isShow: Boolean) {
|
||||
private fun setShowCurrentTaskPanelView(isShow: Boolean) {
|
||||
if (isShow) {
|
||||
sweeper_current_task_view.visibility = View.VISIBLE
|
||||
} else {
|
||||
sweeper_current_task_view.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* VR模式切换
|
||||
*
|
||||
@@ -122,8 +102,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
*/
|
||||
fun onVRModeChanged(isVRMode: Boolean) {
|
||||
if (mRootView != null) {
|
||||
mRootView.visibility = if (isVRMode) View.VISIBLE else View.GONE
|
||||
}
|
||||
mRootView.visibility = if (isVRMode) View.VISIBLE else View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
fun hideOchSweeper() {}
|
||||
@@ -144,23 +124,20 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
private fun initListener() {
|
||||
tvTaskConfirm.setOnClickListener {
|
||||
mMainTask?.let { task ->
|
||||
mCurrentSubPosition=0
|
||||
mCurrentSubPosition = 0
|
||||
mSubTaskBean = SweeperSubTaskBean(task.mainTaskId, task.mainTaskName, task.mainTaskStartTime, 1, mSubMutableList)
|
||||
//获取当前子任务列表
|
||||
//presenter?.getSubTaskList(task.mainTaskId, mSubTaskBean)
|
||||
}
|
||||
|
||||
//mock 数据
|
||||
setSubTaskData()
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {//如果是人工驾驶子任务,则弹窗
|
||||
manualDriving(null)
|
||||
} else {
|
||||
setShowTaskListPanelView(false)
|
||||
setShowCurrentTaskPanelView(true)
|
||||
sweeper_cl_work_mode.visibility = View.VISIBLE
|
||||
sweeper_current_task_view.setData(sweeper_cl_work_mode, mSubTaskBean, mCurrentSubPosition, this, presenter)
|
||||
presenter?.getSubTaskList(task.mainTaskId, mSubTaskBean)
|
||||
}
|
||||
}
|
||||
//列表任务刷新
|
||||
ivTaskListRefresh.setOnClickListener {
|
||||
mPresenter?.getMainTaskList()
|
||||
}
|
||||
//无任务时刷新
|
||||
ivNoTaskRefresh.setOnClickListener {
|
||||
mPresenter?.getMainTaskList()
|
||||
}
|
||||
}
|
||||
|
||||
private val onTaskItemClickListener = object : TaskListAdapter.TaskItemClickListener {
|
||||
@@ -175,24 +152,20 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
override fun onMenuItemClick(itemType: TaskStatusEnum) {
|
||||
when (itemType.code) {
|
||||
TaskStatusEnum.JUMP_OVER_SUBTASK.code -> {//跳过任务
|
||||
presenter?.subTaskSkip(mSubTaskId, mIsLastSubTask)
|
||||
//mock
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code){//人工驾驶子任务
|
||||
showAmapNaviToStationFragment(false)
|
||||
}
|
||||
mCurrentSubPosition++
|
||||
sweeper_current_task_view.setData(sweeper_cl_work_mode, mSubTaskBean, mCurrentSubPosition, this@SweeperFragment, presenter)
|
||||
presenter?.subTaskSkip(isFirstSubTask(), isLastSubTask(), mSubTaskId)
|
||||
}
|
||||
TaskStatusEnum.END_TASK.code -> {
|
||||
subTaskEnd()
|
||||
TaskStatusEnum.END_TASK.code -> {//结束主任务
|
||||
endMainTask()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) {
|
||||
this.mCleanSystemState = cleanSystemState
|
||||
sweeper_cl_work_mode.setSweeperFutianCleanSystemState(mSubTaskType, cleanSystemState)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前主任务列表数据
|
||||
*/
|
||||
@@ -213,20 +186,31 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
/**
|
||||
* 设置当前子任务列表数据
|
||||
*/
|
||||
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean?,isWorkingSubTask:Boolean) {
|
||||
fun setSubTaskBean(subTaskBean: SweeperSubTaskBean, isWorkingSubTask: Boolean) {
|
||||
this.mSubTaskBean = subTaskBean
|
||||
this.mSubTaskBean?.let {
|
||||
setShowCurrentTaskPanelView(true)
|
||||
setShowTaskListPanelView(false)
|
||||
sweeper_cl_work_mode.visibility = View.VISIBLE
|
||||
mCurrentSubPosition = if (isWorkingSubTask){//如果是正在执行的子任务
|
||||
mCurrentSubPosition = if (isWorkingSubTask) {//如果是正在执行的子任务
|
||||
it.sort - 1
|
||||
}else{
|
||||
} else {
|
||||
0
|
||||
}
|
||||
sweeper_current_task_view.setData(sweeper_cl_work_mode, it, mCurrentSubPosition, this, presenter)
|
||||
mSubMutableList=it.subList
|
||||
setSubTaskData()
|
||||
presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType)//加载子任务详情包括轨迹信息
|
||||
mMainTask = SweeperMainTaskBean(it.taskId, it.taskName, 0, it.taskStartTime)
|
||||
mSubMutableList?.let {subList->
|
||||
if (subList.size<=0){
|
||||
return
|
||||
}
|
||||
addStartAndEndMarker(
|
||||
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), subList[0].startWgs84Lon, subList[0].startWgs84Lat),
|
||||
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), subList[subList.size-1].endWgs84Lon, subList[subList.size-1].endWgs84Lat)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,33 +226,35 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
}
|
||||
when (typeEnum.code) {
|
||||
TaskStatusEnum.END_SUBTASK.code -> {//子任务结束
|
||||
mCurrentSubPosition++
|
||||
setSubTaskData()
|
||||
presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType)
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务
|
||||
presenter?.startTask(mSubTaskId, mSubTaskType)
|
||||
//是否是最后一个子任务结束
|
||||
if (isLastSubTask()){
|
||||
mPresenter?.getMainTaskList()
|
||||
clearAllMarkerAndPolyline()
|
||||
}else{
|
||||
mCurrentSubPosition++
|
||||
setSubTaskData()
|
||||
presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType)
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务
|
||||
presenter?.startTask(isFirstSubTask(), isLastSubTask(), mSubTaskId, mSubTaskType)
|
||||
}
|
||||
}
|
||||
}
|
||||
TaskStatusEnum.JUMP_OVER_SUBTASK.code -> { //子任务跳过
|
||||
presenter?.subTaskEnd(mSubTaskId, mIsLastSubTask)
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code){//人工驾驶子任务
|
||||
presenter?.subTaskEnd(isFirstSubTask(), isLastSubTask(), mSubTaskId)
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {//人工驾驶子任务
|
||||
showAmapNaviToStationFragment(false)
|
||||
}
|
||||
}
|
||||
TaskStatusEnum.START_SUBTASK.code -> { //子任务开始
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务
|
||||
readyTaskBtn(true, true)
|
||||
}else{
|
||||
} else {
|
||||
readyTaskBtn(false, false)
|
||||
}
|
||||
setShowTaskListPanelView(false)
|
||||
sweeper_cl_work_mode.visibility = View.VISIBLE
|
||||
setShowCurrentTaskPanelView(true)
|
||||
sweeper_current_task_view.setCurrentData(mCurrentSubPosition)
|
||||
// sweeper_cl_work_mode.setSweeperFutianCleanSystemState(
|
||||
// mSubTaskType,
|
||||
// if (mCleanSystemState == null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState
|
||||
// )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,7 +265,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
*/
|
||||
fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean, subTaskTypeEnum: SubTaskTypeEnum) {
|
||||
if (subTaskTypeEnum.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {//人工驾驶子任务
|
||||
this.mSubTaskDetailBean=subTaskDetailBean
|
||||
this.mSubTaskDetailBean = subTaskDetailBean
|
||||
manualDriving(subTaskDetailBean)
|
||||
}
|
||||
}
|
||||
@@ -289,9 +275,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
*/
|
||||
fun setMainTaskReset(isSuccess: Boolean) {
|
||||
if (isSuccess) {
|
||||
setShowCurrentTaskPanelView(false)
|
||||
setShowTaskListPanelView(true)
|
||||
sweeper_cl_work_mode.visibility = View.GONE
|
||||
//任务重置后,重新拉取任务列表数据
|
||||
mPresenter?.getMainTaskList()
|
||||
//清除任务全览图的marker和路线
|
||||
clearAllMarkerAndPolyline()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,20 +288,18 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
private fun setSubTaskData() {
|
||||
mSubMutableList?.let {
|
||||
mSubTaskId = it[mCurrentSubPosition].taskId
|
||||
mSubTaskName=it[mCurrentSubPosition].taskName
|
||||
mSubTaskName = it[mCurrentSubPosition].taskName
|
||||
mSubTaskType = if (it[mCurrentSubPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code)
|
||||
SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
//设置当前子任务id
|
||||
presenter?.setSubTaskId(mSubTaskId)
|
||||
//设置是否是最后一个子任务
|
||||
presenter?.setIsLastSubtask(mCurrentSubPosition==it.size-1)
|
||||
SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
//设置当前子任务信息
|
||||
presenter?.setSubtask(isFirstSubTask(), isLastSubTask(), mSubTaskId)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳过子任务
|
||||
* 结束主任务
|
||||
*/
|
||||
private fun subTaskEnd() {
|
||||
private fun endMainTask() {
|
||||
//结束任务
|
||||
val builder = SweeperNoTitleCommonDialog.Builder()
|
||||
val endConfirmDialog = builder
|
||||
@@ -327,10 +312,6 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
mMainTask?.let {
|
||||
presenter?.mainTaskReset(it.mainTaskId)
|
||||
}
|
||||
//mock
|
||||
setShowTaskListPanelView(true)
|
||||
setShowCurrentTaskPanelView(false)
|
||||
sweeper_cl_work_mode.visibility = View.GONE
|
||||
}
|
||||
|
||||
override fun cancel() {
|
||||
@@ -343,37 +324,51 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
/**
|
||||
* 人工驾驶子任务
|
||||
*/
|
||||
private fun manualDriving(subTaskDetailBean: SweeperSubTaskDetailBean?) {
|
||||
private fun manualDriving(subTaskDetailBean: SweeperSubTaskDetailBean) {
|
||||
val builder = SweeperManualDrivingDialog.Builder()
|
||||
val endConfirmDialog = builder
|
||||
.tips("前方子任务惠新西街南口地铁站公交站手动驾驶至惠新西街南口地铁站公交站")
|
||||
.tips("前方子任务${mSubTaskName}手动驾驶至${subTaskDetailBean?.endSiteName}")
|
||||
.confirmStr("确认")
|
||||
.build(requireContext())
|
||||
endConfirmDialog?.setClickListener(object : SweeperManualDrivingDialog.ClickListener {
|
||||
override fun confirm() {
|
||||
presenter?.startTask(mSubTaskId, mSubTaskType)
|
||||
presenter?.startTask(isFirstSubTask(), isLastSubTask(), mSubTaskId, mSubTaskType)
|
||||
showAmapNaviToStationFragment(true)
|
||||
presenter?.startNaviToStation(true, 40.199247410363796, 116.73367125257714, 40.20070929640184, 116.73582650844378)
|
||||
//mock
|
||||
setShowTaskListPanelView(false)
|
||||
sweeper_cl_work_mode.visibility = View.VISIBLE
|
||||
setShowCurrentTaskPanelView(true)
|
||||
sweeper_current_task_view.setData(sweeper_cl_work_mode, mSubTaskBean, mCurrentSubPosition, this@SweeperFragment, presenter)
|
||||
// sweeper_cl_work_mode.setSweeperFutianCleanSystemState(
|
||||
// mSubTaskType,
|
||||
// if (mCleanSystemState == null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState
|
||||
// )
|
||||
presenter?.startNaviToStation(
|
||||
true,
|
||||
subTaskDetailBean.startSiteLat,
|
||||
subTaskDetailBean.startSiteLon,
|
||||
subTaskDetailBean.endSiteLat,
|
||||
subTaskDetailBean.endSiteLon
|
||||
)
|
||||
|
||||
}
|
||||
})
|
||||
endConfirmDialog?.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否第一个子任务
|
||||
*/
|
||||
fun isFirstSubTask(): Boolean {
|
||||
return mCurrentSubPosition == 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否第一个子任务
|
||||
*/
|
||||
fun isLastSubTask(): Boolean {
|
||||
return mCurrentSubPosition == (mSubMutableList?.size ?: 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前位置经纬度
|
||||
*/
|
||||
fun setCurrentLocation(location: MogoLocation){
|
||||
this.mLocation=location
|
||||
fun setCurrentLocation(location: MogoLocation) {
|
||||
this.mLocation = location
|
||||
}
|
||||
override fun refreshNavi(){
|
||||
|
||||
override fun refreshNavi() {
|
||||
mSubTaskDetailBean?.apply {
|
||||
mLocation?.let {
|
||||
presenter?.startNaviToStation(true, it.longitude, it.latitude, endSiteLon, endSiteLat)
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.mogo.och.sweeper.model;
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -87,8 +88,10 @@ public class SweeperTaskModel {
|
||||
private boolean isArriveSubTaskEndSite = false;
|
||||
//当前子任务id
|
||||
private int mSubTaskId = 0;
|
||||
// //当前是否最后一个子任务
|
||||
//当前是否最后一个子任务
|
||||
private boolean mIsLastSubtask = false;
|
||||
//当前任务是否是第一个
|
||||
private boolean mIsFirstSubtask = false;
|
||||
//0: 代表没有启动过 1代表是启动第一次,当>=1 代表是重试 每次子任务结束/主任务结束清空置为0
|
||||
private volatile int firstStartAutopilot = 0;
|
||||
|
||||
@@ -181,13 +184,10 @@ public class SweeperTaskModel {
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public void setSubTaskId(int mSubTaskId) {
|
||||
this.mSubTaskId = mSubTaskId;
|
||||
}
|
||||
|
||||
public void setIsLastSubtask(boolean mIsLastSubtask) {
|
||||
this.mIsLastSubtask = mIsLastSubtask;
|
||||
public void setSubtask(boolean isFirstSubtask,boolean isLastSubtask,int subTaskId) {
|
||||
this.mIsLastSubtask = isLastSubtask;
|
||||
this.mIsFirstSubtask=isFirstSubtask;
|
||||
this.mSubTaskId=subTaskId;
|
||||
}
|
||||
|
||||
public static List<SweeperRoutePlanningUpdateReqBean.Result> coordinateConverterWgsToGcjList(Context mContext,
|
||||
@@ -356,7 +356,7 @@ public class SweeperTaskModel {
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-当前==subTaskId="
|
||||
+ currentSubTaskDetail.getId());
|
||||
//到达子任务终点 结束子任务
|
||||
subTaskEnd(mSubTaskId, mIsLastSubtask);
|
||||
subTaskEnd(mIsFirstSubtask,mIsLastSubtask,mSubTaskId);
|
||||
}
|
||||
|
||||
public void triggerStartServiceEvent(boolean isRestart, boolean send) {
|
||||
@@ -578,8 +578,8 @@ public class SweeperTaskModel {
|
||||
/**
|
||||
* 子任务开始上报
|
||||
*/
|
||||
public void subTaskStart(int subTaskId, SubTaskTypeEnum subTaskType) {
|
||||
SweeperServiceManager.subTaskStart(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
|
||||
public void subTaskStart(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType) {
|
||||
SweeperServiceManager.subTaskStart(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
|
||||
@Override
|
||||
public void onSuccess(BaseResponse<Boolean> data) {
|
||||
if (mSweeperTaskCallback != null && data != null) {
|
||||
@@ -627,16 +627,16 @@ public class SweeperTaskModel {
|
||||
/**
|
||||
* 子任务结束上报
|
||||
*/
|
||||
public void subTaskEnd(int subTaskId, boolean isLastSubTask) {
|
||||
SweeperServiceManager.subTaskEnd(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
|
||||
public void subTaskEnd(boolean isFirst,boolean isEnd,int subTaskId) {
|
||||
SweeperServiceManager.subTaskEnd(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
|
||||
@Override
|
||||
public void onSuccess(BaseResponse<Boolean> data) {
|
||||
if (mSweeperTaskCallback != null && data != null) {
|
||||
if (data.getData()) {
|
||||
isSubTaskWorking = false;
|
||||
isArriveSubTaskEndSite = true;
|
||||
mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.END_SUBTASK, isLastSubTask);
|
||||
if (isLastSubTask) {
|
||||
mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.END_SUBTASK, isEnd);
|
||||
if (isEnd) {
|
||||
if (FunctionBuildConfig.isDemoMode) {//美化模式开启时
|
||||
SweeperTaskModel.getInstance().closeBeautificationMode();
|
||||
}
|
||||
@@ -674,15 +674,15 @@ public class SweeperTaskModel {
|
||||
/**
|
||||
* 子任务跳过上报
|
||||
*/
|
||||
public void subTaskSkip(int subTaskId, boolean isLastSubTask) {
|
||||
SweeperServiceManager.subTaskSkip(subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
|
||||
public void subTaskSkip(boolean isFirst,boolean isEnd,int subTaskId) {
|
||||
SweeperServiceManager.subTaskSkip(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback<BaseResponse<Boolean>>() {
|
||||
@Override
|
||||
public void onSuccess(BaseResponse<Boolean> data) {
|
||||
if (mSweeperTaskCallback != null && data != null) {
|
||||
if (data.getData()) {
|
||||
mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.JUMP_OVER_SUBTASK, isLastSubTask);
|
||||
if (isLastSubTask) {//如果是最后一个子任务,则跳过完成后,调用结束子任务接口,这样后端可以才可以把整个大任务结束掉
|
||||
subTaskEnd(subTaskId, true);
|
||||
mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.JUMP_OVER_SUBTASK, isEnd);
|
||||
if (isEnd) {//如果是最后一个子任务,则跳过完成后,调用结束子任务接口,这样后端可以才可以把整个大任务结束掉
|
||||
subTaskEnd(isFirst,isEnd,subTaskId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import java.util.List;
|
||||
import io.reactivex.Observable;
|
||||
import retrofit2.http.Body;
|
||||
import retrofit2.http.GET;
|
||||
import retrofit2.http.HTTP;
|
||||
import retrofit2.http.Header;
|
||||
import retrofit2.http.Headers;
|
||||
import retrofit2.http.POST;
|
||||
@@ -38,7 +39,6 @@ public interface ISweeperApiService {
|
||||
*/
|
||||
@GET("/och-sweep/api/task/v1/mainTaskList")
|
||||
Observable<BaseResponse<List<SweeperMainTaskBean>>> getMainTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String carSn);
|
||||
|
||||
/**
|
||||
* 清扫车子任务列表
|
||||
* @param appId
|
||||
@@ -99,6 +99,6 @@ public interface ISweeperApiService {
|
||||
* @return
|
||||
*/
|
||||
@GET("/och-sweep/api/task/v1/mainTaskReset")
|
||||
Observable<BaseResponse<Boolean>> mainTaskReset(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("taskId") int taskId);
|
||||
Observable<BaseResponse<Boolean>> mainTaskReset(@Header ("appId") String appId, @Header("ticket") String ticket,@Query("carSn") String carSn, @Query("taskId") int taskId);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ object SweeperServiceManager {
|
||||
.transformTry()
|
||||
.subscribe(OchCommonSubscribeImpl(context, callback, "getMainTaskList"))
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子任务列表
|
||||
*/
|
||||
@@ -76,8 +75,8 @@ object SweeperServiceManager {
|
||||
* 子任务开始上报
|
||||
*/
|
||||
@JvmStatic
|
||||
fun subTaskStart(subTaskId: Int,context: Context, callback: OchCommonServiceCallback<BaseResponse<Boolean>>?) {
|
||||
val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis())
|
||||
fun subTaskStart(isFirst:Boolean,isEnd:Boolean,subTaskId: Int,context: Context, callback: OchCommonServiceCallback<BaseResponse<Boolean>>?) {
|
||||
val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis(),isFirst,isEnd)
|
||||
mService.subTaskStart(
|
||||
MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
MoGoAiCloudClientConfig.getInstance().token,
|
||||
@@ -91,8 +90,8 @@ object SweeperServiceManager {
|
||||
* 子任务结束上报
|
||||
*/
|
||||
@JvmStatic
|
||||
fun subTaskEnd(subTaskId: Int,context: Context, callback: OchCommonServiceCallback<BaseResponse<Boolean>>?) {
|
||||
val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis())
|
||||
fun subTaskEnd(isFirst:Boolean,isEnd:Boolean,subTaskId: Int,context: Context, callback: OchCommonServiceCallback<BaseResponse<Boolean>>?) {
|
||||
val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis(),isFirst,isEnd)
|
||||
mService.subTaskEnd(
|
||||
MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
MoGoAiCloudClientConfig.getInstance().token,
|
||||
@@ -106,8 +105,8 @@ object SweeperServiceManager {
|
||||
* 子任务跳过上报
|
||||
*/
|
||||
@JvmStatic
|
||||
fun subTaskSkip(subTaskId: Int,context: Context, callback: OchCommonServiceCallback<BaseResponse<Boolean>>?) {
|
||||
val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis())
|
||||
fun subTaskSkip(isFirst:Boolean,isEnd:Boolean,subTaskId: Int,context: Context, callback: OchCommonServiceCallback<BaseResponse<Boolean>>?) {
|
||||
val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis(),isFirst,isEnd)
|
||||
mService.subTaskSkip(
|
||||
MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
MoGoAiCloudClientConfig.getInstance().token,
|
||||
@@ -125,6 +124,7 @@ object SweeperServiceManager {
|
||||
mService.mainTaskReset(
|
||||
MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
MoGoAiCloudClientConfig.getInstance().token,
|
||||
MoGoAiCloudClientConfig.getInstance().sn,
|
||||
taskId
|
||||
)
|
||||
.transformTry()
|
||||
|
||||
@@ -182,19 +182,12 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前子任务id
|
||||
* @param mSubTaskId
|
||||
* 设置当前子任务信息
|
||||
*/
|
||||
public void setSubTaskId(int mSubTaskId) {
|
||||
this.mSubTaskId = mSubTaskId;
|
||||
SweeperTaskModel.getInstance().setSubTaskId(mSubTaskId);
|
||||
public void setSubtask(boolean isFirstSubtask,boolean isLastSubtask,int subTaskId) {
|
||||
this.mSubTaskId = subTaskId;
|
||||
SweeperTaskModel.getInstance().setSubtask(isFirstSubtask,isLastSubtask,subTaskId);
|
||||
}
|
||||
|
||||
public void setIsLastSubtask(boolean mIsLastSubtask) {
|
||||
this.mIsLastSubtask = mIsLastSubtask;
|
||||
SweeperTaskModel.getInstance().setIsLastSubtask(mIsLastSubtask);
|
||||
}
|
||||
|
||||
private void runOnUIThread(Runnable executor) {
|
||||
if (executor == null) {
|
||||
return;
|
||||
@@ -350,7 +343,12 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
public void getCurrentTask() {
|
||||
SweeperTaskModel.getInstance().getCurrentTask();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取主任务列表
|
||||
*/
|
||||
public void getMainTaskList() {
|
||||
SweeperTaskModel.getInstance().getMainTaskList();
|
||||
}
|
||||
/**
|
||||
* 获取子任务列表
|
||||
*/
|
||||
@@ -370,13 +368,13 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
/**
|
||||
* 开始任务
|
||||
*/
|
||||
public void startTask(int subTaskId, SubTaskTypeEnum subTaskType) {
|
||||
public void startTask(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType) {
|
||||
if (SweeperTaskModel.getInstance().getSubWorking()) {//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶
|
||||
if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {
|
||||
SweeperTaskModel.getInstance().startAutopilot();
|
||||
}
|
||||
} else {
|
||||
SweeperTaskModel.getInstance().subTaskStart(subTaskId, subTaskType);
|
||||
SweeperTaskModel.getInstance().subTaskStart(isFirst,isEnd,subTaskId, subTaskType);
|
||||
}
|
||||
// AutopilotControlParameters parameters = new AutopilotControlParameters();
|
||||
// parameters.isSpeakVoice = true;
|
||||
@@ -413,15 +411,15 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
/**
|
||||
* 子任务结束上报
|
||||
*/
|
||||
public void subTaskEnd(int subTaskId, boolean isLastSubTask) {
|
||||
SweeperTaskModel.getInstance().subTaskEnd(subTaskId, isLastSubTask);
|
||||
public void subTaskEnd(boolean isFirst,boolean isEnd,int subTaskId) {
|
||||
SweeperTaskModel.getInstance().subTaskEnd(isFirst,isEnd,subTaskId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 子任务跳过上报
|
||||
*/
|
||||
public void subTaskSkip(int subTaskId, boolean isLastSubTask) {
|
||||
SweeperTaskModel.getInstance().subTaskSkip(subTaskId, isLastSubTask);
|
||||
public void subTaskSkip(boolean isFirst,boolean isEnd,int subTaskId) {
|
||||
SweeperTaskModel.getInstance().subTaskSkip(isFirst,isEnd,subTaskId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.mogo.och.sweeper.ui.adapter
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@@ -12,12 +11,10 @@ import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.SweeperMainTaskBean
|
||||
|
||||
class TaskListAdapter(
|
||||
private val context: Context,
|
||||
private var data: List<SweeperMainTaskBean>?,
|
||||
) : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>() {
|
||||
class TaskListAdapter() : RecyclerView.Adapter<TaskListAdapter.TaskViewHolder>() {
|
||||
private var mItemClickListener: TaskItemClickListener? = null
|
||||
private var mSelectPosition: Int = -1
|
||||
private var data:MutableList<SweeperMainTaskBean>?=null
|
||||
fun setOnTaskItemClickListener(itemClickListener: TaskItemClickListener?) {
|
||||
mItemClickListener = itemClickListener
|
||||
}
|
||||
@@ -40,7 +37,7 @@ class TaskListAdapter(
|
||||
this.mSelectPosition = position
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
fun setTaskListData(data: List<SweeperMainTaskBean>?){
|
||||
fun setTaskListData(data: MutableList<SweeperMainTaskBean>?){
|
||||
this.data=data
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.SubInfo
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskBean
|
||||
@@ -19,11 +20,11 @@ import kotlinx.android.synthetic.main.sweeper_current_task_info.view.*
|
||||
class SweeperCurrentTaskInfoView : ConstraintLayout {
|
||||
//当前任务操作菜单
|
||||
private var mTaskMenuPopWindow: MenuPopWindow? = null
|
||||
private var presenter: SweeperPresenter?=null
|
||||
private var mCurrentPosition=-1
|
||||
private var listTask:List<SubInfo>?=null
|
||||
private var isStartTask:Boolean=false
|
||||
private var mSubTaskType:SubTaskTypeEnum=SubTaskTypeEnum.AUTOPILOT_SUBTYPE
|
||||
private var presenter: SweeperPresenter? = null
|
||||
private var mCurrentPosition = 0
|
||||
private var listTask: List<SubInfo>? = null
|
||||
private var isStartTask: Boolean = false
|
||||
private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE
|
||||
|
||||
constructor(context: Context) : super(context) {}
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
|
||||
@@ -45,12 +46,17 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
|
||||
subTaskBean: SweeperSubTaskBean?,
|
||||
currentPosition: Int,
|
||||
menuItemClickListener: MenuPopWindow.OnMenuItemOnClickListener,
|
||||
presenter:SweeperPresenter?
|
||||
presenter: SweeperPresenter?
|
||||
) {
|
||||
this.presenter=presenter
|
||||
this.listTask=subTaskBean?.subList
|
||||
this.mCurrentPosition=currentPosition
|
||||
this.presenter = presenter
|
||||
this.mCurrentPosition = currentPosition
|
||||
mTaskMenuPopWindow = MenuPopWindow(context, menuItemClickListener)
|
||||
subTaskBean?.apply {
|
||||
this@SweeperCurrentTaskInfoView.listTask = subList
|
||||
tvTaskName.text = taskName
|
||||
val calendar = DateTimeUtil.formatLongToCalendar(taskStartTime)
|
||||
tvTaskTime.text = DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_HH_mm)
|
||||
}
|
||||
setCurrentData(currentPosition)
|
||||
//任务操作菜单打开关闭处理
|
||||
ivMore.setOnClickListener {
|
||||
@@ -65,40 +71,41 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
|
||||
}
|
||||
}
|
||||
readyTaskBtn.setOnClickListener {
|
||||
if (!isStartTask){
|
||||
if (!isStartTask) {
|
||||
//开始执行任务
|
||||
startSubTask()
|
||||
}else{
|
||||
isStartTask=false
|
||||
} else {
|
||||
isStartTask = false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置准备就绪按钮时都可以点击
|
||||
*/
|
||||
fun setEnableClickBtn(isClick:Boolean,isPause:Boolean) {
|
||||
if (mSubTaskType.code==SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code){
|
||||
tvTaskState.text="暂未准备"
|
||||
fun setEnableClickBtn(isClick: Boolean, isPause: Boolean) {
|
||||
if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {
|
||||
tvTaskState.text = "暂未准备"
|
||||
tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready)
|
||||
readyTaskBtn.text="准备出发"
|
||||
readyTaskBtn.isClickable=false
|
||||
readyTaskBtn.isSelected=false
|
||||
isStartTask=false
|
||||
}else{
|
||||
if (isPause){
|
||||
readyTaskBtn.text="暂停任务"
|
||||
}else{
|
||||
readyTaskBtn.text="准备出发"
|
||||
readyTaskBtn.text = "准备出发"
|
||||
readyTaskBtn.isClickable = false
|
||||
readyTaskBtn.isSelected = false
|
||||
isStartTask = false
|
||||
} else {
|
||||
if (isPause) {
|
||||
readyTaskBtn.text = "暂停任务"
|
||||
} else {
|
||||
readyTaskBtn.text = "准备出发"
|
||||
}
|
||||
readyTaskBtn.isClickable=isClick
|
||||
readyTaskBtn.isSelected=isClick
|
||||
isStartTask=isPause
|
||||
if (isPause){
|
||||
tvTaskState.text="正在作业"
|
||||
readyTaskBtn.isClickable = isClick
|
||||
readyTaskBtn.isSelected = isClick
|
||||
isStartTask = isPause
|
||||
if (isPause) {
|
||||
tvTaskState.text = "正在作业"
|
||||
tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_working)
|
||||
}else{
|
||||
tvTaskState.text="暂未准备"
|
||||
} else {
|
||||
tvTaskState.text = "暂未准备"
|
||||
tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready)
|
||||
}
|
||||
}
|
||||
@@ -107,18 +114,35 @@ class SweeperCurrentTaskInfoView : ConstraintLayout {
|
||||
/**
|
||||
* 开始子任务
|
||||
*/
|
||||
private fun startSubTask(){
|
||||
private fun startSubTask() {
|
||||
listTask?.let {
|
||||
presenter?.startTask(it[mCurrentPosition].taskId,
|
||||
if(it[mCurrentPosition].taskType== SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE)
|
||||
presenter?.startTask(
|
||||
isFirstSubTask(),
|
||||
isLastSubTask(),
|
||||
it[mCurrentPosition].taskId,
|
||||
if (it[mCurrentPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
)
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 是否第一个子任务
|
||||
*/
|
||||
private fun isFirstSubTask():Boolean{
|
||||
return mCurrentPosition==0
|
||||
}
|
||||
/**
|
||||
* 是否第一个子任务
|
||||
*/
|
||||
private fun isLastSubTask():Boolean{
|
||||
return mCurrentPosition == (listTask?.size ?: 0)
|
||||
}
|
||||
/**
|
||||
* 填充数据
|
||||
*/
|
||||
fun setCurrentData(mCurrentPosition:Int){
|
||||
fun setCurrentData(mCurrentPosition: Int) {
|
||||
listTask?.let {
|
||||
mSubTaskType=if (it[mCurrentPosition].taskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
mSubTaskType =
|
||||
if (it[mCurrentPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE
|
||||
if (it.size == 1) {
|
||||
preSubTask.setData(it[mCurrentPosition], isSelect = true, isLastTask = true)
|
||||
currentSubTask.visibility = View.INVISIBLE
|
||||
|
||||
@@ -69,7 +69,8 @@ class SweeperWorkModeView : ConstraintLayout, ICleaningModeStateCallback {
|
||||
* 设置清扫模式面板
|
||||
*/
|
||||
fun setSweeperFutianCleanSystemState(taskType: SubTaskTypeEnum, cleanSystemState: SweeperFuTianTaskSystemStates?) {
|
||||
mOperatePanelPopWindow?.setCleanSystemState(cleanSystemState, this@SweeperWorkModeView)
|
||||
// TODO:传递清扫车底盘数据给上装面板
|
||||
//mOperatePanelPopWindow?.setCleanSystemState(cleanSystemState, this@SweeperWorkModeView)
|
||||
if (this.operateState.code==OperateStateEnum.STARTING_STATUS.code){
|
||||
return
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
android:layout_marginTop="@dimen/dp_43"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/ivTaskRefresh"
|
||||
android:id="@+id/ivTaskListRefresh"
|
||||
android:layout_width="@dimen/dp_42"
|
||||
android:layout_height="@dimen/dp_42"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
android:layout_width="@dimen/dp_560"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:background="@drawable/bg_shape_work_mode">
|
||||
<TextView
|
||||
android:id="@+id/tvTaskName"
|
||||
@@ -13,7 +14,7 @@
|
||||
android:textSize="@dimen/dp_38"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="@dimen/dp_21"
|
||||
android:text="惠新西街南口地铁站公交站"
|
||||
tools:text="惠新西街南口地铁站公交站"
|
||||
android:layout_marginStart="@dimen/dp_28"
|
||||
/>
|
||||
<TextView
|
||||
@@ -25,7 +26,7 @@
|
||||
android:textSize="@dimen/dp_28"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="@dimen/dp_21"
|
||||
android:text="9:00"
|
||||
tools:text="9:00"
|
||||
android:layout_marginStart="@dimen/dp_28"
|
||||
android:background="@drawable/bg_shape_clean_mode"
|
||||
android:paddingStart="@dimen/dp_12"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/ivNoTaskData" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivTaskRefresh"
|
||||
android:id="@+id/ivNoTaskRefresh"
|
||||
android:layout_width="@dimen/dp_42"
|
||||
android:layout_height="@dimen/dp_42"
|
||||
android:layout_marginTop="@dimen/dp_39"
|
||||
|
||||
@@ -74,7 +74,8 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:src="@drawable/sweeper_clean_mode_icon"/>
|
||||
android:src="@drawable/sweeper_clean_mode_icon"
|
||||
android:visibility="gone"/>
|
||||
<TextView
|
||||
android:id="@+id/tvNoDataDesc"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
Reference in New Issue
Block a user