| | |
| | | package safeluck.drive.evaluation.DB.rtktb |
| | | |
| | | import android.content.Context |
| | | import android.os.Looper |
| | | import android.text.TextUtils |
| | | import android.util.Log |
| | | import android.widget.Toast |
| | | import androidx.work.Worker |
| | | import androidx.work.WorkerParameters |
| | | import com.anyun.exam.lib.AYSdk |
| | | import com.anyun.exam.lib.MyLog |
| | | import com.google.gson.Gson |
| | | import okhttp3.ResponseBody |
| | | import org.json.JSONException |
| | | import org.json.JSONObject |
| | | import retrofit2.Call |
| | | import retrofit2.Callback |
| | | import retrofit2.Response |
| | | import safeluck.drive.evaluation.DB.Constant |
| | | import safeluck.drive.evaluation.DB.WorkRoomDataBase |
| | | import safeluck.drive.evaluation.bean.ExamPlatformData |
| | | import safeluck.drive.evaluation.httpmodule.HttpCarRespBean |
| | | import safeluck.drive.evaluation.httpmodule.HttpRequetBean |
| | | import safeluck.drive.evaluation.httpmodule.RetrofitCreator.Companion.getRestService |
| | | import safeluck.drive.evaluation.im.IMSClientBootstrap |
| | | import safeluck.drive.evaluation.platformMessage.PlatFormConstant |
| | | import safeluck.drive.evaluation.util.FileUtil |
| | | import java.io.IOException |
| | | |
| | | class RTKConfigUpdateWorker(context:Context, workerParams: WorkerParameters) :Worker(context, workerParams){ |
| | | |
| | |
| | | */ |
| | | phone = sn |
| | | Log.i(TAG,"phone="+phone) |
| | | |
| | | if (!FileUtil.isMapExist(applicationContext,"map.json")){ |
| | | MyLog.i("地图文件不存在,去平台取") |
| | | getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, "place")).enqueue(object : Callback<ResponseBody> { |
| | | override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) { |
| | | var str: String? = null |
| | | try { |
| | | str = response.body()!!.string() |
| | | } catch (e: IOException) { |
| | | e.printStackTrace() |
| | | } |
| | | Log.i(TAG, "服务器返回的body=$str") |
| | | if (Looper.myLooper() == Looper.getMainLooper()) { |
| | | Toast.makeText(applicationContext, "主线程", Toast.LENGTH_SHORT).show() |
| | | } |
| | | } |
| | | |
| | | override fun onFailure(call: Call<ResponseBody>, t: Throwable) { |
| | | Log.i(TAG, t.localizedMessage) |
| | | } |
| | | }) |
| | | } |
| | | if (!FileUtil.isMapExist(applicationContext,"car.json")){ |
| | | MyLog.i("车辆模型文件不存在,去平台取") |
| | | getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, "car")).enqueue(object : Callback<ResponseBody> { |
| | | override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) { |
| | | var str: String? = null |
| | | try { |
| | | str = response.body()!!.string() |
| | | Log.i(TAG, "服务器返回的body=$str") |
| | | val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java) |
| | | if (car.isResult){ |
| | | if (car.data !=null){ |
| | | str = gson.toJson(car.data.map_json) |
| | | Log.i(TAG, "解析之后的车模型=$str") |
| | | FileUtil.writeTxtFileToSD(applicationContext,"car.json",str,"") |
| | | } |
| | | } |
| | | } catch (e: IOException) { |
| | | e.printStackTrace() |
| | | } |
| | | |
| | | if (Looper.myLooper() == Looper.getMainLooper()) { |
| | | Toast.makeText(applicationContext, "主线程", Toast.LENGTH_SHORT).show() |
| | | } |
| | | } |
| | | |
| | | override fun onFailure(call: Call<ResponseBody>, t: Throwable) { |
| | | Log.i(TAG, t.localizedMessage) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | MyLog.i(PlatFormConstant.TAG,"重置TCP连接") |
| | | IMSClientBootstrap.getInstance().resetConnect(); |
| | | } |
| | |
| | | //2. 如果不能再就去下载 |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | switch (cmd) { |
| | | case Constant.NDK_START: |
| | | // sendVechileInfo(); |
| | | // sendMapInfo(); |
| | | OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class); |
| | | OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class); |
| | | WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue(); |
| | |
| | | try { |
| | | JSONObject jsonObject =new JSONObject((String)json); |
| | | int errCode = jsonObject.getInt("error"); |
| | | MyLog.i("收到考试应答错误码="+errCode); |
| | | switch (errCode){ |
| | | case -1: |
| | | sendMapInfo(); |
| | | break; |
| | | // sendMapInfo(); |
| | | // break; |
| | | case -2: |
| | | |
| | | sendVechileInfo(); |
| | | break; |
| | | // sendVechileInfo(); |
| | | // break; |
| | | case -3: |
| | | OneTimeWorkRequest examStatausOutWorker1 = OneTimeWorkRequest.from(ExamStatusOutWorker.class); |
| | | WorkManager.getInstance(getApplicationContext()).enqueue(examStatausOutWorker1); |
| | | break; |
| | | } |
| | | } catch (JSONException e) { |
| | |
| | | import safeluck.drive.evaluation.R; |
| | | import safeluck.drive.evaluation.bean.ExamMap; |
| | | import safeluck.drive.evaluation.bean.ExamPlatformData; |
| | | import safeluck.drive.evaluation.bean.Point; |
| | | import safeluck.drive.evaluation.bean.RealTimeCarPos; |
| | | import safeluck.drive.evaluation.cEventCenter.CEventCenter; |
| | | import safeluck.drive.evaluation.cEventCenter.ICEventListener; |
| | | import safeluck.drive.evaluation.util.CThreadPoolExecutor; |
| | | import safeluck.drive.evaluation.util.FileUtil; |
| | | import safeluck.drive.evaluation.util.Utils; |
| | | |
| | | |
| | | /** |
| | |
| | | if (canvas2 == null || bmp == null) { |
| | | return; |
| | | } |
| | | // _mActivity.runOnUiThread(new Runnable() { |
| | | // @Override |
| | | // public void run() { |
| | | double base_x = 300, base_y = 20; |
| | | double max_x = 0, min_x = 0, max_y = 0, min_y = 0; |
| | | |
| | | Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length); |
| | | Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length+"map other length="+map_other.length); |
| | | |
| | | for (int i = 0; i < map.length; i++) { |
| | | if (i == 0) { |
| | |
| | | |
| | | Log.d(TAG, "DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); |
| | | |
| | | for (int i = 0; i < car.length; i++) { |
| | | if (max_x < car[i][0]) { |
| | | max_x = car[i][0]; |
| | | } |
| | | if (min_x > car[i][0]) { |
| | | min_x = car[i][0]; |
| | | } |
| | | if (max_y < car[i][1]) { |
| | | max_y = car[i][1]; |
| | | } |
| | | if (min_y > car[i][1]) { |
| | | min_y = car[i][1]; |
| | | } |
| | | } |
| | | // for (int i = 0; i < car.length; i++) { |
| | | // if (max_x < car[i][0]) { |
| | | // max_x = car[i][0]; |
| | | // } |
| | | // if (min_x > car[i][0]) { |
| | | // min_x = car[i][0]; |
| | | // } |
| | | // if (max_y < car[i][1]) { |
| | | // max_y = car[i][1]; |
| | | // } |
| | | // if (min_y > car[i][1]) { |
| | | // min_y = car[i][1]; |
| | | // } |
| | | // } |
| | | |
| | | Log.d(TAG, "DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); |
| | | |
| | |
| | | } |
| | | |
| | | Log.d(TAG, "DrawMap scale_x " + scale_x + " scale_y " + scale_y); |
| | | |
| | | |
| | | canvas2.drawColor(Color.WHITE); |
| | | |
| | |
| | | map_id = timeCarPos.getMap_id(); |
| | | |
| | | List<Double> mainAnt = timeCarPos.getMain_ant(); |
| | | Point mainPoint = new Point(mainAnt.get(0), mainAnt.get(1)); |
| | | List<Integer> tire1 = timeCarPos.getLeft_front_tire(); |
| | | List<Integer> tire2 = timeCarPos.getRight_front_tire(); |
| | | List<Integer> tire3 = timeCarPos.getLeft_rear_tire(); |
| | |
| | | if ((k % 2) == 0) { |
| | | map[map_line][0] = xys.get(k); |
| | | } else { |
| | | double value = 0 - xys.get(k); |
| | | double value = xys.get(k); |
| | | Log.i(TAG, "onCEvent: map新值=" + value + " 位置:" + k); |
| | | map[map_line][1] = value; |
| | | map_line++; |
| | | } |
| | | } |
| | | Log.i(TAG,String.format("下面开始旋转,map.length=%d",map.length)); |
| | | Point point2 = new Point(map[0][0],map[0][1]); |
| | | double deg = 0.0; |
| | | switch (map.length){ |
| | | |
| | | case 8: |
| | | Point point1 = new Point(map[map.length-1][0],map[map.length-1][1]); |
| | | deg = Utils.YawOf(point2,point1); |
| | | deg +=270; |
| | | for (int k = 0; k < map.length; k++) { |
| | | Point point11 = new Point(map[k][0],map[k][1]); |
| | | Point point = Utils.rotatePoint(point11,point2,deg); |
| | | map[k][0] = point.getX(); |
| | | map[k][1] = 0-point.getY(); |
| | | Log.i(TAG,String.format("旋转后的值map[%d][0]=%f,map[%d][1]=%f,deg=%f",k,map[k][0],k,map[k][1],deg)); |
| | | } |
| | | break; |
| | | case 9: |
| | | break; |
| | | case 6: |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | for (int k = 0; k < car.length; k++) { |
| | | Point oldPoint = new Point(car[k][0], car[k][1]); |
| | | Point newPoint = Utils.rotatePoint(oldPoint, point2, deg ); |
| | | car[k][0] = newPoint.getX(); |
| | | car[k][1] = newPoint.getY(); |
| | | |
| | | // car[k][0] = car[k][0] - point2.getX(); |
| | | // car[k][1] = car[k][1] - point2.getY(); |
| | | // car[k][1] = -car[k][1]; |
| | | Log.i(TAG,String.format("旋转后的值car[%d][0]=%f,car[%d][1]=%f,deg=%f",k,car[k][0],k,car[k][1],deg)); |
| | | } |
| | | |
| | | }else{ |
| | | MyLog.i(TAG,"暂时支持曲线"); |
| | | map_other = new double[xys.size()/2][2]; |
New file |
| | |
| | | package safeluck.drive.evaluation.httpmodule; |
| | | |
| | | import java.util.List; |
| | | |
| | | public class HttpCarRespBean { |
| | | /** |
| | | * result : true |
| | | * data : {"server":"gps.safeluck.com","port":"3301","map_json":{"axial":[0,12],"left_front_tire":[8,9],"main_ant":[-9151.5063,13030.5118],"right_front_tire":[20,21],"right_rear_tire":[22,23],"name":"科二场考车模型","left_rear_tire":[10,11],"type":"car","body":[0,1,2,3,4,5,6,7,12,13,14,15,16,17,18,19],"point":[-9149.6063,13033.0768,-9149.9978,13033.3124,-9150.3258,13033.3485,-9150.8341,13032.8985,-9151.7318,13031.6639,-9152.3573,13030.83,-9152.5214,13030.5639,-9152.602,13030.3105,-9150.8053,13032.8843,-9150.6537,13032.7602,-9152.3352,13030.8124,-9152.221,13030.7008,-9152.092,13029.7892,-9151.4638,13029.4333,-9151.2111,13029.568,-9150.9808,13029.8341,-9150.3546,13030.6796,-9149.458,13031.8642,-9149.1611,13032.4276,-9149.2827,13032.7653,-9149.4842,13031.8708,-9149.6176,13031.9937,-9151.0011,13029.8717,-9151.1367,13029.9878]},"pzh":"豫E8000测"} |
| | | */ |
| | | |
| | | private boolean result; |
| | | private DataBean data; |
| | | |
| | | public boolean isResult() { |
| | | return result; |
| | | } |
| | | |
| | | public void setResult(boolean result) { |
| | | this.result = result; |
| | | } |
| | | |
| | | public DataBean getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(DataBean data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | public static class DataBean { |
| | | /** |
| | | * server : gps.safeluck.com |
| | | * port : 3301 |
| | | * map_json : {"axial":[0,12],"left_front_tire":[8,9],"main_ant":[-9151.5063,13030.5118],"right_front_tire":[20,21],"right_rear_tire":[22,23],"name":"科二场考车模型","left_rear_tire":[10,11],"type":"car","body":[0,1,2,3,4,5,6,7,12,13,14,15,16,17,18,19],"point":[-9149.6063,13033.0768,-9149.9978,13033.3124,-9150.3258,13033.3485,-9150.8341,13032.8985,-9151.7318,13031.6639,-9152.3573,13030.83,-9152.5214,13030.5639,-9152.602,13030.3105,-9150.8053,13032.8843,-9150.6537,13032.7602,-9152.3352,13030.8124,-9152.221,13030.7008,-9152.092,13029.7892,-9151.4638,13029.4333,-9151.2111,13029.568,-9150.9808,13029.8341,-9150.3546,13030.6796,-9149.458,13031.8642,-9149.1611,13032.4276,-9149.2827,13032.7653,-9149.4842,13031.8708,-9149.6176,13031.9937,-9151.0011,13029.8717,-9151.1367,13029.9878]} |
| | | * pzh : 豫E8000测 |
| | | */ |
| | | |
| | | private String server; |
| | | private String port; |
| | | private MapJsonBean map_json; |
| | | private String pzh; |
| | | |
| | | public String getServer() { |
| | | return server; |
| | | } |
| | | |
| | | public void setServer(String server) { |
| | | this.server = server; |
| | | } |
| | | |
| | | public String getPort() { |
| | | return port; |
| | | } |
| | | |
| | | public void setPort(String port) { |
| | | this.port = port; |
| | | } |
| | | |
| | | public MapJsonBean getMap_json() { |
| | | return map_json; |
| | | } |
| | | |
| | | public void setMap_json(MapJsonBean map_json) { |
| | | this.map_json = map_json; |
| | | } |
| | | |
| | | public String getPzh() { |
| | | return pzh; |
| | | } |
| | | |
| | | public void setPzh(String pzh) { |
| | | this.pzh = pzh; |
| | | } |
| | | |
| | | public static class MapJsonBean { |
| | | /** |
| | | * axial : [0,12] |
| | | * left_front_tire : [8,9] |
| | | * main_ant : [-9151.5063,13030.5118] |
| | | * right_front_tire : [20,21] |
| | | * right_rear_tire : [22,23] |
| | | * name : 科二场考车模型 |
| | | * left_rear_tire : [10,11] |
| | | * type : car |
| | | * body : [0,1,2,3,4,5,6,7,12,13,14,15,16,17,18,19] |
| | | * point : [-9149.6063,13033.0768,-9149.9978,13033.3124,-9150.3258,13033.3485,-9150.8341,13032.8985,-9151.7318,13031.6639,-9152.3573,13030.83,-9152.5214,13030.5639,-9152.602,13030.3105,-9150.8053,13032.8843,-9150.6537,13032.7602,-9152.3352,13030.8124,-9152.221,13030.7008,-9152.092,13029.7892,-9151.4638,13029.4333,-9151.2111,13029.568,-9150.9808,13029.8341,-9150.3546,13030.6796,-9149.458,13031.8642,-9149.1611,13032.4276,-9149.2827,13032.7653,-9149.4842,13031.8708,-9149.6176,13031.9937,-9151.0011,13029.8717,-9151.1367,13029.9878] |
| | | */ |
| | | |
| | | private String name; |
| | | private String type; |
| | | private List<Double> axial; |
| | | private List<Double> left_front_tire; |
| | | private List<Double> main_ant; |
| | | private List<Double> right_front_tire; |
| | | private List<Double> right_rear_tire; |
| | | private List<Double> left_rear_tire; |
| | | private List<Double> body; |
| | | private List<Double> point; |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(String type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public List<Double> getAxial() { |
| | | return axial; |
| | | } |
| | | |
| | | public void setAxial(List<Double> axial) { |
| | | this.axial = axial; |
| | | } |
| | | |
| | | public List<Double> getLeft_front_tire() { |
| | | return left_front_tire; |
| | | } |
| | | |
| | | public void setLeft_front_tire(List<Double> left_front_tire) { |
| | | this.left_front_tire = left_front_tire; |
| | | } |
| | | |
| | | public List<Double> getMain_ant() { |
| | | return main_ant; |
| | | } |
| | | |
| | | public void setMain_ant(List<Double> main_ant) { |
| | | this.main_ant = main_ant; |
| | | } |
| | | |
| | | public List<Double> getRight_front_tire() { |
| | | return right_front_tire; |
| | | } |
| | | |
| | | public void setRight_front_tire(List<Double> right_front_tire) { |
| | | this.right_front_tire = right_front_tire; |
| | | } |
| | | |
| | | public List<Double> getRight_rear_tire() { |
| | | return right_rear_tire; |
| | | } |
| | | |
| | | public void setRight_rear_tire(List<Double> right_rear_tire) { |
| | | this.right_rear_tire = right_rear_tire; |
| | | } |
| | | |
| | | public List<Double> getLeft_rear_tire() { |
| | | return left_rear_tire; |
| | | } |
| | | |
| | | public void setLeft_rear_tire(List<Double> left_rear_tire) { |
| | | this.left_rear_tire = left_rear_tire; |
| | | } |
| | | |
| | | public List<Double> getBody() { |
| | | return body; |
| | | } |
| | | |
| | | public void setBody(List<Double> body) { |
| | | this.body = body; |
| | | } |
| | | |
| | | public List<Double> getPoint() { |
| | | return point; |
| | | } |
| | | |
| | | public void setPoint(List<Double> point) { |
| | | this.point = point; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | import com.anyun.exam.lib.MyLog; |
| | | import com.anyun.exam.lib.util.ByteUtil; |
| | | |
| | | import java.io.BufferedOutputStream; |
| | | import java.io.BufferedReader; |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.File; |
| | |
| | | Log.i(TAG, "createdirs: 目录已经存在"); |
| | | } |
| | | |
| | | } |
| | | |
| | | public static boolean isMapExist(Context context,String mapName){ |
| | | File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+context.getPackageName(),mapName); |
| | | |
| | | if (file.exists()){ |
| | | return true; |
| | | }else{ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | public static StringBuffer readTxtFileFromSD(Context context,String fileName,boolean isRootDir){ |
| | |
| | | } |
| | | return data; |
| | | } |
| | | public static void main(String[] args){ |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根目录下+"包名"的路径下的子路径 |
| | | * @param context |
| | | * @param subDir |
| | | */ |
| | | public static void createdirs(Context context,String subDir){ |
| | | String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName()+"/"; |
| | | if (!TextUtils.isEmpty(subDir)){ |
| | | dir += subDir+"/"; |
| | | } |
| | | File file = new File(dir); |
| | | if (!file.exists()){ |
| | | file.mkdirs(); |
| | | |
| | | }else{ |
| | | Log.i(TAG, "createdirs: 目录已经存在"); |
| | | } |
| | | |
| | | } |
| | | public static void writeTxtFileToSD(Context context, String fileName, String content,String subDir){ |
| | | Log.i(TAG, "writeTxtFileToSD: content:"+content); |
| | | createdirs(context,subDir); |
| | | String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName()+"/"+subDir+"/"; |
| | | File file = new File(dir,fileName); |
| | | if (file.exists()){ |
| | | file.delete(); |
| | | } |
| | | try { |
| | | OutputStream outputStream = new FileOutputStream(file); |
| | | BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); |
| | | bufferedOutputStream.write(content.getBytes()); |
| | | bufferedOutputStream.flush(); |
| | | outputStream.close(); |
| | | bufferedOutputStream.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | |
| | | private static boolean isEqual(double a,double b){ |
| | | return (Math.abs(a-b)<1e-3); |
| | | } |
| | | private static Point rotatePoint(Point oldPoint,Point centre,double degree){ |
| | | public static Point rotatePoint(Point oldPoint,Point centre,double degree){ |
| | | |
| | | Point newPoint = new Point(0.0,0.0); |
| | | newPoint.setX(getdouble((oldPoint.getX()-centre.getX())*cos(toRadians(degree)) - |
| | | (oldPoint.getY()-centre.getY())*sin(toRadians(degree)) + centre.getX(),6)) ; |
| | | (oldPoint.getY()-centre.getY())*sin(toRadians(degree)) + centre.getX(),4)) ; |
| | | newPoint.setY(getdouble( (oldPoint.getX()-centre.getX())*sin(toRadians(degree)) |
| | | + (oldPoint.getY()-centre.getY())*cos(toRadians(degree)) + centre.getY(),6)); |
| | | + (oldPoint.getY()-centre.getY())*cos(toRadians(degree)) + centre.getY(),4)); |
| | | return newPoint; |
| | | } |
| | | |
| | |
| | | return b.setScale(reserve, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | } |
| | | |
| | | |
| | | public static double YawOf(Point p1, Point p2) |
| | | { |
| | | double deg = 0.0; |
| | | |
| | | if (Math.abs(p1.getY() - p2.getY()) <= 1e-3) { |
| | | if (p1.getX() > p2.getX()) { |
| | | deg = 90; |
| | | } else { |
| | | deg = 270; |
| | | } |
| | | } else if (Math.abs(p1.getX() - p2.getX()) <= 1e-3) { |
| | | if (p1.getY() > p2.getY()) { |
| | | deg = 0; |
| | | } else { |
| | | deg = 180; |
| | | } |
| | | } else { |
| | | deg = Math.atan(Math.abs(p1.getX() - p2.getX()) / |
| | | Math.abs(p1.getY() - p2.getY())); |
| | | |
| | | deg = Math.toDegrees(deg); |
| | | |
| | | if (p1.getX() > p2.getX() && |
| | | p1.getY() > p2.getY()) { |
| | | |
| | | } else if (p1.getX() < p2.getX() && |
| | | p1.getY() > p2.getY()) { |
| | | deg = 360 - deg; |
| | | } else if (p1.getX() < p2.getX() && |
| | | p1.getY() < p2.getY()) { |
| | | deg = 180 + deg; |
| | | } else if (p1.getX() > p2.getX() && |
| | | p1.getY() < p2.getY()) { |
| | | deg = 180 - deg; |
| | | } |
| | | } |
| | | |
| | | return deg; |
| | | } |
| | | |
| | | public static String formatTimeYYMMDDHHmmSS(long begin_time) { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | |