diff --git a/app/build.gradle b/app/build.gradle index d840d92..fd53ec1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "com.navinfo.outdoor" minSdkVersion 23 targetSdkVersion 30 - versionCode 28 - versionName "8.221021" + versionCode 29 + versionName "8.221028" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { diff --git a/app/src/main/java/com/navinfo/outdoor/activity/AutoTakePictureActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/AutoTakePictureActivity.java index 8767be0..342ba3a 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/AutoTakePictureActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/AutoTakePictureActivity.java @@ -87,7 +87,6 @@ import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.SizeSelector; import com.otaliastudios.cameraview.size.SizeSelectors; import com.tencent.map.geolocation.TencentLocation; -import com.tencent.map.geolocation.TencentPoi; import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; import com.tencent.tencentmap.mapsdk.maps.TencentMap; @@ -438,14 +437,14 @@ public class AutoTakePictureActivity extends BaseActivity implements View.OnClic } }); - tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() { - @Override - public void onMapClick(LatLng latLng) { - Message msg = handler.obtainMessage(0x105); - msg.obj = obtainTecentLocation(latLng); - handler.sendMessage(msg); - } - }); +// tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() { +// @Override +// public void onMapClick(LatLng latLng) { +// Message msg = handler.obtainMessage(0x105); +// msg.obj = obtainTecentLocation(latLng); +// handler.sendMessage(msg); +// } +// }); tencentMap.addTencentMapGestureListener(new TencentMapGestureListener() { @Override @@ -718,21 +717,21 @@ public class AutoTakePictureActivity extends BaseActivity implements View.OnClic finishEntityMap.put(roadMatchEntity.getId(), roadMatchEntity); } // 匹配到终点、或匹配距离超过90% - if (roadMatchEntity.getMatchPointList().size()>=2&&GeometryTools.getLineStringByMyCoordinate(roadMatchEntity.getMatchPointList()).getLength()/roadMatchEntity.getLength()>=MATCH_CONFIRM_FINISH_BUFFER + if ((roadMatchEntity.getMatchPointList().size()>=2&&GeometryTools.getLineStringByMyCoordinate(roadMatchEntity.getMatchPointList()).getLength()/roadMatchEntity.getLength()>=MATCH_CONFIRM_FINISH_BUFFER) || currentEndDistance<= finalMatchStartDistance) { roadMatchEntity.setEndMathchTime(System.currentTimeMillis()); // 匹配到终点后,记录该条数据的最新一次匹配距离,当下一次匹配距离大于当前距离,则认为该数据完全匹配,结束匹配 roadMatchEntity.setLastEndDistance(currentEndDistance); } } else { // 无法匹配,或当前道路并不是距离最近的数据 + // 将无法匹配的点位个数记录到对象中 + roadMatchEntity.setUnMatchCount(roadMatchEntity.getUnMatchCount()+1); + roadMatchEntity.setMatchCount(0);// 设置连续匹配的数据个数为0 + roadMatchEntity.getUnMatchPointList().add(new MyCoordinate(currentPoint.getX(), currentPoint.getY())); // 该数据未匹配,但是如果此前已经匹配到结束点,则仍然认为匹配成功 if (roadMatchEntity.getEndMathchTime()>0) { finishEntityMap.put(roadMatchEntity.getId(), roadMatchEntity); } else { - // 将无法匹配的点位个数记录到对象中 - roadMatchEntity.setUnMatchCount(roadMatchEntity.getUnMatchCount()+1); - roadMatchEntity.setMatchCount(0);// 设置连续匹配的数据个数为0 - roadMatchEntity.getUnMatchPointList().add(new MyCoordinate(currentPoint.getX(), currentPoint.getY())); // 判断当前是否存在已匹配的点 if (roadMatchEntity.getMatchPointList().size()>1) { // 存在匹配的点超过1个,根据长度判断 if (GeometryTools.getLineStringByMyCoordinate(roadMatchEntity.getMatchPointList()).getLength()/roadMatchEntity.getLength()>UNMATCH_GIVE_UP_DISTANCE_BUFFER) { @@ -770,9 +769,12 @@ public class AutoTakePictureActivity extends BaseActivity implements View.OnClic } // TODO 完成的entity数据,需要自动生成对应的数据,还需要自动复制对应的照片,通知服务器采集完成 finishRoadTask(finishEntityMap); - // 语音提示用户 - mediaPlayer.start(); - systemTTS.playText("拍摄完成"); + // 只有在没有正在拍摄的任务,所有任务都拍摄完成时才会提示 + if (roadMatchEntityList.isEmpty()) { + // 语音提示用户 + mediaPlayer.start(); + systemTTS.playText("拍摄完成"); + } } if (!unMatchList.isEmpty()) { @@ -826,7 +828,7 @@ public class AutoTakePictureActivity extends BaseActivity implements View.OnClic .cls(TaskByNetBean.class) .params(new HttpParams()) .token(Constant.ACCESS_TOKEN); - okhttp3.Response response = okGoBuilder.getSynchronization(); + Response response = okGoBuilder.getSynchronization(); Gson gson = new Gson(); TaskByNetBean taskByNetBean = gson.fromJson(response.body().string(), TaskByNetBean.class); if (taskByNetBean.getCode() == 200) { @@ -1450,164 +1452,204 @@ public class AutoTakePictureActivity extends BaseActivity implements View.OnClic // window.setAttributes(lp); } - private TencentLocation obtainTecentLocation(LatLng latLng) { - return new TencentLocation() { - @Override - public String getProvider() { - return "NetWork"; - } - - @Override - public double getLatitude() { - return latLng.getLatitude(); - } - - @Override - public double getLongitude() { - return latLng.getLongitude(); - } - - @Override - public double getAltitude() { - return latLng.getAltitude(); - } - - @Override - public float getAccuracy() { - return 100; - } - - @Override - public String getName() { - return "null"; - } - - @Override - public String getAddress() { - return "null"; - } - - @Override - public String getNation() { - return "null"; - } - - @Override - public String getProvince() { - return "null"; - } - - @Override - public String getCity() { - return "null"; - } - - @Override - public String getDistrict() { - return "null"; - } - - @Override - public String getTown() { - return null; - } - - @Override - public String getVillage() { - return null; - } - - @Override - public String getStreet() { - return null; - } - - @Override - public String getStreetNo() { - return null; - } - - @Override - public Integer getAreaStat() { - return null; - } - - @Override - public List getPoiList() { - return null; - } - - @Override - public float getBearing() { - return 0; - } - - @Override - public float getSpeed() { - return 0; - } - - @Override - public long getTime() { - return 0; - } - - @Override - public long getElapsedRealtime() { - return 0; - } - - @Override - public int getGPSRssi() { - return 0; - } - - @Override - public String getIndoorBuildingId() { - return null; - } - - @Override - public String getIndoorBuildingFloor() { - return null; - } - - @Override - public int getIndoorLocationType() { - return 0; - } - - @Override - public double getDirection() { - return 0; - } - - @Override - public String getCityCode() { - return null; - } - - @Override - public String getCityPhoneCode() { - return null; - } - - @Override - public int getCoordinateType() { - return 0; - } - - @Override - public int isMockGps() { - return 0; - } - - @Override - public Bundle getExtra() { - return null; - } - }; - } +// private TencentLocation obtainTecentLocation(LatLng latLng) { +// return new TencentLocation() { +// @Override +// public String getProvider() { +// return "NetWork"; +// } +// +// @Override +// public String getFusionProvider() { +// return null; +// } +// +// @Override +// public String getSourceProvider() { +// return null; +// } +// +// @Override +// public double getLatitude() { +// return latLng.getLatitude(); +// } +// +// @Override +// public double getLongitude() { +// return latLng.getLongitude(); +// } +// +// @Override +// public double getAltitude() { +// return latLng.getAltitude(); +// } +// +// @Override +// public float getAccuracy() { +// return 100; +// } +// +// @Override +// public String getName() { +// return "null"; +// } +// +// @Override +// public String getAddress() { +// return "null"; +// } +// +// @Override +// public String getNation() { +// return "null"; +// } +// +// @Override +// public String getProvince() { +// return "null"; +// } +// +// @Override +// public String getCity() { +// return "null"; +// } +// +// @Override +// public String getDistrict() { +// return "null"; +// } +// +// @Override +// public String getTown() { +// return null; +// } +// +// @Override +// public String getVillage() { +// return null; +// } +// +// @Override +// public String getStreet() { +// return null; +// } +// +// @Override +// public String getStreetNo() { +// return null; +// } +// +// @Override +// public Integer getAreaStat() { +// return null; +// } +// +// @Override +// public List getPoiList() { +// return null; +// } +// +// @Override +// public float getBearing() { +// return 0; +// } +// +// @Override +// public float getSpeed() { +// return 0; +// } +// +// @Override +// public long getTime() { +// return 0; +// } +// +// @Override +// public long getElapsedRealtime() { +// return 0; +// } +// +// @Override +// public int getGPSRssi() { +// return 0; +// } +// +// @Override +// public int getInOutStatus() { +// return 0; +// } +// +// @Override +// public String getIndoorBuildingId() { +// return null; +// } +// +// @Override +// public String getIndoorBuildingFloor() { +// return null; +// } +// +// @Override +// public int getIndoorLocationType() { +// return 0; +// } +// +// @Override +// public double getDirection() { +// return 0; +// } +// +// @Override +// public String getCityCode() { +// return null; +// } +// +// @Override +// public String getCityPhoneCode() { +// return null; +// } +// +// @Override +// public TencentMotion getMotion() { +// return null; +// } +// +// @Override +// public int getGpsQuality() { +// return 0; +// } +// +// @Override +// public float getDeltaAngle() { +// return 0; +// } +// +// @Override +// public float getDeltaSpeed() { +// return 0; +// } +// +// @Override +// public int getCoordinateType() { +// return 0; +// } +// +// @Override +// public int getFakeReason() { +// return 0; +// } +// +// @Override +// public int isMockGps() { +// return 0; +// } +// +// @Override +// public Bundle getExtra() { +// return null; +// } +// }; +// } private Handler handler = new Handler(new Handler.Callback() { @Override diff --git a/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java b/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java index 720779c..1b7a69a 100644 --- a/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java +++ b/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java @@ -3,8 +3,8 @@ package com.navinfo.outdoor.http; public class HttpInterface { // public static final String IP = "http://172.23.138.133:9999/m4";//测试接口-IP public static final String IPm = "http://dtxbmaps.navinfo.com/dtxb/dev/m4";//开发接口-外网 - public static final String IP = "http://dtxbmaps.navinfo.com/dtxb/test/m4";//测试接口-外网 - public static final String IP1 = "http://dtxbmaps.navinfo.com/dtxb/m4";//正式接口 + public static final String IP2 = "http://dtxbmaps.navinfo.com/dtxb/test/m4";//测试接口-外网 + public static final String IP = "http://dtxbmaps.navinfo.com/dtxb/m4";//正式接口 public static final String USER_PATH = "/user/";//我的 public static final String MSG_LIST_PATH = "/msgList/";//发现 public static final String USER_LOGIN_PATH = "/userlogin/";//登录 diff --git a/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java b/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java index e9139c8..6e7c4e8 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java @@ -48,6 +48,7 @@ import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.ObservableSource; import io.reactivex.Observer; +import io.reactivex.Single; import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -72,22 +73,21 @@ public class DataSaveUtils { public void onError(); } - // 批量上传文件 - public void uploadFiles(Activity mContext, PoiEntity poiEntity, List poiPicList, UploadCallback callback) { + public Single>> getUploadSpliteFilesObservble(Activity mContext, PoiEntity poiEntity, List poiPicList) { int auditId = poiEntity.getBodyId(); File zipFile = new File(poiPicList.get(0).getParentFile(), auditId+".zip"); - Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - if (!zipFile.exists()) { - // 开始压缩文件 - ZipUtil.zipFiles(poiPicList, zipFile, "", null); - } + return Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + if (!zipFile.exists()) { + // 开始压缩文件 + ZipUtil.zipFiles(poiPicList, zipFile, "", null); + } - emitter.onNext(zipFile); - emitter.onComplete(); - } - }) + emitter.onNext(zipFile); + emitter.onComplete(); + } + }) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.computation()) // 切分数据,发送开始上传请求 @@ -169,30 +169,29 @@ public class DataSaveUtils { public void accept(List> entries) throws Exception { // 最终成功,调用finish接口 CommonResponse response = uploadTaskFinish(mContext, auditId); - Message obtain1 = Message.obtain(); - obtain1.what = Constant.NEST_WORD_SUBMIT; if (response.getCode() == 200) { // 更新成功,再次更新本地数据库 - ToastUtils.Message(mContext, "分包数据上传完成!"); poiEntity.setTaskStatus(100); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); - // 提醒用户数据上传完成 - obtain1.obj = "数据:" + poiEntity.getName() + " 上传成功"; // 同时删除关联的照片文件和压缩包文件 if (zipFile.exists()) { zipFile.delete(); } if (poiPicList!=null&&!poiPicList.isEmpty()) { for (File picFile: poiPicList - ) { + ) { picFile.delete(); } } } else { - obtain1.obj = "数据:" + poiEntity.getName() + " 上传失败"; + throw new Exception("数据:" + poiEntity.getName() + " 上传失败"); } - EventBus.getDefault().post(obtain1); } - }) + }); + } + + // 批量上传文件 + public void uploadFiles(Activity mContext, PoiEntity poiEntity, List poiPicList, UploadCallback callback) { + getUploadSpliteFilesObservble(mContext, poiEntity, poiPicList) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SingleObserver>>() { @Override @@ -202,12 +201,23 @@ public class DataSaveUtils { @Override public void onSuccess(List> entries) { + ToastUtils.Message(mContext, "分包数据上传完成!"); + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + // 提醒用户数据上传完成 + obtain1.obj = "数据:" + poiEntity.getName() + " 上传成功"; + EventBus.getDefault().post(obtain1); callback.onFinish(); } @Override public void onError(Throwable e) { ToastUtils.Message(mContext, e.getMessage()); + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + // 提醒用户数据上传完成 + obtain1.obj = e.getMessage(); + EventBus.getDefault().post(obtain1); callback.onError(); callback.onFinish(); } diff --git a/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java b/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java index 470cf73..ee04335 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java @@ -5,6 +5,7 @@ import android.os.Message; import android.util.Log; import android.widget.Toast; +import com.github.lazylibrary.util.ToastUtils; import com.github.lazylibrary.util.ZipUtil; import com.google.gson.Gson; import com.lzy.okgo.OkGo; @@ -31,7 +32,18 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import io.reactivex.Observable; +import io.reactivex.ObservableSource; +import io.reactivex.Observer; +import io.reactivex.Single; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; +import io.reactivex.functions.Function; +import io.reactivex.schedulers.Schedulers; import okhttp3.Response; /* @@ -41,8 +53,9 @@ public class PoiSaveUtils { private Activity mContext; private Gson gson; private static PoiSaveUtils instance; - private int anInt = 0; - private int bInt = 0; + private int anInt = 0; // 上传成功的个数 + private int bInt = 0; // 上传失败的个数 + private int uploadCount = 0; // 上传的总个数 public static PoiSaveUtils getInstance(Activity mContext) { if (instance == null) { @@ -60,80 +73,240 @@ public class PoiSaveUtils { * 批量上传数据到服务端 */ public void uploadPoiEntityBatch(List poiEntityList) { - if (poiEntityList != null) { - new Thread(new Runnable() { - @Override - public void run() { - anInt = 0; - bInt = 0; - Log.d("PoiSaveUtils", "开始上传"); - for (int i = 0; i < poiEntityList.size(); i++) { - PoiEntity poiEntity = poiEntityList.get(i); - Log.d("PoiSaveUtils", "poiEntity.getType():"+poiEntity.getType()); - if (Constant.submitIdSet.contains(poiEntity.getId())) { - continue; - } - if (poiEntity.getType() == 2) { // 如果是充电站数据,首先检查子充电桩的状态 + if (poiEntityList != null&&!poiEntityList.isEmpty()) { + // 因为道路任务和POI录像任务需要分包提交,因此和其他要素分开,分别放在两个管道里 + List chargePoiEntityList = new ArrayList<>();/*充电站POI列表*/ + List spliteFilePoiEntityList = new ArrayList<>();/*充电站POI列表*/ + List otherPoiEntityList = new ArrayList<>();/*充电站POI列表*/ + for (PoiEntity poiEntity: poiEntityList) { + if (Constant.submitIdSet.contains(poiEntity.getId())) { + continue; + } + if (poiEntity.getType()==2) { + chargePoiEntityList.add(poiEntity); + } if (poiEntity.getType() == 3 || poiEntity.getType() == 4) { + spliteFilePoiEntityList.add(poiEntity); + } else { + otherPoiEntityList.add(poiEntity); + } + } + + Observable chargePoiObserable = Observable.fromIterable(chargePoiEntityList) + .subscribeOn(Schedulers.io()) + .doOnNext(new Consumer() { + @Override + public void accept(PoiEntity poiEntity) throws Exception { Constant.submitIdSet.add(poiEntity.getId()); // 记录全局的正在提交的数据 if (savePoiNet(poiEntity) == 200&&saveChargingPileByChargingStation(poiEntity)) { // 网络保存成功 - Constant.submitIdSet.remove(poiEntity.getId()); + if (Constant.submitIdSet.contains(poiEntity.getId())) { + Constant.submitIdSet.remove(poiEntity.getId()); + } if (savePoiNet(poiEntity) == 200) { // 网络保存-冗余操作 // 开始上传流程 if (saveChargingPileUploadChargingStation(poiEntity)) { uploadPoiNet(poiEntity); }else { + bInt++; poiEntity.setChecked(false); poiEntity.setWork_type(0); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + sendUploadMessage(poiEntityList.size(), anInt, bInt); } }else { + bInt++; poiEntity.setChecked(false); poiEntity.setWork_type(0); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + sendUploadMessage(poiEntityList.size(), anInt, bInt); } } else { + bInt++; poiEntity.setChecked(false); poiEntity.setWork_type(0); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); Constant.submitIdSet.remove(poiEntity.getId()); + sendUploadMessage(poiEntityList.size(), anInt, bInt); } - } else {//其他类型 + } + }); + // 处理普通数据 + Observable otherObserable = Observable.fromIterable(otherPoiEntityList) + .subscribeOn(Schedulers.io()) + .doOnNext(new Consumer() { + @Override + public void accept(PoiEntity poiEntity) throws Exception { if (savePoiNet(poiEntity) == 200) { // 网络保存成功 //走上传流程: uploadPoiNet(poiEntity); }else { + bInt++; poiEntity.setChecked(false); poiEntity.setWork_type(0); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + sendUploadMessage(poiEntityList.size(), anInt, bInt); } } - } - mContext.runOnUiThread(new Runnable() { + }); + // 处理需要分包上传数据的POI录像和道路数据 + Observable spliteFileObserable = Observable.fromIterable(spliteFilePoiEntityList) + .subscribeOn(Schedulers.io()) + .doOnNext(new Consumer() { @Override - public void run() { + public void accept(PoiEntity poiEntity) throws Exception { + if (savePoiNet(poiEntity) == 200) { // 网络保存成功 + //走上传流程: + if (poiEntity == null) { + bInt++; + return; + } + int bodyId = poiEntity.getBodyId(); + if (bodyId == 0) { + bInt++; + return; + } + }else { + bInt++; + poiEntity.setChecked(false); + poiEntity.setWork_type(0); + PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + sendUploadMessage(poiEntityList.size(), anInt, bInt); + } + } + }) + .concatMap(new Function>() { + @Override + public ObservableSource apply(PoiEntity poiEntity) throws Exception { + List photoFileList = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId()); + return DataSaveUtils.getInstance().getUploadSpliteFilesObservble(mContext, poiEntity, photoFileList) + .toObservable(); + } + }) + .doOnNext(new Consumer() { + @Override + public void accept(Object o) throws Exception { + anInt++; + } + }) + .doOnError(new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + bInt++; + } + }); + Observable.concat( + otherObserable, spliteFileObserable, chargePoiObserable + ).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + anInt = 0; + bInt = 0; + uploadCount = chargePoiEntityList.size()+spliteFilePoiEntityList.size()+otherPoiEntityList.size(); + Log.d("PoiSaveUtils", "开始上传"); + ToastUtils.showToast(mContext, "开始批量上传数据,本次共需上传"+uploadCount+"条数据"); + } + + @Override + public void onNext(Object o) { + + } + + @Override + public void onError(Throwable e) { + ToastUtils.showToast(mContext, e.getMessage()); + Constant.isPresent = true; + } + + @Override + public void onComplete() { Message obtain = Message.obtain(); obtain.what = Constant.STAY_SUBMIT_ITEM; obtain.obj = true; EventBus.getDefault().post(obtain); - if (anInt + bInt > 0) { - Message obtain1 = Message.obtain(); - obtain1.what = Constant.NEST_WORD_SUBMIT; - obtain1.obj = "批量提交 成功:" + anInt + ", 失败:" + bInt; - EventBus.getDefault().post(obtain1); - } else { - Message obtain1 = Message.obtain(); - obtain1.what = Constant.NEST_WORD_SUBMIT; - obtain1.obj = "批量提交 失败"; - EventBus.getDefault().post(obtain1); - } - + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "批量提交数据,共选中"+uploadCount+"条数据,成功:" + anInt + "条, 失败:" + bInt+"条"; + EventBus.getDefault().post(obtain1); + Constant.isPresent = true; } }); - } - }).start(); + + + +// new Thread(new Runnable() { +// @Override +// public void run() { +// anInt = 0; +// bInt = 0; +// Log.d("PoiSaveUtils", "开始上传"); +// for (int i = 0; i < poiEntityList.size(); i++) { +// PoiEntity poiEntity = poiEntityList.get(i); +// Log.d("PoiSaveUtils", "poiEntity.getType():"+poiEntity.getType()); +// if (Constant.submitIdSet.contains(poiEntity.getId())) { +// continue; +// } +// if (poiEntity.getType() == 2) { // 如果是充电站数据,首先检查子充电桩的状态 +// Constant.submitIdSet.add(poiEntity.getId()); // 记录全局的正在提交的数据 +// if (savePoiNet(poiEntity) == 200&&saveChargingPileByChargingStation(poiEntity)) { // 网络保存成功 +// Constant.submitIdSet.remove(poiEntity.getId()); +// if (savePoiNet(poiEntity) == 200) { // 网络保存-冗余操作 +// // 开始上传流程 +// if (saveChargingPileUploadChargingStation(poiEntity)) { +// uploadPoiNet(poiEntity); +// }else { +// bInt++; +// poiEntity.setChecked(false); +// poiEntity.setWork_type(0); +// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); +// sendUploadMessage(poiEntityList.size(), anInt, bInt); +// } +// }else { +// bInt++; +// poiEntity.setChecked(false); +// poiEntity.setWork_type(0); +// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); +// sendUploadMessage(poiEntityList.size(), anInt, bInt); +// } +// } else { +// bInt++; +// poiEntity.setChecked(false); +// poiEntity.setWork_type(0); +// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); +// Constant.submitIdSet.remove(poiEntity.getId()); +// sendUploadMessage(poiEntityList.size(), anInt, bInt); +// } +// } else {//其他类型 +// if (savePoiNet(poiEntity) == 200) { // 网络保存成功 +// //走上传流程: +// uploadPoiNet(poiEntity); +// }else { +// bInt++; +// poiEntity.setChecked(false); +// poiEntity.setWork_type(0); +// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); +// sendUploadMessage(poiEntityList.size(), anInt, bInt); +// } +// } +// } +// } +// }).start(); } } + private void sendUploadMessage(int count, int success, int fail) { + if (success+fail == count) { // 成功和失败的个数与数据总数相同 + Message obtain = Message.obtain(); + obtain.what = Constant.STAY_SUBMIT_ITEM; + obtain.obj = true; + EventBus.getDefault().post(obtain); + } + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "批量提交数据,共选中"+count+"条数据,成功:" + anInt + "条, 失败:" + bInt+"条"; + EventBus.getDefault().post(obtain1); + } + /* * 保存数据到服务 */ @@ -221,6 +394,10 @@ public class PoiSaveUtils { return 200; } +// public interface UploadListener { +// public void uploadCallback(); +// } + /** * 最终上传POI数据到服务 */