diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt index 8ea10a1f4b..63ce688454 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt @@ -3,11 +3,14 @@ package com.mogo.och.sweeper.bean /** * 子任务信息 */ -data class SweeperSubTaskBean(var taskId:Int=0, - var taskName:String?, - var taskStartTime:Long=0, - var sort:Int=1, - var subList:MutableList?) +data class SweeperSubTaskBean( + var taskId: Int = 0, + var taskName: String?, + var taskStartTime: Long = 0, + var sort: Int = 1, + var subList: MutableList? +) + data class SubInfo( var taskId: Int = 0, var taskName: String?, @@ -15,9 +18,11 @@ 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 startSiteName: String,//起点名称 + var startWgs84Lon: Double,//起点经度 + var startWgs84Lat: Double,//起点纬度 + var endSiteName: String,//终点名称 + var endWgs84Lon: Double,//终点经度 + var endWgs84Lat: Double,//终点纬度 var sort: Int = 0, ) \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt index e8663ac751..5d9fd9839a 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/TaskStatusEnum.kt @@ -8,5 +8,5 @@ enum class TaskStatusEnum(val code: Int) { END_TASK( 2),//结束主任务 CANCEL_TASK( 3),//取消 START_SUBTASK(4),//开始子任务 - END_SUBTASK(4),//结束子任务 + END_SUBTASK(5),//结束子任务 } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java index 8ca4a6d676..cee66c7e53 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/bean/WeltDataBean.java @@ -1,12 +1,14 @@ package com.mogo.och.sweeper.database.bean; +import java.io.Serializable; + import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Index; import androidx.room.PrimaryKey; @Entity(tableName = WeltDataBean.WeltDataTable, indices = {@Index(value = "id", unique = true)}) -public class WeltDataBean { +public class WeltDataBean implements Serializable { public static final String WeltDataTable = "welt_data_table"; //ColumnInfo用于指定该字段存储在表中的名字,并指定类型 diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java index 097be3af3e..7647d29a08 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/database/dao/WeltDataDao.java @@ -2,6 +2,7 @@ package com.mogo.och.sweeper.database.dao; import com.mogo.och.sweeper.database.bean.WeltDataBean; +import java.util.ArrayList; import java.util.List; import androidx.room.Dao; diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt new file mode 100644 index 0000000000..f9e140e86e --- /dev/null +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/event/WeltDataEvent.kt @@ -0,0 +1,10 @@ +package com.mogo.och.sweeper.event + +import com.amap.api.maps.model.LatLng +import com.mogo.och.sweeper.database.bean.WeltDataBean + +data class WeltDataEvent( + var type:Int, //1.添加起点和终点 2.实时添加贴边数据 3.清除数据 + var weltDataBeanList: MutableList?, + var markers:MutableList? +) \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java index a102e0483f..3b0701fc19 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java @@ -9,6 +9,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import com.amap.api.maps.model.LatLng; +import com.amap.api.navi.model.NaviLatLng; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; @@ -30,7 +31,6 @@ import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.och.common.module.map.AmapNaviToDestinationModel; -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.sweeper.R; import com.mogo.och.sweeper.database.bean.WeltDataBean; import com.mogo.och.sweeper.callback.IWeltMapSwitchToSmallCallback; @@ -89,6 +89,8 @@ public abstract class BaseSweeperTabFragment weltDataBeanList;//存储贴边数据 + private ArrayList latLngList;//存储任务起点和终点 @Override protected int getLayoutId() { @@ -133,7 +135,17 @@ public abstract class BaseSweeperTabFragment debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) ); - + // 模拟 结束子任务 + findViewById(R.id.btnEndTask).setOnClickListener(view -> + debugEndSubTask() + ); + mTrafficDataView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + debugTestBar(); + return false; + } + }); } private void updateSwitchMapIcon() { @@ -154,8 +166,6 @@ public abstract class BaseSweeperTabFragment { showOrHideOverMapViewFragment(true); - setWeltData(); }); } @@ -276,7 +285,7 @@ public abstract class BaseSweeperTabFragment weltDataBeans) { + public void setWeltDataToMap(ArrayList weltDataBeans,Boolean isWeltData) { if (mMapWeltView != null) { - mMapWeltView.setWeltData(weltDataBeans); + mMapWeltView.setWeltData(weltDataBeans,isWeltData); runOnUIThread(() -> { mMapWeltView.drawablePolyline(); }); } - EventBus.getDefault().post(new WeltDataEvent(2, weltDataBeans, null)); + this.weltDataBeanList = weltDataBeans; + EventBus.getDefault().postSticky(new WeltDataEvent(2, weltDataBeans, null)); } /** @@ -433,10 +443,11 @@ public abstract class BaseSweeperTabFragment latLngs = new ArrayList<>(2); + ArrayList latLngs = new ArrayList<>(2); latLngs.add(0, startPoint); latLngs.add(1, endPoint); - EventBus.getDefault().post(new WeltDataEvent(1, null, latLngs)); + this.latLngList = latLngs; + EventBus.getDefault().postSticky(new WeltDataEvent(1, null, latLngs)); } /** @@ -446,7 +457,7 @@ public abstract class BaseSweeperTabFragment weltDataBean = new ArrayList<>(); - weltDataBean.add(getWeltDataBean(116.38851540542558, 39.97419244219622, -10.0)); - weltDataBean.add(getWeltDataBean(116.38777443467706, 39.96694323029558, 8.0)); - weltDataBean.add(getWeltDataBean(116.39311478161825, 39.967085313029074, 16.0)); - weltDataBean.add(getWeltDataBean(116.40963237692603, 39.975055860562826, 30.0)); - weltDataBean.add(getWeltDataBean(116.41146331146084, 39.97513910337909, -9999.0)); - weltDataBean.add(getWeltDataBean(116.40748849300006, 39.96752223478818, -10000.0)); - weltDataBean.add(getWeltDataBean(116.42670283855335, 39.97526250389533, 1000.0)); - setWeltDataToMap(weltDataBean); - addStartAndEndMarker(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), 116.38851540542558, - 39.97419244219622), - CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), 116.42670283855335, 39.97526250389533)); + public void startNaviToStation(Boolean isVoicePlay, double startLat, double startLng, double endLat, double endLng) { + AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); + NaviLatLng startNaviLatLng = new NaviLatLng(startLat, startLng); + NaviLatLng endNaviLatLng = new NaviLatLng(endLat, endLng); + AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng); + AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay); } - private WeltDataBean getWeltDataBean(Double locLon, Double locLat, Double weltDistance) { - //把wgs坐标系坐标转换成gcj坐标 - LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), locLon, locLat); - WeltDataBean weltDataBean = new WeltDataBean(); - weltDataBean.setLocLon(latLng.longitude); - weltDataBean.setLocLat(latLng.latitude); - weltDataBean.setWeltDistance(weltDistance); - return weltDataBean; + /** + * 结束子任务 + */ + public void debugEndSubTask() { + } } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt index b507e66ff8..77ece57674 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt @@ -7,6 +7,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import chassis.ChassisStatesOuterClass import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.sweeper.R import com.mogo.och.sweeper.bean.SubInfo @@ -15,6 +17,7 @@ import com.mogo.och.sweeper.bean.SweeperSubTaskBean import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean import com.mogo.och.sweeper.constant.SubTaskTypeEnum import com.mogo.och.sweeper.constant.TaskStatusEnum +import com.mogo.och.sweeper.database.bean.WeltDataBean import com.mogo.och.sweeper.presenter.SweeperPresenter import com.mogo.och.sweeper.ui.adapter.TaskListAdapter import com.mogo.och.sweeper.ui.dialog.SweeperManualDrivingDialog @@ -27,17 +30,16 @@ import kotlinx.android.synthetic.main.sweeper_no_data_common_view.* * 清扫车主界面 */ class SweeperFragment : BaseSweeperTabFragment(), MenuPopWindow.OnMenuItemOnClickListener { + private val TAG = "SweeperFragment" private var mAdapter: TaskListAdapter? = null private var mCurrentSubPosition: Int = 0 //子任务下标 private var mSubMutableList: MutableList? = null private var mSubTaskBean: SweeperSubTaskBean? = null private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务 private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null - 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 mSubInfo: SubInfo? = null //当前经纬度 override fun getTagName(): String { @@ -128,6 +130,7 @@ class SweeperFragment : BaseSweeperTabFragment {//跳过任务 - presenter?.subTaskSkip(isFirstSubTask(), isLastSubTask(), mSubTaskId) + mSubInfo?.let { + //如果当前只有一个子任务,则isFirst设置为false + presenter?.subTaskSkip(if (mSubMutableList?.size == 1) false else isFirstSubTask(), isLastSubTask(), it.taskId) + } } TaskStatusEnum.END_TASK.code -> {//结束主任务 endMainTask() @@ -197,20 +203,20 @@ class SweeperFragment : BaseSweeperTabFragment - if (subList.size<=0){ - return + if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务需要调用详情 + mSubInfo?.let { subInfo -> + presenter?.getSubTaskDetail(subInfo.taskId, mSubTaskType)//加载子任务详情包括轨迹信息 } - 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) - ) + } else { + manualDriving(mSubInfo) } + mMainTask = SweeperMainTaskBean(it.taskId, it.taskName, 0, it.taskStartTime) + clearAllMarkerAndPolyline() + addWeltData() } } @@ -219,30 +225,38 @@ class SweeperFragment : BaseSweeperTabFragment {//子任务结束 - //是否是最后一个子任务结束 - 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) + mCurrentSubPosition++ + setSubTaskData() + d(SceneConstant.M_SWEEPER + TAG, "END_SUBTASK mCurrentSubPosition:$mCurrentSubPosition") + if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务 + mSubInfo?.apply { + presenter?.getSubTaskDetail(taskId, mSubTaskType) + presenter?.startTask(isFirstSubTask(), isLastSubTask(), taskId, mSubTaskType, taskStatus) } + } else { + manualDriving(mSubInfo) } } TaskStatusEnum.JUMP_OVER_SUBTASK.code -> { //子任务跳过 - presenter?.subTaskEnd(isFirstSubTask(), isLastSubTask(), mSubTaskId) - if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {//人工驾驶子任务 + //是否是最后一个子任务结束 + mCurrentSubPosition++ + setSubTaskData() + d(SceneConstant.M_SWEEPER + TAG, "JUMP_OVER_SUBTASK mCurrentSubPosition:$mCurrentSubPosition") + showAmapNaviToStationFragment(false) + if (mSubTaskType.code == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) {//自动驾驶子任务 + mSubInfo?.apply { + presenter?.getSubTaskDetail(taskId, mSubTaskType) + presenter?.startTask(isFirstSubTask(), isLastSubTask(), taskId, mSubTaskType, taskStatus) + } + } else { showAmapNaviToStationFragment(false) + manualDriving(mSubInfo) } } TaskStatusEnum.START_SUBTASK.code -> { //子任务开始 @@ -264,10 +278,10 @@ class SweeperFragment : BaseSweeperTabFragment + 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 + ) + ) + val dataList = ArrayList() + for (index in subList.indices) { + val startPoint = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj( + AbsMogoApplication.getApp(), + subList[index].startWgs84Lon, + subList[index].startWgs84Lat + ) + val startWeltData = WeltDataBean() + startWeltData.locLat = startPoint.latitude + startWeltData.locLon = startPoint.longitude + startWeltData.weltDistance=-9999.0 + dataList.add(startWeltData) + val endPoint = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj( + AbsMogoApplication.getApp(), + subList[index].endWgs84Lon, + subList[index].endWgs84Lat + ) + val endWeltData = WeltDataBean() + endWeltData.locLat = endPoint.latitude + endWeltData.locLon = endPoint.longitude + endWeltData.weltDistance=-9999.0 + dataList.add(endWeltData) + } + setWeltDataToMap(dataList,false) + } + } + + //模拟结束子任务 + override fun debugEndSubTask() { + mSubInfo?.let { + mPresenter?.onArriveTaskEnd(null) + } + } } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt index 4db94ec402..96197f92db 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/WeltMapOverViewFragment.kt @@ -1,14 +1,27 @@ package com.mogo.och.sweeper.fragment import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.lifecycle.lifecycleScope import com.amap.api.maps.model.LatLng import com.mogo.commons.mvp.BaseFragment import com.mogo.och.sweeper.R import com.mogo.och.sweeper.callback.IWeltMapSwitchToSmallCallback import com.mogo.och.sweeper.database.bean.WeltDataBean +import com.mogo.och.sweeper.event.WeltDataEvent import kotlinx.android.synthetic.main.fragment_welt_map_overview.* import kotlinx.android.synthetic.main.sweeper_welt_map_overview.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode +/** + * 作业任务全览图 + */ class WeltMapOverViewFragment(var mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback?) : BaseFragment() { override fun getLayoutId(): Int = R.layout.fragment_welt_map_overview override fun getTagName(): String { @@ -19,23 +32,44 @@ class WeltMapOverViewFragment(var mIWeltMapSwitchToSmallCallBack: IWeltMapSwitch } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + EventBus.getDefault().register(this) + return super.onCreateView(inflater, container, savedInstanceState) + } + override fun initViews(savedInstanceState: Bundle?) { super.initViews(savedInstanceState) weltMapOverView.onCreateView(savedInstanceState) - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - setLegendData() sweeperSwitchToSmall.setOnClickListener { mIWeltMapSwitchToSmallCallBack?.onWeltMapSwitchToSmall() } + val bundle = arguments + if (bundle != null) { + val latLngs = bundle.getSerializable("startAndEndPoint") as? ArrayList + val weltDataList = bundle.getSerializable("weltDataList") as? ArrayList + latLngs?.let { + if (it.size >= 2) { + addStartAndEndMarker(it[0], it[1]) + } + } + weltDataList?.let { + setWeltData(it,false) + drawablePolyline() + } + } + } companion object { @JvmStatic - fun newInstance(mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback): WeltMapOverViewFragment { + fun newInstance( + mIWeltMapSwitchToSmallCallBack: IWeltMapSwitchToSmallCallback, + weltDataList: ArrayList, + latLngs: ArrayList + ): WeltMapOverViewFragment { val args = Bundle() + args.putSerializable("weltDataList", weltDataList) + args.putSerializable("startAndEndPoint", latLngs) val fragment = WeltMapOverViewFragment(mIWeltMapSwitchToSmallCallBack) fragment.arguments = args return fragment @@ -56,38 +90,54 @@ class WeltMapOverViewFragment(var mIWeltMapSwitchToSmallCallBack: IWeltMapSwitch super.onDestroy() weltMapOverView.onDestroy() } + + override fun onDestroyView() { + super.onDestroyView() + EventBus.getDefault().unregister(this) + } + + @Subscribe(threadMode = ThreadMode.BACKGROUND) + fun changeWeltData(weltDataEvent: WeltDataEvent) { + if (weltDataEvent.type == 1) { + lifecycleScope.launch(Dispatchers.Main) { + weltDataEvent.markers?.let { + addStartAndEndMarker(it[0], it[1]) + } + } + } else if (weltDataEvent.type == 2) { + setWeltData(weltDataEvent.weltDataBeanList,true) + lifecycleScope.launch(Dispatchers.Main) { + drawablePolyline() + } + } else if (weltDataEvent.type == 3) { + lifecycleScope.launch(Dispatchers.Main) { + clearAllMarkerAndPolyline() + } + } + } + /** * 设置任务路线数据 */ - fun setWeltData(weltDatas:MutableList) { - weltMapOverView.setWeltData(weltDatas) + private fun setWeltData(weltDatas: MutableList?,isWeltData:Boolean) { + weltMapOverView.setWeltData(weltDatas,isWeltData) } /** * 绘制任务路线数据 */ - fun drawablePolyline(){ + private fun drawablePolyline() { weltMapOverView.drawablePolyline() } + /** * 添加起点和终点marker */ - fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng){ - weltMapOverView.drawStartAndEndMarker(startPoint,endPoint) + private fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) { + weltMapOverView.drawStartAndEndMarker(startPoint, endPoint) } - fun clearAllMarkerAndPolyline(){ + private fun clearAllMarkerAndPolyline() { weltMapOverView.clearAllMarkerAndPolyline() } - /** - * 设置图例数据 - */ - private fun setLegendData() { - sweeperLegend1.setData(R.drawable.sweeper_legend1, "a<10") - sweeperLegend2.setData(R.drawable.sweeper_legend2, "0≤a<10") - sweeperLegend3.setData(R.drawable.sweeper_legend3, "10≤a<20") - sweeperLegend4.setData(R.drawable.sweeper_legend4, "a≥20") - sweeperLegend5.setData(R.drawable.sweeper_legend5, "非贴边") - sweeperLegend6.setData(R.drawable.sweeper_legend6, "未经过") - } } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java index 54ad36fcee..bcd0437f44 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java @@ -342,7 +342,7 @@ public class SweeperTaskModel { public void onArriveTaskEnd(MessagePad.ArrivalNotification data) { //MAP 280 每隔100ms左右返回一次到站, 导致在到达中间站后再次滑动出发后会有时间差,收到一次到站,出现问题 //此处比对 自驾告诉的子任务终点坐标和本地应到子任务终点坐标, 一致时才表示子任务完成 - if (data != null && data.getEndLocation() != null) { + if (data != null && data.getEndLocation() != null&¤tSubTaskDetail!=null) { String latitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLatitude(), 5); //wgs String longitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLongitude(), 5); String arriveLat = NumberFormatUtil.cutOutNumber(currentSubTaskDetail.getEndSiteWgs64Lat(), 5); @@ -354,7 +354,7 @@ public class SweeperTaskModel { } if (isArriveSubTaskEndSite)return; CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-当前==subTaskId=" - + currentSubTaskDetail.getId()); + + mSubTaskId); //到达子任务终点 结束子任务 subTaskEnd(mIsFirstSubtask,mIsLastSubtask,mSubTaskId); } @@ -426,6 +426,7 @@ public class SweeperTaskModel { SweeperServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { SweeperSubTaskBean sweeperSubTaskBean = data.getData(); if (sweeperSubTaskBean != null && sweeperSubTaskBean.getSubList() != null && sweeperSubTaskBean.getSubList().size() > 0) { @@ -465,6 +466,7 @@ public class SweeperTaskModel { SweeperServiceManager.getMainTaskList(mContext, new OchCommonServiceCallback>>() { @Override public void onSuccess(BaseResponse> data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getMainTaskList:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null && data.getCode() == 0) { List list = data.getData(); mSweeperTaskCallback.setMainTaskList(list); @@ -500,6 +502,7 @@ public class SweeperTaskModel { SweeperServiceManager.getSubTaskList(taskId, mContext, new OchCommonServiceCallback>>() { @Override public void onSuccess(BaseResponse> data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskList:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null && data.getCode() == 0) { List list = data.getData(); if (list != null && list.size() > 0) { @@ -540,6 +543,7 @@ public class SweeperTaskModel { SweeperServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskDetail:"+GsonUtil.jsonFromObject(data)); if (data != null) { currentSubTaskDetail = data.getData(); if (currentSubTaskDetail != null) { @@ -582,6 +586,7 @@ public class SweeperTaskModel { SweeperServiceManager.subTaskStart(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskStart:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { if (data.getData()) { isSubTaskWorking = true; @@ -631,6 +636,7 @@ public class SweeperTaskModel { SweeperServiceManager.subTaskEnd(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskEnd:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { if (data.getData()) { isSubTaskWorking = false; @@ -678,12 +684,11 @@ public class SweeperTaskModel { SweeperServiceManager.subTaskSkip(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskSkip:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { if (data.getData()) { + isSubTaskWorking=false; mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.JUMP_OVER_SUBTASK, isEnd); - if (isEnd) {//如果是最后一个子任务,则跳过完成后,调用结束子任务接口,这样后端可以才可以把整个大任务结束掉 - subTaskEnd(isFirst,isEnd,subTaskId); - } } } } @@ -717,6 +722,7 @@ public class SweeperTaskModel { SweeperServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "mainTaskReset:"+GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { mSweeperTaskCallback.setMainTaskReset(data.getData()); } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java index 8a2795a83d..a5af7dcd89 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java @@ -78,7 +78,7 @@ public interface ISweeperApiService { * @return */ @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/och-sweep/api/task/v1/sutTaskEnd") + @POST("/och-sweep/api/task/v1/subTaskEnd") Observable> subTaskEnd(@Header ("appId") String appId, @Header("ticket") String ticket, @Body SubStartRequest subStartRequest); /** * 子任务跳过 diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt index c228f3390c..3731529e7e 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt @@ -1,15 +1,20 @@ package com.mogo.och.sweeper.net import android.content.Context +import com.elegant.network.utils.GsonUtil import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl import com.mogo.och.common.module.biz.network.interceptor.transformTry import com.mogo.och.sweeper.bean.* import com.mogo.och.sweeper.constant.SweeperConst.Companion.getBaseUrl +import com.mogo.och.sweeper.model.SweeperTaskModel object SweeperServiceManager { + private val TAG = SweeperTaskModel::class.java.simpleName private val mService: ISweeperApiService = MoGoRetrofitFactory.getInstance(getBaseUrl()).create( ISweeperApiService::class.java ) @@ -77,6 +82,7 @@ object SweeperServiceManager { @JvmStatic fun subTaskStart(isFirst:Boolean,isEnd:Boolean,subTaskId: Int,context: Context, callback: OchCommonServiceCallback>?) { val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis(),isFirst,isEnd) + d(SceneConstant.M_SWEEPER + TAG, "subTaskStart:" + GsonUtil.jsonFromObject(subStartRequest)) mService.subTaskStart( MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, @@ -92,6 +98,7 @@ object SweeperServiceManager { @JvmStatic fun subTaskEnd(isFirst:Boolean,isEnd:Boolean,subTaskId: Int,context: Context, callback: OchCommonServiceCallback>?) { val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis(),isFirst,isEnd) + d(SceneConstant.M_SWEEPER + TAG, "subTaskEnd:" + GsonUtil.jsonFromObject(subStartRequest)) mService.subTaskEnd( MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, @@ -107,6 +114,7 @@ object SweeperServiceManager { @JvmStatic fun subTaskSkip(isFirst:Boolean,isEnd:Boolean,subTaskId: Int,context: Context, callback: OchCommonServiceCallback>?) { val subStartRequest = SubStartRequest(MoGoAiCloudClientConfig.getInstance().sn, subTaskId, System.currentTimeMillis(),isFirst,isEnd) + d(SceneConstant.M_SWEEPER + TAG, "subTaskSkip:" + GsonUtil.jsonFromObject(subStartRequest)) mService.subTaskSkip( MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java index c7f4c0593c..9a317bfd21 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java @@ -36,6 +36,7 @@ import com.mogo.och.sweeper.util.SweeperTrajectoryManager; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; @@ -238,7 +239,9 @@ public class SweeperPresenter extends Presenter public void onStartAdasFailure() { } - + public void onArriveTaskEnd(@Nullable MessagePad.ArrivalNotification arrivalNotification){ + SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification); + } @Override public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) { if (cleanSystemState==null){ @@ -334,7 +337,7 @@ public class SweeperPresenter extends Presenter weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity()); weltDataBean.setSubTaskId(mSubTaskId); MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean); - mView.setWeltDataToMap(MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo()); + mView.setWeltDataToMap((ArrayList) MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo(),true); } /** @@ -368,13 +371,15 @@ public class SweeperPresenter extends Presenter /** * 开始任务 */ - public void startTask(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType) { + public void startTask(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType,int subTaskStatus) { if (SweeperTaskModel.getInstance().getSubWorking()) {//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶 if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) { SweeperTaskModel.getInstance().startAutopilot(); } } else { - SweeperTaskModel.getInstance().subTaskStart(isFirst,isEnd,subTaskId, subTaskType); + if (subTaskStatus==1){//子任务未执行,则开始执行 + SweeperTaskModel.getInstance().subTaskStart(isFirst,isEnd,subTaskId, subTaskType); + } } // AutopilotControlParameters parameters = new AutopilotControlParameters(); // parameters.isSpeakVoice = true; @@ -453,15 +458,4 @@ public class SweeperPresenter extends Presenter public void setSubTakDetail(@NonNull SweeperSubTaskDetailBean subTaskDetailBean, SubTaskTypeEnum subTaskTypeEnum) { mView.setSubTakDetail(subTaskDetailBean, subTaskTypeEnum); } - - /** - * 导航去目的地 - */ - public void startNaviToStation(Boolean isVoicePlay, double startLat, double startLng, double endLat, double endLng) { - AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); - NaviLatLng startNaviLatLng = new NaviLatLng(startLat, startLng); - NaviLatLng endNaviLatLng = new NaviLatLng(endLat, endLng); - AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng); - AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay); - } } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt index ac6fce4fbb..99a5491869 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt @@ -6,10 +6,8 @@ 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 import kotlinx.android.synthetic.main.sweeper_subtask_view.view.* /** @@ -43,7 +41,7 @@ class SubTaskView : ConstraintLayout { // }else{ // "${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟" // } - tvSubTaskDesc.text = "全程约${mileage},预计耗时${taskInfo.timeSpent}" + tvSubTaskDesc.text = "全程约${mileage},预计耗时${taskInfo.timeSpent}分钟" tvSubTaskName.setTextColor(if (isSelect) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF")) if (isSelect) { ivSubTaskSelect.visibility = View.VISIBLE diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt index 61cc66451b..fbc3ef37e2 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt @@ -120,7 +120,8 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { isFirstSubTask(), isLastSubTask(), it[mCurrentPosition].taskId, - if (it[mCurrentPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE + if (it[mCurrentPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE, + it[mCurrentPosition].taskStatus ) } } @@ -134,7 +135,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { * 是否第一个子任务 */ private fun isLastSubTask():Boolean{ - return mCurrentPosition == (listTask?.size ?: 0) + return mCurrentPosition == (listTask?.size?.minus(1)) } /** * 填充数据 diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt index 5d28df4ec5..2f2aff1ffa 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltMapOverView.kt @@ -5,6 +5,7 @@ import android.graphics.Color import android.os.Bundle import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout import com.amap.api.maps.AMap @@ -30,6 +31,7 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { private var mPolyline: Polyline? = null private var colorList: MutableList = mutableListOf() private val mLineMarkers: MutableList = mutableListOf() + private var mFirst: Boolean = false //清扫车任务地图 private val TAG = "WeltMapOverView" @@ -48,7 +50,6 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { initAMapView() // 注册定位监听 CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this) - setLegendData() } private fun initAMapView() { @@ -158,28 +159,38 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { /** * 清除所有标记和路线 */ - public fun clearAllMarkerAndPolyline() { + fun clearAllMarkerAndPolyline() { mPolyline?.remove() for (i in mLineMarkers.indices) { mLineMarkers[i]?.isVisible = false mLineMarkers[i]?.remove() } mLineMarkers.clear() + mFirst = false + showOrHiddenLegendData(false) } + /** * 设置贴边数据 */ - fun setWeltData(weltData: MutableList) { - this.mWeltData = weltData - for (i in mWeltData.indices) { - mCoordinatesLatLng.add(LatLng(mWeltData[i].locLat, mWeltData[i].locLon)) + fun setWeltData(weltData: MutableList?,isWeltData: Boolean) { + if (weltData != null) { + this.mWeltData.addAll(weltData) + for (i in mWeltData.indices) { + mCoordinatesLatLng.add(LatLng(mWeltData[i].locLat, mWeltData[i].locLon)) + } + } + if (!mFirst&&isWeltData) { + mFirst = true + showOrHiddenLegendData(true) } } /** * 设置图例数据 */ - private fun setLegendData() { + private fun showOrHiddenLegendData(isShow: Boolean) { + groupLegend.visibility = if (isShow) View.VISIBLE else View.GONE sweeperLegend1.setData(R.drawable.sweeper_legend1, "a<10") sweeperLegend2.setData(R.drawable.sweeper_legend2, "0≤a<10") sweeperLegend3.setData(R.drawable.sweeper_legend3, "10≤a<20") diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt index be0c79afc6..ebf36e64f7 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/WeltSmallMapView.kt @@ -3,8 +3,11 @@ package com.mogo.och.sweeper.view import android.content.Context import android.graphics.Color import android.os.Bundle +import android.os.Looper import android.util.AttributeSet import android.view.LayoutInflater +import android.view.View +import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout import com.amap.api.maps.AMap import com.amap.api.maps.CameraUpdateFactory @@ -14,6 +17,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Liste import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.sweeper.R import com.mogo.och.sweeper.database.bean.WeltDataBean @@ -30,6 +34,7 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { private var mPolyline: Polyline? = null private var colorList: MutableList = mutableListOf() private val mLineMarkers: MutableList = mutableListOf() + private var mFirst: Boolean = false //清扫车任务地图 private val TAG = "WeltMapView" @@ -153,6 +158,11 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { * 添加起点和终点的marker */ fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) { + for (i in mLineMarkers.indices) { + mLineMarkers[i]?.isVisible = false + mLineMarkers[i]?.remove() + } + mLineMarkers.clear() val startMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.start_maker_icon))) startMarker?.position = startPoint mLineMarkers.add(startMarker) @@ -161,6 +171,17 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { mLineMarkers.add(endMarker) } + private fun runOnUIThread(executor: Runnable?) { + if (executor == null) { + return + } + if (Looper.myLooper() != Looper.getMainLooper()) { + UiThreadHandler.post(executor) + } else { + executor.run() + } + } + /** * 清除所有标记和路线 */ @@ -171,15 +192,32 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { mLineMarkers[i]?.remove() } mLineMarkers.clear() + mFirst = false + showOrHiddenWelt(false) } + + fun getSwitchToBig(): ImageView = sweeperSwitchToBig + + /** + * 显示或隐藏贴边 + */ + private fun showOrHiddenWelt(isShow: Boolean) { + taskProgressTv.visibility = if (isShow) View.VISIBLE else View.GONE + taskWeltDistanceTv.visibility = if (isShow) View.VISIBLE else View.GONE + } + /** * 设置贴边数据 */ - fun setWeltData(weltData: MutableList) { + fun setWeltData(weltData: MutableList,isWeltData: Boolean) { this.mWeltData = weltData for (i in mWeltData.indices) { mCoordinatesLatLng.add(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(context, mWeltData[i].locLon, mWeltData[i].locLat)) } + if (!mFirst&&isWeltData) { + showOrHiddenWelt(true) + mFirst = true + } } fun onCreateView(savedInstanceState: Bundle?) { diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml index 14d1e22299..e140e63790 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_base_fragment.xml @@ -287,6 +287,15 @@ android:textSize="30sp" app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable" app:layout_constraintTop_toBottomOf="@id/btnAutopilotEnable" /> +