endian11
2020-09-16 6ec3c54a1c57b4356490a4821a2c6a7695448e22
数据库保存
3个文件已修改
17个文件已添加
858 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteBean.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteBeanDao.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteCross.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteCrossDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteInitWorker.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteLineRepository.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteLineViewModel.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteTriggerLine.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteTriggerLineDao.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/RouteCollect.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/CollectPointResult.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/ICollectView.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/ILoadListener.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/IRouteCollectInterface.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/IRouteRemotePointCallback.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/RouteCollectController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/routecollect/impl/RouteModel.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_train_fragment.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -17,6 +17,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import okhttp3.Route;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatus;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatusDao;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatusInitWork;
@@ -39,6 +40,13 @@
import safeluck.drive.evaluation.DB.failitems.LuKaoFailedProj;
import safeluck.drive.evaluation.DB.gps.GPSInfo;
import safeluck.drive.evaluation.DB.gps.GpsInfoDao;
import safeluck.drive.evaluation.DB.route.RouteBean;
import safeluck.drive.evaluation.DB.route.RouteBeanDao;
import safeluck.drive.evaluation.DB.route.RouteCross;
import safeluck.drive.evaluation.DB.route.RouteCrossDao;
import safeluck.drive.evaluation.DB.route.RouteInitWorker;
import safeluck.drive.evaluation.DB.route.RouteTriggerLine;
import safeluck.drive.evaluation.DB.route.RouteTriggerLineDao;
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigDao;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigWork;
@@ -53,10 +61,14 @@
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class,LuKaoFailedProj.class, CriteriaForII.class, CriteriaForIII.class,RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class},version = 1,exportSchema = false)
@Database(entities = {Student.class, CriteriaForI.class, FailedProj.class,LuKaoFailedProj.class, CriteriaForII.class, CriteriaForIII.class,RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class
        ,RouteBean.class, RouteCross.class, RouteTriggerLine.class},version = 1,exportSchema = false)
