| | |
| | | package com.dayu.pipirrapp.fragment; |
| | | |
| | | import static com.dayu.pipirrapp.net.Constants.BASE_URL; |
| | | import static com.dayu.pipirrapp.tool.InspectionUtils.addInspectionLocationData; |
| | | import static com.dayu.pipirrapp.tool.InspectionUtils.updateInspectionLocationData; |
| | | |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.location.LocationManager; |
| | |
| | | import androidx.annotation.Nullable; |
| | | import androidx.lifecycle.Observer; |
| | | |
| | | import com.dayu.pipirrapp.MyApplication; |
| | | import com.dayu.pipirrapp.R; |
| | | import com.dayu.pipirrapp.bean.db.CenterPointBean; |
| | | import com.dayu.pipirrapp.bean.db.InspectionBean; |
| | | import com.dayu.pipirrapp.bean.db.InspectionLocationBean; |
| | | import com.dayu.pipirrapp.bean.db.LatLonBean; |
| | | import com.dayu.pipirrapp.bean.db.MarkerBean; |
| | | import com.dayu.pipirrapp.bean.net.CenterPointResult; |
| | | import com.dayu.pipirrapp.bean.net.InspectionRequest; |
| | | import com.dayu.pipirrapp.bean.net.LoginResult; |
| | | import com.dayu.pipirrapp.bean.net.MarkerResult; |
| | | import com.dayu.pipirrapp.dao.DaoSingleton; |
| | | import com.dayu.pipirrapp.databinding.FragmentMapBinding; |
| | |
| | | import com.dayu.pipirrapp.net.subscribers.SubscriberListener; |
| | | import com.dayu.pipirrapp.observer.MapFragmenObserver; |
| | | import com.dayu.pipirrapp.service.MyLocationService; |
| | | import com.dayu.pipirrapp.tool.InspectionUtils; |
| | | import com.dayu.pipirrapp.utils.CommonData; |
| | | import com.dayu.pipirrapp.utils.CommonKeyName; |
| | | import com.dayu.pipirrapp.utils.DateUtils; |
| | | import com.dayu.pipirrapp.utils.MapJpgUtils; |
| | | import com.dayu.pipirrapp.utils.MyLog; |
| | | import com.dayu.pipirrapp.utils.SharedPreferencesHelper; |
| | |
| | | import com.dayu.pipirrapp.utils.WebViewUtils; |
| | | import com.dayu.pipirrapp.view.ConfirmDialog; |
| | | import com.jeremyliao.liveeventbus.LiveEventBus; |
| | | import com.tencent.bugly.crashreport.CrashReport; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | |
| | | WebView mWebView; |
| | | CenterPointBean centerPointBean; |
| | | String strMarkerJson; |
| | | boolean isStartInspec = false; |
| | | //当前巡检状态 |
| | | int mInspectionState; |
| | | MapFragmenObserver mapFragmenObserver; |
| | | //当前巡检记录的相关信息 |
| | | InspectionBean mInspectionBean; |
| | | LatLonBean lastLatLonBean; |
| | | InspectionRequest inspectionRequest; |
| | | |
| | | @Override |
| | | public void onAttach(@NonNull Context context) { |
| | |
| | | public void onCreate(@Nullable Bundle savedInstanceState) { |
| | | super.onCreate(savedInstanceState); |
| | | Log.i(TAG, "onCreate"); |
| | | isStartInspec = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.isStartInspec, false); |
| | | |
| | | mInspectionState = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.inspectionState, 0); |
| | | } |
| | | |
| | | @Override |
| | | public void onStart() { |
| | | super.onStart(); |
| | | Log.i(TAG, "onStart"); |
| | | } |
| | | |
| | | /** |
| | | * 修改巡检状态 |
| | | */ |
| | | private void chageInspecState() { |
| | | Intent location = new Intent(this.getActivity(), MyLocationService.class); |
| | | location.putExtra("isSingle", false); |
| | | if (isStartInspec) { |
| | | //获取定位服务传过来的坐标点 |
| | | LiveEventBus.get(CommonKeyName.locationData).observeForever(new Observer<Object>() { |
| | | @Override |
| | | public void onChanged(Object o) { |
| | | LatLonBean latLonBean = (LatLonBean) o; |
| | | mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLatitude()+ "\",\"" + latLonBean.getLongitude()+ "\")", value -> { |
| | | }); |
| | | } |
| | | }); |
| | | binding.stateText.setVisibility(View.VISIBLE); |
| | | binding.inspectButton.setText("终"); |
| | | //开启定位 |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
| | | this.getActivity().startForegroundService(location); |
| | | } else { |
| | | this.getActivity().startService(location); |
| | | } |
| | | } else { |
| | | binding.stateText.setVisibility(View.GONE); |
| | | binding.inspectButton.setText("巡"); |
| | | //关闭定位 |
| | | this.getActivity().stopService(location); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | initLocalData(); |
| | | getMarkerData(); |
| | | //显示巡检状态 |
| | | chageInspecState(); |
| | | chageInspecState(mInspectionState); |
| | | return binding.getRoot(); |
| | | } |
| | | |
| | |
| | | * 获取取水口列表 |
| | | */ |
| | | private void getMarkerData() { |
| | | ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + ":8085/project/intake/all", MarkerResult.class, null, new SubscriberListener<BaseResponse<MarkerResult>>() { |
| | | ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/project/intake/all", MarkerResult.class, null, new SubscriberListener<BaseResponse<MarkerResult>>() { |
| | | @Override |
| | | public void onNext(BaseResponse<MarkerResult> t) { |
| | | if (t.isSuccess()) { |
| | |
| | | |
| | | |
| | | void initView() { |
| | | //跳转到指定位置 |
| | | binding.flyBtn.setOnClickListener(v -> { |
| | | mWebView.evaluateJavascript("javascript:locationOverLay(116.399565,39.89432)", value -> { |
| | | }); |
| | | }); |
| | | |
| | | mWebView.setWebViewClient(new WebViewClient() { |
| | | @Override |
| | | public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { |
| | |
| | | }); |
| | | //巡检按钮 |
| | | binding.inspectButton.setOnClickListener(v -> { |
| | | if (isStartInspec){ |
| | | ConfirmDialog confirmDialog=new ConfirmDialog(MapFragment.this.getActivity(), "提示", "确认关闭巡检吗?", new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | isStartInspec = !isStartInspec; |
| | | chageInspecState(); |
| | | } |
| | | }); |
| | | }else { |
| | | isStartInspec = !isStartInspec; |
| | | chageInspecState(); |
| | | chageInspecState(InspectionUtils.STAT_INSPECTION); |
| | | }); |
| | | //暂停巡检 |
| | | binding.inspectPause.setOnClickListener(v -> { |
| | | if (mInspectionState == InspectionUtils.STAT_INSPECTION) { |
| | | chageInspecState(InspectionUtils.PAUSE_INSPECTION); |
| | | } else { |
| | | chageInspecState(InspectionUtils.STAT_INSPECTION); |
| | | } |
| | | |
| | | }); |
| | | //停止巡检 |
| | | binding.inspectClose.setOnClickListener(v -> { |
| | | chageInspecState(InspectionUtils.STOP_INSPECTION); |
| | | }); |
| | | } |
| | | |
| | |
| | | */ |
| | | private void getCenterPoint() { |
| | | |
| | | ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + ":8080/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() { |
| | | ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + "/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() { |
| | | @Override |
| | | public void onNext(BaseResponse<CenterPointResult> t) { |
| | | if (t.isSuccess()) { |
| | |
| | | binding.bottomLL.setVisibility(View.GONE); |
| | | } |
| | | |
| | | /** |
| | | * 上报巡检记录 |
| | | */ |
| | | private void pushLocationData(InspectionLocationBean inspectionLocationBean) { |
| | | inspectionRequest.setInspectId(inspectionLocationBean.getInspectId()); |
| | | inspectionRequest.setInspectorId(inspectionLocationBean.getInspectorId()); |
| | | if (mInspectionBean != null) { |
| | | inspectionRequest.setStartTime(mInspectionBean.getStartTime()); |
| | | inspectionRequest.setStopTime(mInspectionBean.getStopTime()); |
| | | } |
| | | InspectionRequest.Track track = new InspectionRequest.Track(); |
| | | track.setLat(inspectionLocationBean.getLat()); |
| | | track.setLng(inspectionLocationBean.getLng()); |
| | | track.setLocateTime(inspectionLocationBean.getLocateTime()); |
| | | inspectionRequest.getTracks().clear(); |
| | | inspectionRequest.addTracks(track); |
| | | ApiManager.getInstance().requestPostHideLoading(MapFragment.this.getContext(), BASE_URL + "/app/inspect/save", LoginResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<LoginResult>>() { |
| | | @Override |
| | | public void onNext(BaseResponse<LoginResult> t) { |
| | | try { |
| | | if (t.isSuccess()) { |
| | | inspectionLocationBean.setPost(true); |
| | | updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); |
| | | } else { |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | CrashReport.postCatchedException(e); |
| | | } |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 开始巡检 |
| | | */ |
| | | private void startInspection() { |
| | | DaoSingleton.getAsynchInstance(this.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionBean -> { |
| | | // 更新 UI |
| | | mInspectionBean = inspectionBean; |
| | | }); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 定位监听 |
| | | */ |
| | | private Observer<Object> locationObserver = new Observer<Object>() { |
| | | @Override |
| | | public void onChanged(Object o) { |
| | | if (mInspectionBean != null) { |
| | | LatLonBean latLonBean = (LatLonBean) o; |
| | | if (InspectionUtils.isThanMinMeters(lastLatLonBean, latLonBean)) { |
| | | //大于最小距离 |
| | | lastLatLonBean = latLonBean; |
| | | Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude()); |
| | | InspectionLocationBean inspectionLocationBean = createInspectionLocation(latLonBean); |
| | | addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); |
| | | //更新到地图 |
| | | mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> { |
| | | }); |
| | | //上传坐标 |
| | | pushLocationData(inspectionLocationBean); |
| | | } else { |
| | | Log.d(TAG, "isThanMinMeters>>>false"); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 创建InspectionLocationBean |
| | | */ |
| | | private InspectionLocationBean createInspectionLocation(LatLonBean latLonBean) { |
| | | InspectionLocationBean inspectionLocationBean = new InspectionLocationBean(); |
| | | inspectionLocationBean.setInspectId(mInspectionBean.getInspectId()); |
| | | inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr()); |
| | | inspectionLocationBean.setPost(false); |
| | | inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId); |
| | | inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude())); |
| | | inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude())); |
| | | return inspectionLocationBean; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 修改巡检状态 |
| | | */ |
| | | private void chageInspecState(int inspectionState) { |
| | | Intent location = new Intent(this.getActivity(), MyLocationService.class); |
| | | location.putExtra("isSingle", false); |
| | | //0没有开始,1开始,2暂停,3关闭 |
| | | switch (inspectionState) { |
| | | case 0: |
| | | binding.inspectButton.setVisibility(View.VISIBLE); |
| | | binding.inspectRL.setVisibility(View.GONE); |
| | | binding.inspectButton.setText("巡"); |
| | | LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver); |
| | | //关闭定位 |
| | | this.getActivity().stopService(location); |
| | | break; |
| | | case 1: |
| | | //添加新的巡检记录 |
| | | startInspection(); |
| | | //获取定位服务传过来的坐标点 |
| | | LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver); |
| | | binding.inspectRL.setVisibility(View.VISIBLE); |
| | | binding.inspectButton.setVisibility(View.GONE); |
| | | binding.inspectPause.setText("暂停"); |
| | | binding.stateText.setText("已开启巡检"); |
| | | binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.base_blue)); |
| | | //开启定位 |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
| | | this.getActivity().startForegroundService(location); |
| | | } else { |
| | | this.getActivity().startService(location); |
| | | } |
| | | mInspectionBean = InspectionUtils.startInspection(this.getContext()); |
| | | inspectionRequest = new InspectionRequest(); |
| | | break; |
| | | case 2://暂停 |
| | | |
| | | LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver); |
| | | //关闭定位 |
| | | this.getActivity().stopService(location); |
| | | binding.stateText.setText("已暂停巡检"); |
| | | binding.inspectPause.setText("继续"); |
| | | binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.inspect_rl_bg_color)); |
| | | break; |
| | | case 3: |
| | | ConfirmDialog confirmDialog = new ConfirmDialog(MapFragment.this.getActivity(), "提示", "确认关闭巡检吗?", new ConfirmDialog.ConfirmOnClickListener() { |
| | | @Override |
| | | public void onClick(ConfirmDialog confirmDialog, View v) { |
| | | confirmDialog.dismiss(); |
| | | chageInspecState(InspectionUtils.NO_INSPECTION); |
| | | } |
| | | }); |
| | | confirmDialog.show(); |
| | | break; |
| | | default: |
| | | } |
| | | mInspectionState = inspectionState; |
| | | |
| | | } |
| | | } |