This commit is contained in:
lixiaopeng
2021-02-23 12:03:08 +08:00
parent 6d4bfc6264
commit e98afe9b6d
6 changed files with 346 additions and 221 deletions

View File

@@ -46,6 +46,7 @@ dependencies {
kapt rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
implementation rootProject.ext.dependencies.uploadroadinfo
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogoutils

View File

@@ -287,7 +287,7 @@ public class TanluManager implements IMogoMarkerClickListener,
}
if (voiceData != null) {
mTanluModelData.queryRodeInfo(voiceData, new RoadInfoCallback() {
mTanluModelData.queryRodeInfo(mContext, mKeywords, voiceData, new RoadInfoCallback() {
@Override
public void onQueryRoadInfoSuccess(@NotNull List<? extends MarkerExploreWay> roadInfoList) {
if (roadInfoList == null || (roadInfoList != null && roadInfoList.size() <= 0)) {

View File

@@ -1,6 +1,7 @@
package com.mogo.module.share.callback
import com.mogo.module.common.entity.MarkerExploreWay
import com.mogo.cloud.tanlu.bean.MarkerExploreWay
interface RoadInfoCallback {
fun onLocatSuccess(lat: Double, lon: Double)

View File

@@ -1,7 +1,12 @@
package com.mogo.module.share.net;
import android.content.Context;
import com.alibaba.android.arouter.launcher.ARouter;
import com.google.gson.Gson;
import com.mogo.cloud.network.BaseData;
import com.mogo.cloud.tanlu.api.IRoadInfoSearchCallback;
import com.mogo.cloud.tanlu.api.MogoRoadSearchManager;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.commons.network.ParamsProvider;
import com.mogo.commons.network.SubscribeImpl;
@@ -27,6 +32,7 @@ import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.RequestOptions;
import com.mogo.utils.network.utils.GsonUtil;
import java.util.ArrayList;
import java.util.Map;
import io.reactivex.Observable;
@@ -73,111 +79,148 @@ public class TanluModelData {
*
* @param voiceCmdData 语音提供的语义封装
*/
public void queryRodeInfo(final VoiceCmdData voiceCmdData, final RoadInfoCallback callback) {
public void queryRodeInfo(Context context, String key, final VoiceCmdData voiceCmdData, final RoadInfoCallback callback) {
Logger.d(TAG, "queryRodeInfo: " + voiceCmdData);
if (voiceCmdData.isHere()) {
// 搜索附近路况,只需要拿到当前位置信息,就可以请求服务端
MogoLocation l = TanluServiceManager.getServiceApis().getMapServiceApi().getSingletonLocationClient(mContext).getLastKnowLocation();
Location location = new Location(l.getLatitude(), l.getLongitude());
callback.onLocatSuccess(l.getLatitude(), l.getLongitude());
RoadInfoRequest request;
if (voiceCmdData.getObj().equals(TYPE_NAME_BLOCK)) {
// 拥堵和路况同时查
request = new RoadInfoRequest(location, new String[]{TANLU_ROAD_CONGESTION_COMPAT, TANLU_ROAD_CURRENT}, false, false);
}else{
request = new RoadInfoRequest(location, new String[]{voiceCmdData.getType()}, false, false);
ArrayList list = new ArrayList();
list.add(voiceCmdData.getType());
//北京市朝阳区小黄庄北街2号 经纬度和地理位置必须有一个
MogoLocation mogoLocation = TanluServiceManager.getServiceApis().getMapServiceApi().getSingletonLocationClient(mContext).getLastKnowLocation();
com.mogo.cloud.tanlu.bean.location.Location location = new com.mogo.cloud.tanlu.bean.location.Location();
location.setLatitude(mogoLocation.getLatitude());
location.setLongitude(mogoLocation.getLongitude());
com.mogo.cloud.tanlu.bean.RoadInfoRequest request = new com.mogo.cloud.tanlu.bean.RoadInfoRequest(location, key, list, false, false);
MogoRoadSearchManager.getInstance(context).init();
MogoRoadSearchManager.getInstance(context).queryRoadInfo(request, new IRoadInfoSearchCallback() {
@Override
public void onSuccess(BaseData<com.mogo.cloud.tanlu.bean.RoadInfos> result) {
if (result != null) {
if (result.getResult() != null) {
Logger.d(TAG, "搜索附近路况信息成功: " + result.getResult());
callback.onQueryRoadInfoSuccess(result.getResult().getData());
} else {
callback.onQueryRoadInfoFail(result.getMsg(), result.getCode());
}
}
}
Map<String, Object> params = new ParamsProvider.Builder(mContext)
.append("sn", Utils.getSn())
.append("data", GsonUtil.jsonFromObject(request))
.build();
@Override
public void onFailure(int code) {
callback.onQueryRoadInfoFail("", code);
}
mShareApiService.queryRoadInfos(params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeImpl<BaseDataCompat<RoadInfos>>(RequestOptions.create(mContext)) {
@Override
public void onError(Throwable e) {
super.onError(e);
}
@Override
public void onError(Throwable e) {
@Override
public void onSuccess(BaseDataCompat<RoadInfos> o) {
super.onSuccess(o);
Logger.d(TAG, "搜索附近路况信息成功: " + o);
callback.onQueryRoadInfoSuccess(o.getResult().getData());
Logger.d(TAG, "搜索附近路况信息成功2: " + o);
}
}
});
@Override
public void onError(String message, int code) {
super.onError(message, code);
callback.onQueryRoadInfoFail(message, code);
}
});
} else {
// 查询的不是附近的信息,所以需要查询一下目标地址的经纬度,然后再请求服务端
Observable.create(new ObservableOnSubscribe<MogoPoiResult>() {
@Override
public void subscribe(ObservableEmitter<MogoPoiResult> emitter) throws Exception {
// 根据传入的地址,转成经纬度
IMogoMapService mapService = TanluServiceManager.getServiceApis().getMapServiceApi();
String cityCode = mapService.getSingletonLocationClient(mContext).getLastKnowLocation().getCityCode();
MogoPoiSearchQuery poiSearchQuery = new MogoPoiSearchQuery(voiceCmdData.getLocation(), "", cityCode);
IMogoPoiSearch poiSearch = mapService.getPoiSearch(mContext, poiSearchQuery);
MogoPoiResult result = poiSearch.searchPOI();
if (result != null && result.getPois() != null && result.getPois().size() > 0) {
emitter.onNext(result);
} else {
emitter.onError(new IllegalArgumentException("没有根据地址查询到对应的经纬度"));
}
}
}).subscribeOn(Schedulers.io()).observeOn(Schedulers.io())
.flatMap(new Function<MogoPoiResult, Observable<BaseDataCompat<RoadInfos>>>() {
@Override
public Observable<BaseDataCompat<RoadInfos>> apply(MogoPoiResult mogoPoiResult) throws Exception {
// 转成经纬度后,整理参数,进行接口请求
Logger.d(TAG, "查询目标地址经纬度成功===" + Thread.currentThread().getName());
MogoPoiItem poiItem = mogoPoiResult.getPois().get(0);
Location location = new Location(poiItem.getPoint().lat, poiItem.getPoint().lon);
callback.onLocatSuccess(location.getLat(), location.getLon());
RoadInfoRequest request;
if (voiceCmdData.getObj().equals(TYPE_NAME_BLOCK)) {
// 拥堵和路况同时查
request = new RoadInfoRequest(location, new String[]{TANLU_ROAD_CONGESTION_COMPAT, TANLU_ROAD_CURRENT}, false, false);
}else{
request = new RoadInfoRequest(location, new String[]{voiceCmdData.getType()}, false, false);
}
Map<String, Object> params = new ParamsProvider.Builder(mContext)
.append("sn", Utils.getSn())
.append("data", GsonUtil.jsonFromObject(request))
.build();
return mShareApiService.queryRoadInfos(params);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new SubscribeImpl<BaseDataCompat<RoadInfos>>(RequestOptions.create(mContext)) {
@Override
public void onError(Throwable e) {
super.onError(e);
callback.onQueryRoadInfoFail(e.getMessage(), -1);
}
@Override
public void onSuccess(BaseDataCompat<RoadInfos> o) {
super.onSuccess(o);
Logger.d(TAG, "当前线程为"+Thread.currentThread().getName()+" 搜索目标地址路况信息成功: " + o);
callback.onQueryRoadInfoSuccess(o.getResult().getData());
}
@Override
public void onError(String message, int code) {
super.onError(message, code);
callback.onQueryRoadInfoFail(message, code);
}
});
}
// if (voiceCmdData.isHere()) {
// // 搜索附近路况,只需要拿到当前位置信息,就可以请求服务端
// MogoLocation l = TanluServiceManager.getServiceApis().getMapServiceApi().getSingletonLocationClient(mContext).getLastKnowLocation();
// Location location = new Location(l.getLatitude(), l.getLongitude());
// callback.onLocatSuccess(l.getLatitude(), l.getLongitude());
// RoadInfoRequest request;
// if (voiceCmdData.getObj().equals(TYPE_NAME_BLOCK)) {
// // 拥堵和路况同时查
// request = new RoadInfoRequest(location, new String[]{TANLU_ROAD_CONGESTION_COMPAT, TANLU_ROAD_CURRENT}, false, false);
// }else{
// request = new RoadInfoRequest(location, new String[]{voiceCmdData.getType()}, false, false);
// }
//
// Map<String, Object> params = new ParamsProvider.Builder(mContext)
// .append("sn", Utils.getSn())
// .append("data", GsonUtil.jsonFromObject(request))
// .build();
//
// mShareApiService.queryRoadInfos(params)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(new SubscribeImpl<BaseDataCompat<RoadInfos>>(RequestOptions.create(mContext)) {
// @Override
// public void onError(Throwable e) {
// super.onError(e);
// }
//
// @Override
// public void onSuccess(BaseDataCompat<RoadInfos> o) {
// super.onSuccess(o);
// Logger.d(TAG, "搜索附近路况信息成功: " + o);
// callback.onQueryRoadInfoSuccess(o.getResult().getData());
// Logger.d(TAG, "搜索附近路况信息成功2: " + o);
// }
//
// @Override
// public void onError(String message, int code) {
// super.onError(message, code);
// callback.onQueryRoadInfoFail(message, code);
// }
// });
// } else {
// // 查询的不是附近的信息,所以需要查询一下目标地址的经纬度,然后再请求服务端
// Observable.create(new ObservableOnSubscribe<MogoPoiResult>() {
// @Override
// public void subscribe(ObservableEmitter<MogoPoiResult> emitter) throws Exception {
// // 根据传入的地址,转成经纬度
// IMogoMapService mapService = TanluServiceManager.getServiceApis().getMapServiceApi();
// String cityCode = mapService.getSingletonLocationClient(mContext).getLastKnowLocation().getCityCode();
// MogoPoiSearchQuery poiSearchQuery = new MogoPoiSearchQuery(voiceCmdData.getLocation(), "", cityCode);
// IMogoPoiSearch poiSearch = mapService.getPoiSearch(mContext, poiSearchQuery);
// MogoPoiResult result = poiSearch.searchPOI();
// if (result != null && result.getPois() != null && result.getPois().size() > 0) {
// emitter.onNext(result);
// } else {
// emitter.onError(new IllegalArgumentException("没有根据地址查询到对应的经纬度"));
// }
// }
// }).subscribeOn(Schedulers.io()).observeOn(Schedulers.io())
// .flatMap(new Function<MogoPoiResult, Observable<BaseDataCompat<RoadInfos>>>() {
// @Override
// public Observable<BaseDataCompat<RoadInfos>> apply(MogoPoiResult mogoPoiResult) throws Exception {
// // 转成经纬度后,整理参数,进行接口请求
// Logger.d(TAG, "查询目标地址经纬度成功===" + Thread.currentThread().getName());
// MogoPoiItem poiItem = mogoPoiResult.getPois().get(0);
// Location location = new Location(poiItem.getPoint().lat, poiItem.getPoint().lon);
// callback.onLocatSuccess(location.getLat(), location.getLon());
// RoadInfoRequest request;
// if (voiceCmdData.getObj().equals(TYPE_NAME_BLOCK)) {
// // 拥堵和路况同时查
// request = new RoadInfoRequest(location, new String[]{TANLU_ROAD_CONGESTION_COMPAT, TANLU_ROAD_CURRENT}, false, false);
// }else{
// request = new RoadInfoRequest(location, new String[]{voiceCmdData.getType()}, false, false);
// }
//
// Map<String, Object> params = new ParamsProvider.Builder(mContext)
// .append("sn", Utils.getSn())
// .append("data", GsonUtil.jsonFromObject(request))
// .build();
// return mShareApiService.queryRoadInfos(params);
// }
// }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
// .subscribe(new SubscribeImpl<BaseDataCompat<RoadInfos>>(RequestOptions.create(mContext)) {
// @Override
// public void onError(Throwable e) {
// super.onError(e);
// callback.onQueryRoadInfoFail(e.getMessage(), -1);
// }
//
// @Override
// public void onSuccess(BaseDataCompat<RoadInfos> o) {
// super.onSuccess(o);
// Logger.d(TAG, "当前线程为"+Thread.currentThread().getName()+" 搜索目标地址路况信息成功: " + o);
// callback.onQueryRoadInfoSuccess(o.getResult().getData());
// }
//
// @Override
// public void onError(String message, int code) {
// super.onError(message, code);
// callback.onQueryRoadInfoFail(message, code);
// }
// });
// }
}
}