diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java new file mode 100644 index 0000000..f37be11 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java @@ -0,0 +1,94 @@ +package com.casic.dcms.vm; + +import android.content.Context; + +import androidx.lifecycle.MutableLiveData; + +import com.casic.dcms.model.ProcessPersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.pengxh.androidx.lite.base.BaseViewModel; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.ObserverSubscriber; + +import java.io.IOException; + +import okhttp3.ResponseBody; +import rx.Observable; + +public class WorkerViewModel extends BaseViewModel { + private final Gson gson = new Gson(); + public MutableLiveData workerModel = new MutableLiveData<>(); + public MutableLiveData processPersonModel = new MutableLiveData<>(); + + public void getWorkers(Context context, String deptid, String roleTips, String isOnLine) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + loadState.setValue(LoadState.Success); + WorkerBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + workerModel.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getSubordinateWorker(Context context) { + Observable observable = RetrofitServiceManager.getProcessPersonResult(); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + processPersonModel.setValue(resultBean); + } else { + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java new file mode 100644 index 0000000..f37be11 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java @@ -0,0 +1,94 @@ +package com.casic.dcms.vm; + +import android.content.Context; + +import androidx.lifecycle.MutableLiveData; + +import com.casic.dcms.model.ProcessPersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.pengxh.androidx.lite.base.BaseViewModel; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.ObserverSubscriber; + +import java.io.IOException; + +import okhttp3.ResponseBody; +import rx.Observable; + +public class WorkerViewModel extends BaseViewModel { + private final Gson gson = new Gson(); + public MutableLiveData workerModel = new MutableLiveData<>(); + public MutableLiveData processPersonModel = new MutableLiveData<>(); + + public void getWorkers(Context context, String deptid, String roleTips, String isOnLine) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + loadState.setValue(LoadState.Success); + WorkerBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + workerModel.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getSubordinateWorker(Context context) { + Observable observable = RetrofitServiceManager.getProcessPersonResult(); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + processPersonModel.setValue(resultBean); + } else { + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/app/src/main/res/layout/activity_online_worker.xml b/app/src/main/res/layout/activity_online_worker.xml new file mode 100644 index 0000000..bc39edd --- /dev/null +++ b/app/src/main/res/layout/activity_online_worker.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java new file mode 100644 index 0000000..f37be11 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java @@ -0,0 +1,94 @@ +package com.casic.dcms.vm; + +import android.content.Context; + +import androidx.lifecycle.MutableLiveData; + +import com.casic.dcms.model.ProcessPersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.pengxh.androidx.lite.base.BaseViewModel; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.ObserverSubscriber; + +import java.io.IOException; + +import okhttp3.ResponseBody; +import rx.Observable; + +public class WorkerViewModel extends BaseViewModel { + private final Gson gson = new Gson(); + public MutableLiveData workerModel = new MutableLiveData<>(); + public MutableLiveData processPersonModel = new MutableLiveData<>(); + + public void getWorkers(Context context, String deptid, String roleTips, String isOnLine) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + loadState.setValue(LoadState.Success); + WorkerBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + workerModel.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getSubordinateWorker(Context context) { + Observable observable = RetrofitServiceManager.getProcessPersonResult(); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + processPersonModel.setValue(resultBean); + } else { + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/app/src/main/res/layout/activity_online_worker.xml b/app/src/main/res/layout/activity_online_worker.xml new file mode 100644 index 0000000..bc39edd --- /dev/null +++ b/app/src/main/res/layout/activity_online_worker.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_person.xml b/app/src/main/res/layout/activity_person.xml deleted file mode 100644 index d80f717..0000000 --- a/app/src/main/res/layout/activity_person.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java new file mode 100644 index 0000000..f37be11 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java @@ -0,0 +1,94 @@ +package com.casic.dcms.vm; + +import android.content.Context; + +import androidx.lifecycle.MutableLiveData; + +import com.casic.dcms.model.ProcessPersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.pengxh.androidx.lite.base.BaseViewModel; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.ObserverSubscriber; + +import java.io.IOException; + +import okhttp3.ResponseBody; +import rx.Observable; + +public class WorkerViewModel extends BaseViewModel { + private final Gson gson = new Gson(); + public MutableLiveData workerModel = new MutableLiveData<>(); + public MutableLiveData processPersonModel = new MutableLiveData<>(); + + public void getWorkers(Context context, String deptid, String roleTips, String isOnLine) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + loadState.setValue(LoadState.Success); + WorkerBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + workerModel.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getSubordinateWorker(Context context) { + Observable observable = RetrofitServiceManager.getProcessPersonResult(); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + processPersonModel.setValue(resultBean); + } else { + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/app/src/main/res/layout/activity_online_worker.xml b/app/src/main/res/layout/activity_online_worker.xml new file mode 100644 index 0000000..bc39edd --- /dev/null +++ b/app/src/main/res/layout/activity_online_worker.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_person.xml b/app/src/main/res/layout/activity_person.xml deleted file mode 100644 index d80f717..0000000 --- a/app/src/main/res/layout/activity_person.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_worker_list.xml b/app/src/main/res/layout/activity_worker_list.xml new file mode 100644 index 0000000..6e6f79a --- /dev/null +++ b/app/src/main/res/layout/activity_worker_list.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java new file mode 100644 index 0000000..f37be11 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java @@ -0,0 +1,94 @@ +package com.casic.dcms.vm; + +import android.content.Context; + +import androidx.lifecycle.MutableLiveData; + +import com.casic.dcms.model.ProcessPersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.pengxh.androidx.lite.base.BaseViewModel; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.ObserverSubscriber; + +import java.io.IOException; + +import okhttp3.ResponseBody; +import rx.Observable; + +public class WorkerViewModel extends BaseViewModel { + private final Gson gson = new Gson(); + public MutableLiveData workerModel = new MutableLiveData<>(); + public MutableLiveData processPersonModel = new MutableLiveData<>(); + + public void getWorkers(Context context, String deptid, String roleTips, String isOnLine) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + loadState.setValue(LoadState.Success); + WorkerBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + workerModel.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getSubordinateWorker(Context context) { + Observable observable = RetrofitServiceManager.getProcessPersonResult(); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + processPersonModel.setValue(resultBean); + } else { + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/app/src/main/res/layout/activity_online_worker.xml b/app/src/main/res/layout/activity_online_worker.xml new file mode 100644 index 0000000..bc39edd --- /dev/null +++ b/app/src/main/res/layout/activity_online_worker.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_person.xml b/app/src/main/res/layout/activity_person.xml deleted file mode 100644 index d80f717..0000000 --- a/app/src/main/res/layout/activity_person.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_worker_list.xml b/app/src/main/res/layout/activity_worker_list.xml new file mode 100644 index 0000000..6e6f79a --- /dev/null +++ b/app/src/main/res/layout/activity_worker_list.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_person_list.xml b/app/src/main/res/layout/fragment_person_list.xml deleted file mode 100644 index 61cb334..0000000 --- a/app/src/main/res/layout/fragment_person_list.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c007b..fdb7255 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,8 @@ - + + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index f071931..4e2eb82 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -17,7 +17,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.OvertimeCaseActivity; -import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.SearchCaseActivity; import com.casic.dcms.view.UrgentCaseActivity; import com.casic.dcms.view.bridge.BridgeMaintainActivity; @@ -35,6 +34,7 @@ import com.casic.dcms.view.upload.BusinessCaseActivity; import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; +import com.casic.dcms.view.worker.OnLineWorkerActivity; import com.casic.dcms.vm.HomePageViewModel; import com.casic.dcms.vm.UserViewModel; import com.pengxh.androidx.lite.adapter.ViewHolder; @@ -125,7 +125,7 @@ intent.setClass(requireContext(), DataAnalysisActivity.class); break; case "在岗人员": - intent.setClass(requireContext(), PersonActivity.class); + intent.setClass(requireContext(), OnLineWorkerActivity.class); break; case "案卷查询": intent.setClass(requireContext(), SearchCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java deleted file mode 100644 index 46f4152..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.casic.dcms.fragment; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.adapter.PersonListAdapter; -import com.casic.dcms.databinding.FragmentPersonListBinding; -import com.casic.dcms.model.PersonBean; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.vm.PersonViewModel; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class PersonListFragment extends AndroidxBaseFragment { - - private final Set deptSet = new HashSet<>(); - private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 - private PersonViewModel statusViewModel; - private PersonListAdapter onlinePersonAdapter; - private List deptList = new ArrayList<>(); //部门名集合 - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - onlinePersonAdapter = new PersonListAdapter(requireContext()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initEvent() { - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - deptList.clear(); - for (PersonStatusBean.DataDTO bean : dataBeans) { - deptSet.add(bean.getDeptName()); - } - //hashSet去重然后转List - deptList = new ArrayList<>(deptSet); - if (deptList.size() > 0) { - deptAndPersons.clear(); - for (String title : deptList) { - List beanList = new ArrayList<>(); - for (PersonStatusBean.DataDTO dataBean : dataBeans) { - if (title.equals(dataBean.getDeptName())) { - PersonBean personBean = new PersonBean(); - personBean.setPersonDept(dataBean.getDeptName()); - personBean.setPersonName(dataBean.getName()); - personBean.setPersonPhone(dataBean.getPhone()); - personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); - personBean.setOnLine(dataBean.isOnLine()); - beanList.add(personBean); - } - } - deptAndPersons.add(beanList); - } - onlinePersonAdapter.setData(deptList, deptAndPersons); - getBinding().deptTreeView.setAdapter(onlinePersonAdapter); - } - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java b/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java deleted file mode 100644 index 3baa202..0000000 --- a/app/src/main/java/com/casic/dcms/fragment/PersonOnMapFragment.java +++ /dev/null @@ -1,198 +0,0 @@ -package com.casic.dcms.fragment; - -import android.annotation.SuppressLint; -import android.graphics.drawable.BitmapDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.FragmentPersonMapBinding; -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.PointPersonBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.PersonViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.pengxh.androidx.lite.base.AndroidxBaseFragment; -import com.pengxh.androidx.lite.kit.ContextKit; -import com.pengxh.androidx.lite.kit.IntKit; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class PersonOnMapFragment extends AndroidxBaseFragment { - - private static final String TAG = "PersonOnMapFragment"; - private WeakReferenceHandler weakReferenceHandler; - private PersonViewModel statusViewModel; - private ListenableList graphicsOverlays; - - @Override - protected void setupTopBarLayout() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - weakReferenceHandler = new WeakReferenceHandler(callback); - statusViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - statusViewModel.getPersonByStatus(requireContext(), "", "", ""); - - getBinding().mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - getBinding().mapView.setViewpointScaleAsync(64000.0); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - getBinding().mapView.setMap(arcGISMap); - graphicsOverlays = getBinding().mapView.getGraphicsOverlays(); - } - - @Override - protected void observeRequestState() { - - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - List personBeans = new ArrayList<>(); - statusViewModel.personStatusModel.observe(this, new Observer() { - @Override - public void onChanged(PersonStatusBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeans = resultBean.getData(); - if (!dataBeans.isEmpty()) { - for (PersonStatusBean.DataDTO bean : dataBeans) { - if (bean.isOnLine()) { - String lng = bean.getPositionLng(); - String lat = bean.getPositionLat(); - if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { - PointPersonBean personBean = new PointPersonBean(); - personBean.setPersonName(bean.getName()); - personBean.setPhoneNumber(bean.getPhone()); - personBean.setPersonDept(bean.getDeptName()); - personBean.setLastOnlineTime(bean.getLastTimeFmt()); - personBean.setLastLng(Double.parseDouble(lng)); - personBean.setLastLat(Double.parseDouble(lat)); - personBeans.add(personBean); - } - } - } - addPictureMarker(personBeans); - } - } - } - }); - - getBinding().mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(requireContext(), getBinding().mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointPersonBean dataBean : personBeans) { - if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 - ) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051901; - message.obj = dataBean; - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051902); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private void addPictureMarker(List beans) { - for (PointPersonBean bean : beans) { - BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(requireContext(), R.mipmap.on_line); - if (caseDrawable != null) { - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = graphicsOverlay.getGraphics(); - overlayGraphics.add(new Graphic( - new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), - pictureMarker) - ); - graphicsOverlays.add(graphicsOverlay); - } - } - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051901: - PointPersonBean dataBean = (PointPersonBean) msg.obj; - View popupView = LayoutInflater.from(requireContext()).inflate(R.layout.popu_person, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView deptNameView = popupView.findViewById(R.id.deptNameView); - TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); - TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); - userNameView.setText(dataBean.getPersonName()); - deptNameView.setText(dataBean.getPersonDept()); - phoneNumberView.setText(dataBean.getPhoneNumber()); - lastTimeView.setText(dataBean.getLastOnlineTime()); - QMUIPopups.popup(requireContext(), (int) (ContextKit.getScreenWidth(requireContext()) * 0.8)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(IntKit.dp2px(requireContext(), 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_AUTO) - .onDismiss(null) - .show(getBinding().mapView); - break; - case 2021051902: - StringKit.show(requireContext(), "附近无工作人员,请重新选点"); - break; - } - return true; - }; -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java new file mode 100644 index 0000000..621b18c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/OnLinePersonMapBean.java @@ -0,0 +1,58 @@ +package com.casic.dcms.model; + +public class OnLinePersonMapBean { + private String personName; + private String phoneNumber; + private String personDept; + private String lastOnlineTime; + private double lastLat; + private double lastLng; + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPersonDept() { + return personDept; + } + + public void setPersonDept(String personDept) { + this.personDept = personDept; + } + + public String getLastOnlineTime() { + return lastOnlineTime; + } + + public void setLastOnlineTime(String lastOnlineTime) { + this.lastOnlineTime = lastOnlineTime; + } + + public double getLastLat() { + return lastLat; + } + + public void setLastLat(double lastLat) { + this.lastLat = lastLat; + } + + public double getLastLng() { + return lastLng; + } + + public void setLastLng(double lastLng) { + this.lastLng = lastLng; + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java b/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java deleted file mode 100644 index 1843618..0000000 --- a/app/src/main/java/com/casic/dcms/model/PersonStatusBean.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -public class PersonStatusBean { - - private int code; - private List data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private String account; - private String deptId; - private String deptName; - private String deviceName; - private String id; - private String imei; - private String lastTime; - private String lastTimeFmt; - private String name; - private String networkNumber; - private boolean onLine; - private String phone; - private String posLastTime; - private String positionLat; - private String positionLng; - private String targetId; - private String userId; - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public String getDeptId() { - return deptId; - } - - public void setDeptId(String deptId) { - this.deptId = deptId; - } - - public String getDeptName() { - return deptName; - } - - public void setDeptName(String deptName) { - this.deptName = deptName; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getLastTime() { - return lastTime; - } - - public void setLastTime(String lastTime) { - this.lastTime = lastTime; - } - - public String getLastTimeFmt() { - return lastTimeFmt; - } - - public void setLastTimeFmt(String lastTimeFmt) { - this.lastTimeFmt = lastTimeFmt; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNetworkNumber() { - return networkNumber; - } - - public void setNetworkNumber(String networkNumber) { - this.networkNumber = networkNumber; - } - - public boolean isOnLine() { - return onLine; - } - - public void setOnLine(boolean onLine) { - this.onLine = onLine; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public String getPosLastTime() { - return posLastTime; - } - - public void setPosLastTime(String posLastTime) { - this.posLastTime = posLastTime; - } - - public String getPositionLat() { - return positionLat; - } - - public void setPositionLat(String positionLat) { - this.positionLat = positionLat; - } - - public String getPositionLng() { - return positionLng; - } - - public void setPositionLng(String positionLng) { - this.positionLng = positionLng; - } - - public String getTargetId() { - return targetId; - } - - public void setTargetId(String targetId) { - this.targetId = targetId; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java b/app/src/main/java/com/casic/dcms/model/PointPersonBean.java deleted file mode 100644 index 6a572f3..0000000 --- a/app/src/main/java/com/casic/dcms/model/PointPersonBean.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.casic.dcms.model; - -public class PointPersonBean { - private String personName; - private String phoneNumber; - private String personDept; - private String lastOnlineTime; - private double lastLat; - private double lastLng; - - public String getPersonName() { - return personName; - } - - public void setPersonName(String personName) { - this.personName = personName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getPersonDept() { - return personDept; - } - - public void setPersonDept(String personDept) { - this.personDept = personDept; - } - - public String getLastOnlineTime() { - return lastOnlineTime; - } - - public void setLastOnlineTime(String lastOnlineTime) { - this.lastOnlineTime = lastOnlineTime; - } - - public double getLastLat() { - return lastLat; - } - - public void setLastLat(double lastLat) { - this.lastLat = lastLat; - } - - public double getLastLng() { - return lastLng; - } - - public void setLastLng(double lastLng) { - this.lastLng = lastLng; - } -} diff --git a/app/src/main/java/com/casic/dcms/model/WorkerBean.java b/app/src/main/java/com/casic/dcms/model/WorkerBean.java new file mode 100644 index 0000000..fd77304 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/WorkerBean.java @@ -0,0 +1,199 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class WorkerBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + private String account; + private String deptId; + private String deptName; + private String deviceName; + private String id; + private String imei; + private String lastTime; + private String lastTimeFmt; + private String name; + private String networkNumber; + private boolean onLine; + private String phone; + private String posLastTime; + private String positionLat; + private String positionLng; + private String targetId; + private String userId; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public String getLastTimeFmt() { + return lastTimeFmt; + } + + public void setLastTimeFmt(String lastTimeFmt) { + this.lastTimeFmt = lastTimeFmt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNetworkNumber() { + return networkNumber; + } + + public void setNetworkNumber(String networkNumber) { + this.networkNumber = networkNumber; + } + + public boolean isOnLine() { + return onLine; + } + + public void setOnLine(boolean onLine) { + this.onLine = onLine; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPosLastTime() { + return posLastTime; + } + + public void setPosLastTime(String posLastTime) { + this.posLastTime = posLastTime; + } + + public String getPositionLat() { + return positionLat; + } + + public void setPositionLat(String positionLat) { + this.positionLat = positionLat; + } + + public String getPositionLng() { + return positionLng; + } + + public void setPositionLng(String positionLng) { + this.positionLng = positionLng; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index fb3c15e..e647dbf 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -431,7 +431,7 @@ ); /** - * 在线人员查询 + * 员查询 */ @GET("/userDevice/userDeviceOnLine") Observable getOnlinePerson( diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 40d74ed..8b15d77 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -338,7 +338,7 @@ } /** - * 在线人员查询 + * 人员查询 */ public static Observable getOnlinePerson(String deptid, String roleTips, String isOnLine) { return api.getOnlinePerson(AuthenticationHelper.getToken(), deptid, roleTips, isOnLine); diff --git a/app/src/main/java/com/casic/dcms/view/PersonActivity.java b/app/src/main/java/com/casic/dcms/view/PersonActivity.java deleted file mode 100644 index b3ac4f1..0000000 --- a/app/src/main/java/com/casic/dcms/view/PersonActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.dcms.view; - -import android.os.Bundle; -import android.widget.LinearLayout; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.casic.dcms.R; -import com.casic.dcms.adapter.SubViewPagerAdapter; -import com.casic.dcms.databinding.ActivityPersonBinding; -import com.casic.dcms.fragment.PersonListFragment; -import com.casic.dcms.fragment.PersonOnMapFragment; -import com.casic.dcms.utils.LinearLayoutHelper; -import com.casic.dcms.utils.ViewGroupHub; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; - -import java.util.ArrayList; -import java.util.List; - -public class PersonActivity extends AndroidxBaseActivity { - - private final String[] pageTitles = new String[]{"人员分布", "人员列表"}; - - @Override - protected void setupTopBarLayout() { - ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); - - binding.titleBarLayout.titleView.setText("在岗人员"); - binding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initOnCreate(@Nullable Bundle savedInstanceState) { - List fragmentList = new ArrayList<>(); - fragmentList.add(new PersonOnMapFragment()); - fragmentList.add(new PersonListFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); - binding.personViewPager.setAdapter(adapter); - //绑定TabLayout - binding.personTabLayout.setupWithViewPager(binding.personViewPager); - LinearLayout linearLayout = (LinearLayout) binding.personTabLayout.getChildAt(0); - LinearLayoutHelper.setDivider(this, linearLayout); - } - - @Override - protected void initEvent() { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java index 33407ba..326b5e7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAdjustDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -51,7 +51,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java index 8eb2d27..32c958c 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptAuthorizeDetailActivity.java @@ -25,7 +25,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -52,7 +52,7 @@ private final Context context = this; private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseOperateViewModel operateViewModel; private List nodeDataBeans = new ArrayList<>(); private List personBeans = new ArrayList<>(); @@ -238,7 +238,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -265,8 +265,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java index efece3d..165c7a7 100644 --- a/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/view/department/DeptTodoDetailActivity.java @@ -24,7 +24,7 @@ import com.casic.dcms.vm.CaseOperateViewModel; import com.casic.dcms.vm.CaseViewModel; import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.PersonViewModel; +import com.casic.dcms.vm.WorkerViewModel; import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.kit.ContextKit; @@ -50,7 +50,7 @@ private CaseViewModel caseViewModel; private NodeViewModel nodeViewModel; private CaseOperateViewModel operateViewModel; - private PersonViewModel personViewModel; + private WorkerViewModel workerViewModel; private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); private String id; private String changeState; @@ -236,7 +236,7 @@ //获取处置类型 nodeViewModel.getNextNode(context, String.valueOf(data.getCaseState())); //获取下级处置人员 - personViewModel.getSubordinatePerson(context); + workerViewModel.getSubordinateWorker(context); } } }); @@ -262,8 +262,8 @@ } }); - personViewModel = new ViewModelProvider(this).get(PersonViewModel.class); - personViewModel.processPersonModel.observe(this, new Observer() { + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.processPersonModel.observe(this, new Observer() { @Override public void onChanged(ProcessPersonBean resultBean) { if (resultBean.getCode() == 200) { diff --git a/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java new file mode 100644 index 0000000..56b30e0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/OnLineWorkerActivity.java @@ -0,0 +1,219 @@ +package com.casic.dcms.view.worker; + +import android.annotation.SuppressLint; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityOnlineWorkerBinding; +import com.casic.dcms.model.OnLinePersonMapBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.kit.ContextKit; +import com.pengxh.androidx.lite.kit.IntKit; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.TitleBarView; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class OnLineWorkerActivity extends AndroidxBaseActivity implements Handler.Callback { + private final WeakReferenceHandler weakReferenceHandler = new WeakReferenceHandler(this); + private final List onlinePersons = new ArrayList<>(); + private WorkerViewModel workerViewModel; + private ListenableList graphicsOverlays; + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + ContextKit.navigatePageTo(OnLineWorkerActivity.this, WorkerListActivity.class); + } + }); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(OnLineWorkerActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + binding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + binding.mapView.setViewpointScaleAsync(64000.0); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + binding.mapView.setMap(arcGISMap); + graphicsOverlays = binding.mapView.getGraphicsOverlays(); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + if (!dataBeans.isEmpty()) { + for (WorkerBean.DataBean bean : dataBeans) { + if (bean.isOnLine()) { + String lng = bean.getPositionLng(); + String lat = bean.getPositionLat(); + if (!TextUtils.isEmpty(lng) || !TextUtils.isEmpty(lat)) { + OnLinePersonMapBean person = new OnLinePersonMapBean(); + person.setPersonName(bean.getName()); + person.setPhoneNumber(bean.getPhone()); + person.setPersonDept(bean.getDeptName()); + person.setLastOnlineTime(bean.getLastTimeFmt()); + person.setLastLng(Double.parseDouble(lng)); + person.setLastLat(Double.parseDouble(lat)); + onlinePersons.add(person); + } + } + } + addPictureMarker(onlinePersons); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + binding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, binding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (OnLinePersonMapBean dataBean : onlinePersons) { + if (Math.abs(dataBean.getLastLng() - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getLastLat() - point.getY()) <= LocaleConstant.DELTA_LAT_10 + ) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051901; + message.obj = dataBean; + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051902); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private void addPictureMarker(List beans) { + BitmapDrawable caseDrawable = (BitmapDrawable) ContextCompat.getDrawable(this, R.mipmap.on_line); + for (OnLinePersonMapBean bean : beans) { + if (caseDrawable != null) { + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = graphicsOverlay.getGraphics(); + overlayGraphics.add(new Graphic( + new Point(bean.getLastLng(), bean.getLastLat(), SpatialReferences.getWgs84()), pictureMarker) + ); + graphicsOverlays.add(graphicsOverlay); + } + } + } + + @Override + public boolean handleMessage(@NonNull Message msg) { + switch (msg.what) { + case 2021051901: + OnLinePersonMapBean dataBean = (OnLinePersonMapBean) msg.obj; + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_person, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView deptNameView = popupView.findViewById(R.id.deptNameView); + TextView phoneNumberView = popupView.findViewById(R.id.phoneNumberView); + TextView lastTimeView = popupView.findViewById(R.id.lastTimeView); + userNameView.setText(dataBean.getPersonName()); + deptNameView.setText(dataBean.getPersonDept()); + phoneNumberView.setText(dataBean.getPhoneNumber()); + lastTimeView.setText(dataBean.getLastOnlineTime()); + QMUIPopups.popup(this, (int) (ContextKit.getScreenWidth(this) * 0.8)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(IntKit.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_AUTO) + .onDismiss(null) + .show(binding.mapView); + break; + case 2021051902: + StringKit.show(this, "附近无工作人员,请重新选点"); + break; + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java new file mode 100644 index 0000000..981e010 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/worker/WorkerListActivity.java @@ -0,0 +1,110 @@ +package com.casic.dcms.view.worker; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.PersonListAdapter; +import com.casic.dcms.databinding.ActivityWorkerListBinding; +import com.casic.dcms.model.PersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.ViewGroupHub; +import com.casic.dcms.vm.WorkerViewModel; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.LoadingDialog; +import com.pengxh.androidx.lite.widget.TitleBarView; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class WorkerListActivity extends AndroidxBaseActivity { + + private final Set deptSet = new HashSet<>(); + private final List> deptAndPersons = new ArrayList<>(); //个人信息集合的集合 + private WorkerViewModel workerViewModel; + private PersonListAdapter onlinePersonAdapter; + private List deptList = new ArrayList<>(); //部门名集合 + + @Override + protected void setupTopBarLayout() { + ViewGroupHub.initImmersionBar(binding.rootView, this, true, R.color.white); + binding.titleView.setOnClickListener(new TitleBarView.OnClickListener() { + @Override + public void onLeftClick() { + finish(); + } + + @Override + public void onRightClick() { + + } + }); + } + + @Override + protected void initOnCreate(@Nullable Bundle savedInstanceState) { + onlinePersonAdapter = new PersonListAdapter(this); + + workerViewModel = new ViewModelProvider(this).get(WorkerViewModel.class); + workerViewModel.workerModel.observe(this, new Observer() { + @Override + public void onChanged(WorkerBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeans = resultBean.getData(); + deptList.clear(); + for (WorkerBean.DataBean bean : dataBeans) { + deptSet.add(bean.getDeptName()); + } + //hashSet去重然后转List + deptList = new ArrayList<>(deptSet); + if (deptList.size() > 0) { + deptAndPersons.clear(); + for (String title : deptList) { + List beanList = new ArrayList<>(); + for (WorkerBean.DataBean dataBean : dataBeans) { + if (title.equals(dataBean.getDeptName())) { + PersonBean personBean = new PersonBean(); + personBean.setPersonDept(dataBean.getDeptName()); + personBean.setPersonName(dataBean.getName()); + personBean.setPersonPhone(dataBean.getPhone()); + personBean.setLastTimeFmt(dataBean.getLastTimeFmt()); + personBean.setOnLine(dataBean.isOnLine()); + beanList.add(personBean); + } + } + deptAndPersons.add(beanList); + } + onlinePersonAdapter.setData(deptList, deptAndPersons); + binding.deptTreeView.setAdapter(onlinePersonAdapter); + } + } + } + }); + workerViewModel.getWorkers(this, "", "", ""); + } + + @Override + protected void observeRequestState() { + workerViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + LoadingDialog.show(WorkerListActivity.this, "获取数据中..."); + } else { + LoadingDialog.dismiss(); + } + } + }); + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java b/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java deleted file mode 100644 index 04111a2..0000000 --- a/app/src/main/java/com/casic/dcms/vm/PersonViewModel.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.casic.dcms.vm; - -import android.content.Context; - -import androidx.lifecycle.MutableLiveData; - -import com.casic.dcms.model.PersonStatusBean; -import com.casic.dcms.model.ProcessPersonBean; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.retrofit.RetrofitServiceManager; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.pengxh.androidx.lite.base.BaseViewModel; -import com.pengxh.androidx.lite.kit.StringKit; -import com.pengxh.androidx.lite.utils.ObserverSubscriber; - -import java.io.IOException; - -import okhttp3.ResponseBody; -import rx.Observable; - -public class PersonViewModel extends BaseViewModel { - private final Gson gson = new Gson(); - public MutableLiveData personStatusModel = new MutableLiveData<>(); - public MutableLiveData processPersonModel = new MutableLiveData<>(); - - public void getPersonByStatus(Context context, String deptid, String roleTips, String isOnLine) { - Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - PersonStatusBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - personStatusModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } - - public void getSubordinatePerson(Context context) { - Observable observable = RetrofitServiceManager.getProcessPersonResult(); - ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { - @Override - public void onCompleted() { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - String response = responseBody.string(); - int responseCode = StringHelper.getResponseCode(response); - if (responseCode == 200) { - ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { - }.getType()); - processPersonModel.setValue(resultBean); - } else { - StringKit.show(context, StringHelper.getResponseMessage(response)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java new file mode 100644 index 0000000..f37be11 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/vm/WorkerViewModel.java @@ -0,0 +1,94 @@ +package com.casic.dcms.vm; + +import android.content.Context; + +import androidx.lifecycle.MutableLiveData; + +import com.casic.dcms.model.ProcessPersonBean; +import com.casic.dcms.model.WorkerBean; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.pengxh.androidx.lite.base.BaseViewModel; +import com.pengxh.androidx.lite.kit.StringKit; +import com.pengxh.androidx.lite.utils.LoadState; +import com.pengxh.androidx.lite.utils.ObserverSubscriber; + +import java.io.IOException; + +import okhttp3.ResponseBody; +import rx.Observable; + +public class WorkerViewModel extends BaseViewModel { + private final Gson gson = new Gson(); + public MutableLiveData workerModel = new MutableLiveData<>(); + public MutableLiveData processPersonModel = new MutableLiveData<>(); + + public void getWorkers(Context context, String deptid, String roleTips, String isOnLine) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getOnlinePerson(deptid, roleTips, isOnLine); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + loadState.setValue(LoadState.Success); + WorkerBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + workerModel.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getSubordinateWorker(Context context) { + Observable observable = RetrofitServiceManager.getProcessPersonResult(); + ObserverSubscriber.addSubscribe(observable, new ObserverSubscriber.OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.getResponseCode(response); + if (responseCode == 200) { + ProcessPersonBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + processPersonModel.setValue(resultBean); + } else { + StringKit.show(context, StringHelper.getResponseMessage(response)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } +} diff --git a/app/src/main/res/layout/activity_online_worker.xml b/app/src/main/res/layout/activity_online_worker.xml new file mode 100644 index 0000000..bc39edd --- /dev/null +++ b/app/src/main/res/layout/activity_online_worker.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_person.xml b/app/src/main/res/layout/activity_person.xml deleted file mode 100644 index d80f717..0000000 --- a/app/src/main/res/layout/activity_person.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_worker_list.xml b/app/src/main/res/layout/activity_worker_list.xml new file mode 100644 index 0000000..6e6f79a --- /dev/null +++ b/app/src/main/res/layout/activity_worker_list.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_person_list.xml b/app/src/main/res/layout/fragment_person_list.xml deleted file mode 100644 index 61cb334..0000000 --- a/app/src/main/res/layout/fragment_person_list.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_person_map.xml b/app/src/main/res/layout/fragment_person_map.xml deleted file mode 100644 index ac8cd4e..0000000 --- a/app/src/main/res/layout/fragment_person_map.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file