app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
@@ -138,7 +138,7 @@ if (listContainsSameValue(indexs)) { MyLog.i(TAG, "sendSignalConfigsToRemote: 有相同的index,不能发送" + gson.toJson(signalConfiglist)) } else { AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.SEND_CONFIG_SIGNAL, gson.toJson(signalConfiglist)) // AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.SEND_CONFIG_SIGNAL, gson.toJson(signalConfiglist)) } } } app/src/main/java/safeluck/drive/evaluation/DB/route/RouteBean.java
@@ -17,6 +17,15 @@ @PrimaryKey(autoGenerate = true) private int id; private String routeName; private int currentCollectFlag;//1-当前正在采 ,整张表唯一,只有一个线路正处于采集当中 public int getCurrentCollectFlag() { return currentCollectFlag; } public void setCurrentCollectFlag(int currentCollectFlag) { this.currentCollectFlag = currentCollectFlag; } public int getId() { return id; app/src/main/java/safeluck/drive/evaluation/DB/route/RouteBeanDao.java
@@ -19,6 +19,18 @@ public interface RouteBeanDao { @Query("SELECT * FROM RouteBean") LiveData<List<RouteBean>> getAllRoutes(); @Query("SELECT * FROM RouteBean where currentCollectFlag=1") RouteBean getCurrRouteBean(); //更新整张表的 采集标志 @Query("UPDATE RouteBean SET currentCollectFlag=0 ") void setCurrtentNotCollectFlag(); //更新某个id的采集标志 @Query("UPDATE RouteBean SET currentCollectFlag=1 where routeName=:name ") void setCurrtentFlagWithName(String name); @Insert(onConflict = OnConflictStrategy.REPLACE) void insertRouteBean(RouteBean routeBean); app/src/main/java/safeluck/drive/evaluation/DB/route/RouteLineRepository.java
@@ -1,6 +1,7 @@ package safeluck.drive.evaluation.DB.route; import android.app.Application; import android.text.TextUtils; import androidx.lifecycle.LiveData; @@ -72,4 +73,15 @@ public LiveData<List<RouteBean>> getAllRouteBeans() { return routeBeans; } public void updateCurrCollectFlag(String name) { WorkRoomDataBase.dataBaseWriteExecutor.execute(()->{ routeBeanDao.setCurrtentNotCollectFlag(); if (!TextUtils.isEmpty(name)){ routeBeanDao.setCurrtentFlagWithName(name); } }); } } app/src/main/java/safeluck/drive/evaluation/DB/route/RouteLineViewModel.java
@@ -49,5 +49,7 @@ } public void updateCurrCollectFlag(String name) { workRepository.updateCurrCollectFlag(name); } } app/src/main/java/safeluck/drive/evaluation/app.java
@@ -180,7 +180,10 @@ // CEventCenter.dispatchEvent(Constant.BIND_RTKCONFIG_TOPIC,cmd,0,""); break; case Constant.JUDGE_INFO: if (ExamPlatformData.getInstance().getTrainingMode()==ExamPlatformData.ROUTE_MODE){ MyLog.i(TAG,"采集模式不接受评判消息"); return; } if(!TextUtils.isEmpty(json)){ final JKMessage0203 jkMessage0203 = new JKMessage0203(); app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -22,6 +22,7 @@ import safeluck.drive.evaluation.DB.appstatusdb.AppStatusWorker; import safeluck.drive.evaluation.app; import safeluck.drive.evaluation.platformMessage.PlatFormConstant; import safeluck.drive.evaluation.routecollect.bean.RoadInfo; import safeluck.drive.evaluation.util.SPUtils; import safeluck.drive.evaluation.viewmodels.ExamPlatformModel; import safeluck.drive.evaluation.viewmodels.MainViewModel; @@ -34,6 +35,25 @@ public static final int PERSON_TYPE_STU = 1;//人员类型为学员 public static final int COACH_ID = 1002;//教练数据库表里面的唯一id public static final int STU_ID = 1001;//学员数据库表里面的唯一id //一id学员数据库表里面的唯 public static final int ROAD_ITEM_NONE = 0; //一id学员数据库表里面的唯 public static final int ROAD_ITEM_CHANGE_LANE = 1; //一id学员数据库表里面的唯 public static final int ROAD_ITEM_OVERTAKE = 2; //一id学员数据库表里面的唯 public static final int ROAD_ITEM_STRAIGHT = 3; //一id学员数据库表里面的唯 public static final int ROAD_ITEM_OPERATE_GEAR = 4; public static final int ROAD_ITEM_START_CAR = 5; public static final int ROAD_ITEM_PARK_SIDE = 6; public static final int ROAD_ITEM_CROSS_WALK = 7; public static final int ROAD_ITEM_BUS_AREA = 8; public static final int ROAD_ITEM_SCHOOL_AREA = 9; public static final int MODE_NONE = 0; public static final int EXAM_TYPE_LUKAO_Light = 3; @@ -159,6 +179,12 @@ private String rtkIP = "47.93.80.84"; public final int MAX_SCORE_DUCT = 20; private String coachID;//教练员身份证号码 //保存采集模式下的道路信息 private RoadInfo roadInfo; //当前采集线路的名称 private String routeLineName; private int routeItem= ROAD_ITEM_NONE; public static ExamPlatformData getInstance() { return ourInstance; @@ -480,4 +506,32 @@ mapInfoHeads.put(mapHeadInfo.getType(),mapHeadInfo); SPUtils.saveHashMap(mapInfoHeads,app.getAppContext()); } public void setRouteCollectRoadInfo(RoadInfo roadInfo) { this.roadInfo = roadInfo; } public RoadInfo getRouteCollectRoadInfo() { return roadInfo; } public void setRouteCollectLineName(String string) { this.routeLineName = string; } public String getRouteLineName(){ return routeLineName; } /** * 返回线路采集中当前采集的项目 * @return */ public int getCurrRouteItem() { return routeItem; } public void setCurrRouteItem(int roadItemChangeLane) { this.routeItem = roadItemChangeLane; } } app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
@@ -119,7 +119,7 @@ Toast.makeText(_mActivity, "发送信号配置", Toast.LENGTH_SHORT).show(); CThreadPoolExecutor.runInBackground(()->{ MyLog.i("click时间,发送信号"); DataInitKt.sendSignalConfigToRemote(app.getAppContext()); // DataInitKt.sendSignalConfigToRemote(app.getAppContext()); }); break; app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -7,15 +7,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import android.os.Handler; import android.os.Message; import android.text.Html; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; @@ -30,8 +26,7 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TableRow; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; @@ -107,6 +102,8 @@ private static final String TAG = TrainFragment.class.getSimpleName(); private static final int ROUTE_COLLECT = 5;//线路采集标志 private RouteBean currRouteBean; private ScrollView scrollView; public static SupportFragment newInstance() { @@ -131,6 +128,11 @@ private static final int ADD_DATA = 1; private TextView tv_speed,tv_total_score,tv_name ,tv_start_time,tv_coach_name; //主要用来展示线路采集时的信息 private TextView tv_route_collect_info; private StringBuilder stringBuilder = new StringBuilder(); private double speed=0.0; private ImageView iv_head,iv_coach_head; WokViewModel wokViewModel; @@ -143,6 +145,12 @@ private String content;//用以生成二维码的内容 RouteCollectController routeCollectController; //要插入数据库的路口信息 private RouteCross routeCross; //要插入数据库的触发线信息 private RouteTriggerLine routeTriggerLine; private List<Integer> btn_ids = new ArrayList<Integer>(); private HashMap<String,Integer> routeCollect_btn_ids = new HashMap<>(); @@ -375,6 +383,7 @@ }else{ if (exam_type == ROUTE_COLLECT){ items_score.setVisibility(View.GONE); items.setVisibility(View.GONE); route_collect.setVisibility(View.VISIBLE); @@ -397,6 +406,17 @@ mRouteBeans.clear(); if (routeBeans.size()>0){ for (int i = 0; i < routeBeans.size(); i++) { if (routeBeans.get(i).getCurrentCollectFlag()==1){ currRouteBean = routeBeans.get(i); ExamPlatformData.getInstance().setRouteCollectLineName(currRouteBean.getRouteName()); stringBuilder.delete(0,stringBuilder.length()); stringBuilder.append("当前采集线路名称:"+currRouteBean.getRouteName()); stringBuilder.append("\n"); tv_route_collect_info.setText(stringBuilder.toString()); break; } } mRouteBeans.addAll(routeBeans); } } @@ -553,6 +573,8 @@ private void initView(View view) { tv_route_collect_info = view.findViewById(R.id.tv_route_info); routeCollectController = new RouteCollectController(this); items = view.findViewById(R.id.items); items_score=view.findViewById(R.id.items_score); @@ -681,10 +703,12 @@ if (string.equalsIgnoreCase(bean.getRouteName())){ //有重名的线路,提示用户并不开启线路采集 Toast.makeText(_mActivity, "继续采集"+bean.getRouteName(), Toast.LENGTH_SHORT).show(); routeLineViewModel.updateCurrCollectFlag(string); flag = true; break; } } Toast.makeText(_mActivity, "线路采集", Toast.LENGTH_SHORT).show(); ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.ROUTE_MODE); exam_type = 5; @@ -693,8 +717,11 @@ items_score.setVisibility(View.GONE); route_collect.setVisibility(View.VISIBLE); if (!flag){ RouteBean routeBean = new RouteBean(); routeBean.setRouteName(string); routeBean.setCurrentCollectFlag(1); ExamPlatformData.getInstance().setRouteCollectLineName(string); routeLineViewModel.insertRouteBean(routeBean); } @@ -715,7 +742,7 @@ if (exam_type == ROUTE_COLLECT){ Toast.makeText(_mActivity, "结束采集", Toast.LENGTH_SHORT).show(); routeLineViewModel.updateCurrCollectFlag(""); ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.MODE_NONE); exam_type = 0; examStatusViewModel.updateStartExam(exam_type); @@ -791,6 +818,34 @@ Map.Entry<String, Integer> next = iterator.next(); if (next.getValue()== v.getId()){ routeCollectController.startCollect(); switch (next.getKey()){ case "超车": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_OVERTAKE); break; case "变更车道": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_CHANGE_LANE); break; case "直线行驶": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_STRAIGHT); break; case "加减档": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_OPERATE_GEAR); break; case "靠边停车": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_PARK_SIDE); break; case "通过人行横道": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_CROSS_WALK); break; case "通过学校区域": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_SCHOOL_AREA); break; case "通过公共汽车站": ExamPlatformData.getInstance().setCurrRouteItem(ExamPlatformData.ROAD_ITEM_BUS_AREA); break; } stringBuilder.append("当前采集项目:"+next.getKey()); stringBuilder.append("\n"); Toast.makeText(_mActivity, String.format("点击了%s",next.getKey()), Toast.LENGTH_SHORT).show(); break; } @@ -1050,26 +1105,128 @@ @Override public void beginCollectView() { Log.i(TAG,"BIND_RTK_INFO_MAP"); CThreadPoolExecutor.runOnMainThread(()->{ StatusDialog.with(_mActivity).setType(StatusDialog.Type.PROGRESS).setCancelable(true).show(); }); } @Override public void endCollectView() { Log.i(TAG,"endCollectView"); CThreadPoolExecutor.runOnMainThread(()->{ // StatusDialog.with(_mActivity).setType(StatusDialog.Type.PROGRESS).dismiss(); }); routeCollectController.endCollect(); } @Override public void routeItem(CollectPointResult collectPointResult) { Log.i(TAG,String.format("x=%f,y=%f",collectPointResult.getX(),collectPointResult.getY())); RoadInfo roadInfo = ExamPlatformData.getInstance().getRouteCollectRoadInfo(); if (roadInfo != null && roadInfo.getStatus()==1){ Log.i(TAG,"在某个路里面"+roadInfo.getRoad_id()); routeTriggerLine.setX(collectPointResult.getX()); routeTriggerLine.setY(collectPointResult.getY()); routeTriggerLine.setType(ExamPlatformData.getInstance().getCurrRouteItem()); routeTriggerLine.setRoad(roadInfo.getRoad_id()); routeTriggerLine.setRouteline_id(currRouteBean.getId()); routeLineViewModel.insertRouteTriggerLine(routeTriggerLine); } stringBuilder.append(String.format("x=%f,y=%f",collectPointResult.getX(),collectPointResult.getY())); stringBuilder.append("\n"); showRouteCollectInfoText(); } private void showRouteCollectInfoText(){ CThreadPoolExecutor.runOnMainThread(new Runnable() { @Override public void run() { tv_route_collect_info.setText(stringBuilder.toString()); } }); } @Override public void roadinfo(RoadInfo roadInfo) { Log.i(TAG,String.format("道路信息%s",roadInfo.toString())); //道路信息是没有进行本地保存的,如果崩溃的话,就有问题 ExamPlatformData.getInstance().setRouteCollectRoadInfo(roadInfo); stringBuilder.append(String.format("道路信息%s",roadInfo.toString())); stringBuilder.append("\n"); showRouteCollectInfoText(); } @Override public void roadcrossInfo(RoadCrossInfo roadCrossInfo) { Log.i(TAG,String.format("道路路口信息%s",roadCrossInfo.toString())); stringBuilder.append(String.format("道路路口信息%s",roadCrossInfo.toString())); stringBuilder.append("\n"); showRouteCollectInfoText(); CThreadPoolExecutor.runInBackground(new Runnable() { @Override public void run() { routeCross = new RouteCross(); routeCross.setRouteline_id(currRouteBean.getId()); routeCross.setRoad(roadCrossInfo.getRoad_id()); routeCross.setIdx(roadCrossInfo.getCrossing_index()); if (roadCrossInfo.getStatus() == 1){ CThreadPoolExecutor.runOnMainThread(new Runnable() { @Override public void run() { SelectDialogThree selectDialogThree = SelectDialogThree.newInstance("路口直行","路口左转弯","路口右转弯","路口掉头"); selectDialogThree.show(getFragmentManager(),"aaa"); selectDialogThree.setSelectedListener(new SelectDialogThree.OnSelectedListener() { @Override public void makeYourChoice(int res) { switch (res){ case 0: //直行 routeCross.setActive(1); break; case 1: //左转弯 routeCross.setActive(2); break; case 2: //右转弯 routeCross.setActive(4); break; case 3: //调头 routeCross.setActive(8); break; } if (res != SelectDialogThree.SELECT_NONE){ routeLineViewModel.insertRouteCross(routeCross); }else{ Log.i(TAG,"在路口没有做出选择"); } } }); } }); } } }); } private int getRouteLine_id() { for (int i = 0; i < mRouteBeans.size(); i++){ if (mRouteBeans.get(i).getRouteName().equalsIgnoreCase(ExamPlatformData.getInstance().getRouteLineName())){ return mRouteBeans.get(i).getId(); } } return -1; } } app/src/main/java/safeluck/drive/evaluation/routecollect/bean/RoadCrossInfo.java
@@ -41,4 +41,13 @@ public void setStatus(int status) { this.status = status; } @Override public String toString() { return "RoadCrossInfo{" + "road_id=" + road_id + ", crossing_index=" + crossing_index + ", status=" + status + '}'; } } app/src/main/java/safeluck/drive/evaluation/routecollect/bean/RoadInfo.java
@@ -31,4 +31,12 @@ public void setStatus(int status) { this.status = status; } @Override public String toString() { return "RoadInfo{" + "road_id=" + road_id + ", status=" + status + '}'; } } app/src/main/java/safeluck/drive/evaluation/widget/StatusDialog.java
@@ -167,5 +167,12 @@ return progressDialog; } public void dismiss() { if (P.type == -1) { throw new IllegalArgumentException("Please set type"); } progressDialog.dismiss(); } } } app/src/main/res/layout/layout_project_collect.xml
@@ -50,29 +50,30 @@ android:background="@drawable/btn_item_collect_bg" /> <Button android:text="@string/turn_around" android:layout_marginTop="@dimen/ui_margin_10dp" android:layout_columnWeight="1" android:layout_rowWeight="1" android:id="@+id/btn_route_3" <Button android:text="@string/crosswalk" android:layout_marginLeft="@dimen/ui_margin_20dp" android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:textColor="@color/color_ffffff" android:background="@drawable/btn_item_collect_bg" /> android:layout_width="wrap_content" android:layout_columnWeight="1" android:layout_marginTop="@dimen/ui_margin_10dp" <Button android:text="@string/by_crossing" android:layout_marginTop="@dimen/ui_margin_10dp" android:layout_rowWeight="1" android:id="@+id/btn_route_12" android:background="@drawable/btn_item_collect_bg"/> <Button android:text="@string/straight_line" android:textColor="@color/color_ffffff" android:layout_marginLeft="@dimen/ui_margin_20dp" android:id="@+id/btn_route_4" android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:background="@drawable/btn_item_collect_bg" android:layout_columnWeight="1" android:layout_rowWeight="1" /> android:layout_marginTop="@dimen/ui_margin_10dp" android:layout_marginLeft="@dimen/ui_margin_20dp" android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:id="@+id/btn_route_13" android:background="@drawable/btn_item_collect_bg"/> <Button android:text="@string/lane_change" android:layout_marginTop="@dimen/ui_margin_10dp" @@ -86,16 +87,6 @@ android:background="@drawable/btn_item_collect_bg" /> <Button android:text="@string/side_by_side" android:layout_columnWeight="1" android:layout_rowWeight="1" android:layout_marginLeft="@dimen/ui_margin_20dp" android:layout_marginRight="@dimen/ui_margin_20dp" android:id="@+id/btn_route_6" android:layout_marginBottom="10dp" android:textColor="@color/color_ffffff" android:background="@drawable/btn_item_collect_bg" /> <Button android:text="@string/over_take" android:layout_marginLeft="@dimen/ui_margin_20dp" @@ -127,11 +118,23 @@ android:layout_rowWeight="1" android:background="@drawable/btn_item_collect_bg"/> <Button android:text="@string/side_by_side" android:layout_columnWeight="1" android:layout_rowWeight="1" android:layout_marginLeft="@dimen/ui_margin_20dp" android:layout_marginRight="@dimen/ui_margin_20dp" android:id="@+id/btn_route_6" android:visibility="gone" android:layout_marginBottom="10dp" android:textColor="@color/color_ffffff" android:background="@drawable/btn_item_collect_bg" /> <Button android:text="@string/junction_left" android:layout_marginLeft="@dimen/ui_margin_20dp" android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:textColor="@color/color_ffffff" android:visibility="gone" android:id="@+id/btn_route_10" android:layout_columnWeight="1" android:layout_rowWeight="1" @@ -142,33 +145,56 @@ android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:textColor="@color/color_ffffff" android:visibility="gone" android:layout_columnWeight="1" android:id="@+id/btn_route_11" android:layout_rowWeight="1" android:background="@drawable/btn_item_collect_bg"/> <Button android:text="@string/crosswalk" <Button android:text="@string/turn_around" android:layout_columnWeight="1" android:layout_rowWeight="1" android:id="@+id/btn_route_3" android:visibility="gone" android:layout_marginLeft="@dimen/ui_margin_20dp" android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:textColor="@color/color_ffffff" android:layout_width="wrap_content" android:layout_columnWeight="1" android:layout_rowWeight="1" android:id="@+id/btn_route_12" android:background="@drawable/btn_item_collect_bg"/> android:background="@drawable/btn_item_collect_bg" /> <Button android:text="@string/straight_line" <Button android:text="@string/by_crossing" android:textColor="@color/color_ffffff" android:layout_columnWeight="1" android:layout_rowWeight="1" android:layout_marginLeft="@dimen/ui_margin_20dp" android:id="@+id/btn_route_4" android:visibility="gone" android:layout_marginRight="@dimen/ui_margin_20dp" android:layout_marginBottom="10dp" android:id="@+id/btn_route_13" android:background="@drawable/btn_item_collect_bg"/> android:background="@drawable/btn_item_collect_bg" android:layout_columnWeight="1" android:layout_rowWeight="1" /> </GridLayout> <ScrollView android:layout_width="380dp" android:id="@+id/scrollview" android:layout_height="match_parent"> <TextView android:layout_width="380dp" android:layout_height="wrap_content" android:background="@drawable/stu_score_title" android:id="@+id/tv_route_info" android:gravity="center_vertical" android:descendantFocusability="blocksDescendants" android:textColor="#FFFFFF" android:focusable="false" android:focusableInTouchMode="false" android:drawablePadding="5dp" android:paddingLeft="19dp" android:textSize="@dimen/network_train_textsize22px" android:text="项目列表"/> </ScrollView> </LinearLayout>