public abstract class WorkRoomDataBase extends RoomDatabase {
    private static final String TAG = "WorkRoomDataBase";
    public abstract StudentDao getstudentDao();
    public abstract RouteBeanDao getRouteBeanDao();
    public abstract RouteCrossDao getRouteCrooDao();
    public abstract RouteTriggerLineDao getRouteTriggerLineDao();
    //科目二 I类考场评判表
    public abstract CriteriaIDao getCriteriaIDao();
@@ -98,6 +110,7 @@
                                    OneTimeWorkRequest appStatusInitWork = OneTimeWorkRequest.from(AppStatusInitWork.class);
                                    OneTimeWorkRequest examStatusInitWorker = OneTimeWorkRequest.from(ExamStatusInitWorker.class);
                                    OneTimeWorkRequest signalConigInitWorker = OneTimeWorkRequest.from(SignalConfigInitWorker.class);
                                    OneTimeWorkRequest routeInitWorker = OneTimeWorkRequest.from(RouteInitWorker.class);
                                    Log.i(TAG, "onCreate: 创建数据库后建立数据表插入数据");
//                                    WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest);
//                                    WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest1);
@@ -112,7 +125,7 @@
//单路径执行,可以实现更加复杂的多路径执行方式
                                    WorkContinuation chain1= WorkManager.getInstance(mContext).beginWith(Arrays.asList(oneTimeWorkRequest,oneTimeWorkRequest1))
                                            .then(mCriteriaForIIIWorker).then(oneTimeWorkRequest3);
                                    WorkContinuation chain2 = WorkManager.getInstance(mContext).beginWith(Arrays.asList(RTKConfigWorkRequest,appStatusInitWork,signalConigInitWorker))
                                    WorkContinuation chain2 = WorkManager.getInstance(mContext).beginWith(Arrays.asList(RTKConfigWorkRequest,appStatusInitWork,signalConigInitWorker,routeInitWorker))
                                            .then(oneTimeWorkRequest2).then(examStatusInitWorker);
                                    WorkContinuation chain3 = WorkContinuation.combine(Arrays.asList(chain1,chain2));
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteBean.java
New file
@@ -0,0 +1,33 @@
package safeluck.drive.evaluation.DB.route;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 15:44:19
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Entity
public class RouteBean {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String routeName;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getRouteName() {
        return routeName;
    }
    public void setRouteName(String routeName) {
        this.routeName = routeName;
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteBeanDao.java
New file
@@ -0,0 +1,24 @@
package safeluck.drive.evaluation.DB.route;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import java.util.List;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 15:49:36
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Dao
public interface RouteBeanDao {
    @Query("SELECT * FROM RouteBean")
    LiveData<List<RouteBean>> getAllRoutes();
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertRouteBean(RouteBean routeBean);
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteCross.java
New file
@@ -0,0 +1,62 @@
package safeluck.drive.evaluation.DB.route;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 15:13:34
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Entity
public class RouteCross {
    //外键  跟线路名称id 保持一致
    private int road;
    private int idx;
    private int active;
    private int routeline_id;
    @PrimaryKey(autoGenerate = true)
    private int id;
    public int getRoad() {
        return road;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setRoad(int road) {
        this.road = road;
    }
    public int getIdx() {
        return idx;
    }
    public void setIdx(int idx) {
        this.idx = idx;
    }
    public int getActive() {
        return active;
    }
    public void setActive(int active) {
        this.active = active;
    }
    public int getRouteline_id() {
        return routeline_id;
    }
    public void setRouteline_id(int routeline_id) {
        this.routeline_id = routeline_id;
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteCrossDao.java
New file
@@ -0,0 +1,23 @@
package safeluck.drive.evaluation.DB.route;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import java.util.List;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 15:41:55
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Dao
public interface RouteCrossDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertRouteCross(RouteCross routeCross);
    @Query("SELECT * FROM RouteCross where routeline_id = :routeline_id")
    List<RouteCross> getAllRouteCross(int routeline_id);
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteInitWorker.java
New file
@@ -0,0 +1,83 @@
package safeluck.drive.evaluation.DB.route;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.List;
import okhttp3.Route;
import safeluck.drive.evaluation.DB.Student;
import safeluck.drive.evaluation.DB.WorkRoomDataBase;
import safeluck.drive.evaluation.bean.RouteCollect;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 16:00:40
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class RouteInitWorker extends Worker {
    private static final String TAG = "RouteInitWorker";
    public RouteInitWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }
    @NonNull
    @Override
    public Result doWork() {
        Log.i(TAG, "doWork: "+Thread.currentThread().getId());
        try {
            InputStream inputStream = getApplicationContext().getAssets().open("routeline.json");
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            JsonReader jsonReader = new JsonReader(inputStreamReader);
            Gson gson = new Gson();
            Type type = new TypeToken<List<RouteCollect>>(){}.getType();
            List<RouteCollect> mstus=gson.fromJson(jsonReader,   type);
            for (int i = 0; i < mstus.size(); i++) {
                RouteBean routeBean = new RouteBean();
                routeBean.setRouteName(mstus.get(i).getName());
                WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getRouteBeanDao().insertRouteBean(routeBean);
                RouteCollect routeCollect = mstus.get(i);
                List<RouteCollect.CrossingActiveBean>crossingActiveBeans = routeCollect.getCrossing_active();
                List<RouteCollect.TriggerLineBean> triggerLineBeans = routeCollect.getTrigger_line();
                for (RouteCollect.TriggerLineBean bean:triggerLineBeans){
                    RouteTriggerLine routeTriggerLine = new RouteTriggerLine();
                    routeTriggerLine.setRoad(bean.getRoad());
                    routeTriggerLine.setRouteline_id(i+1);
                    routeTriggerLine.setType(bean.getType());
                    routeTriggerLine.setX(bean.getX_y().get(0));
                    routeTriggerLine.setY(bean.getX_y().get(1));
                    WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getRouteTriggerLineDao().insertTriggerLine(routeTriggerLine);
                }
                for (RouteCollect.CrossingActiveBean bean:crossingActiveBeans){
                    RouteCross routeCross = new RouteCross();
                    routeCross.setActive(bean.getActive());
                    routeCross.setIdx(bean.getIdx());
                    routeCross.setRoad(bean.getRoad());
                    routeCross.setRouteline_id(i+1);
                    WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getRouteCrooDao().insertRouteCross(routeCross);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            return Result.failure();
        }
        return Result.success();
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteLineRepository.java
New file
@@ -0,0 +1,75 @@
package safeluck.drive.evaluation.DB.route;
import android.app.Application;
import androidx.lifecycle.LiveData;
import java.util.List;
import safeluck.drive.evaluation.DB.Student;
import safeluck.drive.evaluation.DB.StudentDao;
import safeluck.drive.evaluation.DB.WorkRoomDataBase;
/**
 * MyApplication2
 * Created by lzw on 2019/11/25. 11:20:26
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class RouteLineRepository {
    private RouteCrossDao routeCrossDao;
    private RouteBeanDao routeBeanDao;
    private RouteTriggerLineDao routeTriggerLineDao;
    private List<RouteCross> routeCrosses;
    private List<RouteTriggerLine> routeTriggerLines;
    private LiveData<List<RouteBean>> routeBeans;
    public RouteLineRepository(Application application){
        WorkRoomDataBase db = WorkRoomDataBase.getWorkRoomDataBase(application);
        routeCrossDao = db.getRouteCrooDao();
        routeBeanDao = db.getRouteBeanDao();
        routeTriggerLineDao = db.getRouteTriggerLineDao();
        routeBeans = routeBeanDao.getAllRoutes();
    }
    public List<RouteCross> getAllRouteCross(int routeId){
        routeCrosses = routeCrossDao.getAllRouteCross(routeId);
        return routeCrosses;
    }
    public List<RouteTriggerLine> getAllRouteTriggerlines(int routeId){
        routeTriggerLines = routeTriggerLineDao.getAllRouteTriggerLine(routeId);
        return routeTriggerLines;
    }
    void insertRouteCross(final RouteCross routeCross){
        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
            @Override
            public void run() {
                routeCrossDao.insertRouteCross(routeCross);
            }
        });
    }
    void insertRouteTriggerLine(final RouteTriggerLine routeTriggerLine){
        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
            @Override
            public void run() {
                routeTriggerLineDao.insertTriggerLine(routeTriggerLine);
            }
        });
    }
    void insertRouteBean(final RouteBean routeBean){
        WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() {
            @Override
            public void run() {
                routeBeanDao.insertRouteBean(routeBean);
            }
        });
    }
    public LiveData<List<RouteBean>> getAllRouteBeans() {
        return routeBeans;
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteLineViewModel.java
New file
@@ -0,0 +1,53 @@
package safeluck.drive.evaluation.DB.route;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import java.util.List;
import safeluck.drive.evaluation.DB.Student;
import safeluck.drive.evaluation.DB.WorkRepository;
/**
 * MyApplication2
 * Created by lzw on 2019/11/25. 11:34:24
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class RouteLineViewModel extends AndroidViewModel {
    public RouteLineViewModel(@NonNull Application application) {
        super(application);
        workRepository = new RouteLineRepository(application);
        routeBeans = workRepository.getAllRouteBeans();
    }
    private RouteLineRepository workRepository;
//    private LiveData<List<RouteTriggerLine>>  routeTriggerLines;
//    private  LiveData<List<RouteCross>> routeCrosses;
    private  LiveData<List<RouteBean>> routeBeans;
//    public LiveData<List<RouteTriggerLine>> getAllRouteTriggerlines() {
//        return routeTriggerLines;
//    }
    public LiveData<List<RouteBean>> getRouteBeans() {
        return routeBeans;
    }
    public void insertRouteCross(RouteCross routeCross){
        workRepository.insertRouteCross(routeCross);
    }
    public void insertRouteBean(RouteBean routeBean){
        workRepository.insertRouteBean(routeBean);
    }
    public void insertRouteTriggerLine(RouteTriggerLine routeTriggerLine){
        workRepository.insertRouteTriggerLine(routeTriggerLine);
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteTriggerLine.java
New file
@@ -0,0 +1,74 @@
package safeluck.drive.evaluation.DB.route;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
import java.util.List;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 15:06:32
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Entity
public class RouteTriggerLine {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private int road;
    private int type;
    private double x;
    private double y;
    //外键  跟线路名称id 保持一致
    private int routeline_id;
    public int getRouteline_id() {
        return routeline_id;
    }
    public void setRouteline_id(int routeline_id) {
        this.routeline_id = routeline_id;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getRoad() {
        return road;
    }
    public void setRoad(int road) {
        this.road = road;
    }
    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }
    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }
}
app/src/main/java/safeluck/drive/evaluation/DB/route/RouteTriggerLineDao.java
New file
@@ -0,0 +1,24 @@
package safeluck.drive.evaluation.DB.route;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import java.util.List;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 15:09:49
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
@Dao
public interface RouteTriggerLineDao {
    @Query("Select * from RouteTriggerLine where routeline_id =:routeline_id")
    List<RouteTriggerLine> getAllRouteTriggerLine(int routeline_id);
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertTriggerLine(RouteTriggerLine routeTriggerLine);
}
app/src/main/java/safeluck/drive/evaluation/bean/RouteCollect.java
New file
@@ -0,0 +1,122 @@
package safeluck.drive.evaluation.bean;
import java.util.List;
/**
 * DriveJudge
 *
 * 主要用于教练踩点,  一个RouteCollect就是一条线路
 * 可以有多个触发线,多个路口
 * Created by lzw on 2020/9/16. 10:03:06
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class RouteCollect {
    /**
     * name : 线路一
     * crossing_active : [{"road":2,"idx":0,"active":1},{"road":2,"idx":1,"active":1}]
     * trigger_line : [{"x_y":[333.365,696.3354],"road":2,"type":2},{"x_y":[333.365,696.3354],"road":5,"type":4},{"x_y":[333.365,696.3354],"road":3,"type":3},{"x_y":[333.365,696.3354],"road":6,"type":1}]
     */
    private String name;
    private List<CrossingActiveBean> crossing_active;
    private List<TriggerLineBean> trigger_line;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<CrossingActiveBean> getCrossing_active() {
        return crossing_active;
    }
    public void setCrossing_active(List<CrossingActiveBean> crossing_active) {
        this.crossing_active = crossing_active;
    }
    public List<TriggerLineBean> getTrigger_line() {
        return trigger_line;
    }
    public void setTrigger_line(List<TriggerLineBean> trigger_line) {
        this.trigger_line = trigger_line;
    }
    public static class CrossingActiveBean {
        /**
         * road : 2
         * idx : 0
         * active : 1
         */
        private int road;
        private int idx;
        private int active;
        public int getRoad() {
            return road;
        }
        public void setRoad(int road) {
            this.road = road;
        }
        public int getIdx() {
            return idx;
        }
        public void setIdx(int idx) {
            this.idx = idx;
        }
        public int getActive() {
            return active;
        }
        public void setActive(int active) {
            this.active = active;
        }
    }
    public static class TriggerLineBean {
        /**
         * x_y : [333.365,696.3354]
         * road : 2
         * type : 2
         */
        private int road;
        private int type;
        private List<Double> x_y;
        public int getRoad() {
            return road;
        }
        public void setRoad(int road) {
            this.road = road;
        }
        public int getType() {
            return type;
        }
        public void setType(int type) {
            this.type = type;
        }
        public List<Double> getX_y() {
            return x_y;
        }
        public void setX_y(List<Double> x_y) {
            this.x_y = x_y;
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -52,10 +52,12 @@
import safeluck.drive.evaluation.Constant;
import safeluck.drive.evaluation.DB.Student;
import safeluck.drive.evaluation.DB.WokViewModel;
import safeluck.drive.evaluation.DB.WorkRoomDataBase;
import safeluck.drive.evaluation.DB.exam_status.ExamStatus;
import safeluck.drive.evaluation.DB.exam_status.ExamStatusViewModel;
import safeluck.drive.evaluation.DB.failitems.FailedProjViewModel;
import safeluck.drive.evaluation.DB.failitems.FailedProj_select;
import safeluck.drive.evaluation.DB.route.RouteLineViewModel;
import safeluck.drive.evaluation.MainActivity;
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.adapter.ScoreAdapter;
@@ -75,6 +77,7 @@
import safeluck.drive.evaluation.platformMessage.JKMessage0202;
import safeluck.drive.evaluation.platformMessage.JKMessage0204;
import safeluck.drive.evaluation.platformMessage.PlatFormConstant;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.widget.StatusDialog;
@@ -87,19 +90,22 @@
public class TrainFragment extends SupportFragment implements View.OnClickListener {
    private static final String TAG = TrainFragment.class.getSimpleName();
    private static final int ROUTE_COLLECT = 5;//线路采集标志
    public static SupportFragment newInstance() {
        return new TrainFragment();
    }
    private int exam_type = 2;//2 场地;3 道路,模拟夜考;4 道路,实际夜考;
    private View route_collect;
    private View items,items_score;
    private int exam_type = 2;//2 场地;3 道路,模拟夜考;4 道路,实际夜考 5,线路采集;
    private ListView mListView;
    private Button btn_start_exam;
    private TextView tv_stop;//呼叫请求(结束考试)
    private ScoreAdapter mScoreAdapter;
    private Button av_zhijiao, av_curve, av_park, av_podao;
    private Button houseView;
    private RouteLineViewModel routeLineViewModel;
    private List<ExamStatus> examStatusList = new ArrayList<>();
    private List<String> item_conents = new ArrayList<>();//坡道定点停车和起步
@@ -333,14 +339,28 @@
    private void showChangKaoOrLukao(int exam_type){
        if (exam_type > ExamPlatformData.EXAM_TYPE_ChangKAO){
            //show路考
            view.findViewById(R.id.lukao).setVisibility(View.VISIBLE);
            view.findViewById(R.id.changkao).setVisibility(View.GONE);
        }else{
        if (exam_type >= ExamPlatformData.EXAM_TYPE_ChangKAO && exam_type<ROUTE_COLLECT){
            items_score.setVisibility(View.VISIBLE);
            items.setVisibility(View.VISIBLE);
            route_collect.setVisibility(View.GONE);
            if(exam_type == ExamPlatformData.EXAM_TYPE_ChangKAO) {
            //show场考
            view.findViewById(R.id.lukao).setVisibility(View.GONE);
            view.findViewById(R.id.changkao).setVisibility(View.VISIBLE);
            }else{
                //show路考
                view.findViewById(R.id.lukao).setVisibility(View.VISIBLE);
                view.findViewById(R.id.changkao).setVisibility(View.GONE);
            }
        }else{
            if (exam_type == ROUTE_COLLECT){
                items_score.setVisibility(View.GONE);
                items.setVisibility(View.GONE);
                route_collect.setVisibility(View.VISIBLE);
            }
        }
    }
    View view;
@@ -351,7 +371,7 @@
        initView(view);
        failedProjViewModel = ViewModelProviders.of(this).get(FailedProjViewModel.class);
        routeLineViewModel = ViewModelProviders.of(this).get(RouteLineViewModel.class);
        failedProjViewModel.getFailedProjectsForIII(Constant.TEST_STU_ID).observe(this, new Observer<List<FailedProj_select>>() {
            @Override
@@ -457,7 +477,12 @@
                    mHandler.obtainMessage(ADD_DATA).sendToTarget();
                    exam_type = examStatus.get(0).getStartExam();
                    if (exam_type != Constant.NONE_BEEN_START_EXAM){
                        if (ROUTE_COLLECT == exam_type){
                            btn_start_exam.setText("结束采集");
                        }else{
                        btn_start_exam.setText("结束训练");
                        }
                    }else{
                        btn_start_exam.setText("开始训练");
                    }
@@ -499,6 +524,9 @@
    private void initView(View view) {
        items = view.findViewById(R.id.items);
        items_score=view.findViewById(R.id.items_score);
        route_collect=view.findViewById(R.id.route_collect);
        Log.i(TAG,"currTopFragment="+getTopFragment().getClass().getSimpleName());
        if (HomeFragment.class.getSimpleName().equals(getTopFragment().getClass().getSimpleName())){
            ((MainActivity)_mActivity).viewtitle.setVisibility(View.GONE);
@@ -588,12 +616,30 @@
                                sendJK0202(4);
                            }else{
                                Toast.makeText(_mActivity, "线路采集", Toast.LENGTH_SHORT).show();
                                ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.TRAINING_MODE);
                                exam_type = 5;
                                examStatusViewModel.updateStartExam(exam_type);
                                items.setVisibility(View.GONE);
                                items_score.setVisibility(View.GONE);
                                route_collect.setVisibility(View.VISIBLE);
                            }
                        }
                    });
                    selectDialog.show(getFragmentManager(),"selectdialog");
                }else{
                    if (exam_type == ROUTE_COLLECT){
                        Toast.makeText(_mActivity, "结束采集", Toast.LENGTH_SHORT).show();
                        ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.MODE_NONE);
                        exam_type = 0;
                        examStatusViewModel.updateStartExam(exam_type);
                        items.setVisibility(View.VISIBLE);
                        items_score.setVisibility(View.VISIBLE);
                        route_collect.setVisibility(View.GONE);
                    }else{
                    stopExam();
                    }
                }
@@ -696,7 +742,10 @@
    }
    private void sendJK0202(int type) {
        //隐藏采集项目
        items_score.setVisibility(View.VISIBLE);
        items.setVisibility(View.VISIBLE);
    route_collect.setVisibility(View.GONE);
        final JKMessage0202 jkMessage0202 = new JKMessage0202();
        exam_type = type;
        ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.TRAINING_MODE);
app/src/main/java/safeluck/drive/evaluation/routecollect/CollectPointResult.java
New file
@@ -0,0 +1,37 @@
package safeluck.drive.evaluation.routecollect;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 10:11:08
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class CollectPointResult {
    private double x,y,z;
    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }
    public double getZ() {
        return z;
    }
    public void setZ(double z) {
        this.z = z;
    }
}
app/src/main/java/safeluck/drive/evaluation/routecollect/ICollectView.java
New file
@@ -0,0 +1,18 @@
package safeluck.drive.evaluation.routecollect;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 10:12:23
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public interface ICollectView {
    void beginCollectView();
    void endCollectView();
    /**
     * 完成一项目的采集
     * @param collectPointResult
     */
    void routeItem(CollectPointResult collectPointResult );
}
app/src/main/java/safeluck/drive/evaluation/routecollect/ILoadListener.java
New file
@@ -0,0 +1,12 @@
package safeluck.drive.evaluation.routecollect;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 10:54:19
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public interface ILoadListener {
    void finishCollectItem(CollectPointResult collectPointResult);
}
app/src/main/java/safeluck/drive/evaluation/routecollect/IRouteCollectInterface.java
New file
@@ -0,0 +1,19 @@
package safeluck.drive.evaluation.routecollect;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 10:08:53
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public interface IRouteCollectInterface {
    /**
     * 开始踩点  不断的返回点坐标
     */
    void startCollect(ILoadListener listener);
    /**
     * 告诉远程服务 停止采点,不要一直返点的坐标了
     */
    void endCollect();
}
app/src/main/java/safeluck/drive/evaluation/routecollect/IRouteRemotePointCallback.java
New file
@@ -0,0 +1,13 @@
package safeluck.drive.evaluation.routecollect;
/**
 * 存放c给的回调,
 * dge
 * Created by lzw on 2020/9/16. 10:46:00
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public interface IRouteRemotePointCallback {
    void javaPoint(final int qf, final double x, final double y, final double z,final double heading,
                   final double pitch,final double roll);
}
app/src/main/java/safeluck/drive/evaluation/routecollect/RouteCollectController.java
New file
@@ -0,0 +1,44 @@
package safeluck.drive.evaluation.routecollect;
import safeluck.drive.evaluation.routecollect.impl.RouteModel;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 10:08:18
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class RouteCollectController implements ILoadListener {
    ICollectView iCollectView;
    RouteModel routeModel;
    public void RouteCollectController(ICollectView collectView){
        this.iCollectView = collectView;
        routeModel = new RouteModel();
    }
    public void startCollect() {
        if (iCollectView != null){
            iCollectView.beginCollectView();
        }
        if (routeModel != null){
            routeModel.startCollect(this);
        }
    }
    public void endCollect(){
        if (iCollectView != null){
            iCollectView.endCollectView();
        }
    }
    @Override
    public void finishCollectItem(CollectPointResult collectPointResult) {
        if (iCollectView != null){
            iCollectView.endCollectView();
            iCollectView.routeItem(collectPointResult);
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/routecollect/impl/RouteModel.java
New file
@@ -0,0 +1,48 @@
package safeluck.drive.evaluation.routecollect.impl;
import com.anyun.exam.lib.IRemoteInterface;
import safeluck.drive.evaluation.routecollect.CollectPointResult;
import safeluck.drive.evaluation.routecollect.ILoadListener;
import safeluck.drive.evaluation.routecollect.IRouteCollectInterface;
import safeluck.drive.evaluation.routecollect.IRouteRemotePointCallback;
/**
 * DriveJudge
 * Created by lzw on 2020/9/16. 10:38:39
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class RouteModel implements IRouteCollectInterface,IRouteRemotePointCallback {
    ILoadListener iLoadListener;
    private double sx=120.0,sy=10.03;
    @Override
    public void startCollect(ILoadListener listener) {
        iLoadListener = listener;
        //调用AYSdk 方法启动采点
        //set IRouteRemotePointCallback
        //如果采用application的callback ,可能需要注册一个CEventLisntener
    }
    /**
     * 停止采点
     */
    @Override
    public void endCollect() {
        //如果采用application的callback ,可能需要反注册一个CEventLisntener 解绑
    }
    @Override
    public void javaPoint(int qf, double x, double y, double z, double heading, double pitch, double roll) {
        if (iLoadListener != null){
            CollectPointResult collectPointResult = new CollectPointResult();
            collectPointResult.setX(sx);
            collectPointResult.setY(sy);
            iLoadListener.finishCollectItem(collectPointResult);
        }
    }
}
app/src/main/res/layout/layout_train_fragment.xml
@@ -12,10 +12,12 @@
            android:id="@+id/ll"
            android:orientation="vertical">
            <include  android:layout_marginBottom="2dp"  android:layout_width="match_parent" android:layout_height="110dp" android:id="@+id/profile" layout="@layout/profile_layout"/>
            <include android:layout_marginBottom="2dp"  android:layout_width="match_parent" android:layout_height="140dp"  layout="@layout/layout_net_train" android:visibility="gone" />
            <include android:layout_marginBottom="2dp"  android:layout_width="match_parent" android:layout_height="140dp"  layout="@layout/layout_net_train"  android:id="@+id/items"/>
            <include android:layout_marginBottom="2dp" android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/layout_stu_score" android:visibility="gone"/>
            <include android:layout_marginBottom="2dp" android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/layout_project_collect"/>
            <include android:layout_marginBottom="2dp" android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/layout_stu_score"  android:id="@+id/items_score"/>
            <include android:layout_marginBottom="2dp" android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/layout_project_collect"
                android:id="@+id/route_collect"
                android:visibility="gone"/>
        </LinearLayout>