From 61992c1be4236c50bc2583276f78d9d6b6165c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=81=A5?= Date: Sat, 30 Oct 2021 15:21:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=8E=A5=E5=8F=A3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baselib/constant/PathConfig.java | 9 +- .../baselib/core/beans/SaveLocationBean.java | 70 ++ .../baselib/core/retrofit_net/BaseUrlApi.java | 6 +- .../tenlionsoft/baselib/utils/TimeUtils.java | 6 + .../keeplive/services/BusinessService.java | 117 ++- commonmodule/src/main/AndroidManifest.xml | 3 +- .../department/ChooseDeptActivity.java | 50 +- .../activitys/logs/StatisticsActivity.java | 32 + .../adapters/LocusStepAdapter.java | 124 ++++ .../beans/DistributionDeptBean.java | 155 ++++ .../commonmodule/beans/DrawMapLineBean.java | 48 ++ .../beans/IncidentRebackBean.java | 11 +- .../commonmodule/beans/LocationPointBean.java | 93 +++ .../commonmodule/beans/LocusTextBean.java | 94 +++ .../beans/SaveHandleIncidentBean.java | 10 +- .../holders/LocusOfflineHolder.java | 28 + .../holders/LocusOnlineHolder.java | 28 + .../holders/LocusStartHolder.java | 28 + .../commonmodule/holders/LocusStayHolder.java | 28 + .../commonmodule/holders/LocusStopHolder.java | 28 + .../tengshisoft/commonmodule/nets/Apis.java | 29 +- .../commonmodule/nets/DeptApis.java | 22 +- .../res/drawable-xhdpi/ic_step_offline.png | Bin 0 -> 15220 bytes .../res/drawable-xhdpi/ic_step_online.png | Bin 0 -> 15056 bytes .../main/res/drawable-xhdpi/ic_step_start.png | Bin 0 -> 15500 bytes .../main/res/drawable-xhdpi/ic_step_stay.png | Bin 0 -> 15498 bytes .../res/drawable/sel_btn_submit_gray_left.xml | 5 + .../drawable/sel_btn_submit_gray_right.xml | 5 + .../res/drawable/sel_btn_text_white_black.xml | 6 + .../drawable/shape_btn_left_radius_blue.xml | 11 + .../drawable/shape_btn_left_radius_gray.xml | 11 + .../drawable/shape_btn_right_radius_blue.xml | 11 + .../drawable/shape_btn_right_radius_gray.xml | 11 + .../main/res/layout/activity_statistics.xml | 9 + .../src/main/res/layout/item_step_offline.xml | 48 ++ .../res/layout/item_step_offline_test.xml | 46 ++ .../src/main/res/layout/item_step_online.xml | 47 ++ .../src/main/res/layout/item_step_start.xml | 54 ++ .../src/main/res/layout/item_step_stay.xml | 50 ++ .../src/main/res/layout/item_step_stop.xml | 54 ++ .../src/main/res/layout/item_step_unusual.xml | 50 ++ gridmodule/src/main/AndroidManifest.xml | 3 +- .../cases/IncidentHandleActivity.java | 19 +- .../cases/IncidentHandleListActivity.java | 15 +- .../activitys/locus/WorkLocusActivity.java | 678 ++++++++++++++++++ .../main/res/layout/activity_work_locus.xml | 223 ++++++ .../mainmodule/base/HomeActivity.java | 3 + .../fragments/GridMainFragment.java | 17 +- .../main/res/layout/fragment_main_grid.xml | 1 + .../IncidentAcceptDeptDetailActivity.java | 10 +- .../IncidentAcceptDeptListActivity.java | 15 +- .../IncidentCheckDeptDetailActivity.java | 11 +- .../IncidentCheckDeptListActivity.java | 14 +- ...ncidentDistributionDeptDetailActivity.java | 14 +- .../IncidentDistributionDeptListActivity.java | 13 +- 55 files changed, 2365 insertions(+), 108 deletions(-) create mode 100644 baselib/src/main/java/com/tenlionsoft/baselib/core/beans/SaveLocationBean.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/logs/StatisticsActivity.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/LocusStepAdapter.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DistributionDeptBean.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DrawMapLineBean.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocationPointBean.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocusTextBean.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOfflineHolder.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOnlineHolder.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStartHolder.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStayHolder.java create mode 100755 commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStopHolder.java create mode 100755 commonmodule/src/main/res/drawable-xhdpi/ic_step_offline.png create mode 100755 commonmodule/src/main/res/drawable-xhdpi/ic_step_online.png create mode 100755 commonmodule/src/main/res/drawable-xhdpi/ic_step_start.png create mode 100755 commonmodule/src/main/res/drawable-xhdpi/ic_step_stay.png create mode 100755 commonmodule/src/main/res/drawable/sel_btn_submit_gray_left.xml create mode 100755 commonmodule/src/main/res/drawable/sel_btn_submit_gray_right.xml create mode 100755 commonmodule/src/main/res/drawable/sel_btn_text_white_black.xml create mode 100755 commonmodule/src/main/res/drawable/shape_btn_left_radius_blue.xml create mode 100755 commonmodule/src/main/res/drawable/shape_btn_left_radius_gray.xml create mode 100755 commonmodule/src/main/res/drawable/shape_btn_right_radius_blue.xml create mode 100755 commonmodule/src/main/res/drawable/shape_btn_right_radius_gray.xml create mode 100644 commonmodule/src/main/res/layout/activity_statistics.xml create mode 100755 commonmodule/src/main/res/layout/item_step_offline.xml create mode 100755 commonmodule/src/main/res/layout/item_step_offline_test.xml create mode 100755 commonmodule/src/main/res/layout/item_step_online.xml create mode 100755 commonmodule/src/main/res/layout/item_step_start.xml create mode 100755 commonmodule/src/main/res/layout/item_step_stay.xml create mode 100755 commonmodule/src/main/res/layout/item_step_stop.xml create mode 100755 commonmodule/src/main/res/layout/item_step_unusual.xml create mode 100644 gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/locus/WorkLocusActivity.java create mode 100644 gridmodule/src/main/res/layout/activity_work_locus.xml diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java index 3e1c843..7f6f53d 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java @@ -27,6 +27,7 @@ public class PathConfig { public static final String SESSION_ID = "sessionId"; public static final int MSG_REGISTER = 1000;//注册socket public static final int MSG_TYPE_TEXT = 2001;//聊天消息 文本信息 + public static final int MSG_TYPE_POINT = 11001;//发送定位信息 public static final int MSG_NOTICE = 3001;//系统通知 public static final int MSG_NOTICE_TARGET = 3003;//系统带参数的通知 public static final int MSG_TYPE_STATE = 9001;//消息发送的状态 @@ -159,7 +160,7 @@ public class PathConfig { public static final String USER_TYPE_N = "bc405346-8714-4ded-89ac-9cc4d755f66a"; public static final String USER_TYPE_X = "25affe67-134c-4a32-ba41-64b0cfedc782"; // public static final String APP_VERSION_ID = "f311fd32-cd36-45a1-9652-599d5f2c2d4f";/*正式App下载码*/ - public static final String APP_VERSION_ID = "c16826e7-8cfb-4db1-8844-09d2be697bc7";/*测试App下载码*/ + public static final String APP_VERSION_ID = "4f75940c-930f-4576-ae0b-b8f699aa5bdc";/*测试App下载码*/ public static final String NEWS_ID = "f497904b-7727-4832-891c-604c36ae4167";//文化动态ID public static final String NEWS_SHOW_ID = "f1d5d313-f728-4dda-9843-1116d97e17b0";//展览展示ID @@ -193,7 +194,8 @@ public class PathConfig { public static final double LA = 41.000587;//纬度 public static final double LO = 113.138723;//经度 //百度定位city-code - public static final String CITY_BAIDU_CODE = "168";//乌兰察布市 +// public static final String CITY_BAIDU_CODE = "168";//乌兰察布市 + public static final String CITY_BAIDU_CODE = "321";//呼和浩特市 public static final String DEFAULT_AREA_1 = "99537";//默认一级地区 内蒙古 public static final String DEFAULT_AREA_2 = "110889";//默认二级地区 乌兰察布 @@ -314,6 +316,8 @@ public class PathConfig { public static final String PATH_MODULE_COMMON_ACTIVITY_SEL_DEPT = "/modulecommon/activity/chooseDept";//部门选择接口 public static final String PATH_MODULE_COMMON_ACTIVITY_SEL_PERSON = "/modulecommon/activity/choosePerson";//人员选择 public static final String PATH_MODULE_COMMON_ACTIVITY_INCIDENT_LOG = "/modulecommon/activity/incidentLog";//事件日志 + + public static final String PATH_MODULE_COMMON_ACTIVITY_STATISTICS = "/modulecommon/activity/statistics";//统计分析 //======================网格员================================================== //小区 public static final String PATH_MODULE_GRID_ACTIVITY_COMMUNITY_MANAGE = "/modulegrid/activity/communityManage";//小区管理 @@ -496,6 +500,7 @@ public class PathConfig { public static final String PATH_MODULE_GRID_ACTIVITY_INCIDENT_CHECK_LIST = "/modulegrid/activity/incidentCheckList";//事件核查 public static final String PATH_MODULE_GRID_ACTIVITY_INCIDENT_CHECK_DETAIL = "/modulegrid/activity/incidentCheckDetail";//事件核查详情 + public static final String PATH_MODULE_GRID_ACTIVITY_WORK_LOCUS = "/modulegrid/activity/locusWork";//工作轨迹 /*=========================================中心端============================================*/ public static final String PATH_MODULE_COMMAND_ACTIVITY_INCIDENT_ACCEPT_LIST = "/modulecommand/activity/incidentAcceptList";//事件受理列表 public static final String PATH_MODULE_COMMAND_ACTIVITY_INCIDENT_ACCEPT_DETAIL = "/modulecommand/activity/incidentAcceptDetail";//事件受理 diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/SaveLocationBean.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/SaveLocationBean.java new file mode 100644 index 0000000..1fd810b --- /dev/null +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/SaveLocationBean.java @@ -0,0 +1,70 @@ +package com.tenlionsoft.baselib.core.beans; + +/** + * 作者: adam + * 日期: 2021/10/29 - 4:56 下午 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class SaveLocationBean { +// @CheckEmptyAnnotation(name = "用户经度") + private String userLng; +// @CheckEmptyAnnotation(name = "用户维度") + private String userLat; +// @CheckNumberAnnotation(name = "是否越界") + private Integer isOverstep; +// @CheckEmptyAnnotation(name = "创建人") + private String creator; +// @CheckEmptyAnnotation(name = "用户名") + private String userUsername; +// @CheckEmptyAnnotation(name = "昵称") + private String userName; + + public String getUserLng() { + return userLng; + } + + public void setUserLng(String userLng) { + this.userLng = userLng; + } + + public String getUserLat() { + return userLat; + } + + public void setUserLat(String userLat) { + this.userLat = userLat; + } + + public Integer getIsOverstep() { + return isOverstep; + } + + public void setIsOverstep(Integer isOverstep) { + this.isOverstep = isOverstep; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getUserUsername() { + return userUsername; + } + + public void setUserUsername(String userUsername) { + this.userUsername = userUsername; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } +} diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java index cd328f8..1c319a7 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java @@ -10,7 +10,7 @@ import com.tenlionsoft.baselib.constant.PathConfig; public class BaseUrlApi { // public static final String IP = "http://192.168.0.109:8080/";/* 正式IP */ - public static final String IP = "http://192.168.0.103:7011/";/* 正式IP */ + public static final String IP = "http://192.168.0.120:8080/";/* 正式IP */ public static final String SYS_USERCENTER = "usercenter/"; public static final String SYS_POPULATION = "population/";/*人口系统*/ public static final String SYS_CASE = "case/";/*事件部件*/ @@ -19,7 +19,7 @@ public class BaseUrlApi { public static final String SYS_TASK = "systemtask/";/*任务系统*/ public static final String TEMP_IP = "http://192.168.0.120:8080/"; - public static final String BASE_MAIN_IP = IP + SYS_USERCENTER; + public static final String BASE_MAIN_IP = IP + SYS_CASE; public static final String BASE_CASE_IP = IP + SYS_CASE; public static final String BASE_SECURITY_IP = IP + SYS_SECURITY; public static final String BASE_HOUSE_IP = IP + SYS_HOUSE; @@ -27,7 +27,7 @@ public class BaseUrlApi { public static final String BASE_TASK_IP = IP + SYS_TASK; public static final String BASE_URL = BASE_MAIN_IP;//基础URL - public static final String SOCKET_IP = "http://192.168.0.120:8080/websocket";/*SocketIP*/ + public static final String SOCKET_IP = "http://192.168.0.120:8081/websocket";/*SocketIP*/ //地图页面展示类型 diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/utils/TimeUtils.java b/baselib/src/main/java/com/tenlionsoft/baselib/utils/TimeUtils.java index aeefa6f..2e70461 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/utils/TimeUtils.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/utils/TimeUtils.java @@ -117,6 +117,12 @@ public final class TimeUtils { return format.format(date); } + public static String getCurrentDate() { + Date date = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + return format.format(date); + } + /** * 获取当前时间 * diff --git a/chatmodule/src/main/java/com/tengshisoft/chatmodule/keeplive/services/BusinessService.java b/chatmodule/src/main/java/com/tengshisoft/chatmodule/keeplive/services/BusinessService.java index f31a7c7..3fda53f 100644 --- a/chatmodule/src/main/java/com/tengshisoft/chatmodule/keeplive/services/BusinessService.java +++ b/chatmodule/src/main/java/com/tengshisoft/chatmodule/keeplive/services/BusinessService.java @@ -19,11 +19,15 @@ import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDLocation; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; +import com.baidu.mapapi.model.LatLng; +import com.baidu.mapapi.utils.SpatialRelationUtil; import com.google.gson.Gson; +import com.tengshisoft.chatmodule.adapter.UserContactAdapter; import com.tenlionsoft.baselib.constant.GlobalProvider; import com.tenlionsoft.baselib.constant.PathConfig; import com.tenlionsoft.baselib.core.beans.BaseSuccessBean; import com.tenlionsoft.baselib.core.beans.MessageBean; +import com.tenlionsoft.baselib.core.beans.SaveLocationBean; import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi; import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager; import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService; @@ -43,6 +47,7 @@ import org.json.JSONObject; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import androidx.annotation.Nullable; @@ -74,6 +79,8 @@ public class BusinessService extends Service { private boolean isUpload = false; private long mUploadPointTime; private PunchTimeReceiver mReceiver; + private int mMaxPoint = 2; + private int mConnectCount = 1; @Override public void onCreate() { @@ -118,6 +125,7 @@ public class BusinessService extends Service { @Override public void onNext(BaseSuccessBean baseSuccessBean) { + mConnectCount = 1; if (!TextUtils.isEmpty(baseSuccessBean.getData())) { GlobalProvider.save(BusinessService.this, PathConfig.SESSION_ID, baseSuccessBean.getData()); //开启websocket @@ -129,7 +137,10 @@ public class BusinessService extends Service { @Override public void onError(Throwable e) { - //TODO startSocketService(); + ++mConnectCount; + if (mConnectCount < 5) { + startSocketService(); + } } @Override @@ -293,17 +304,116 @@ public class BusinessService extends Service { mLocationClient.start(); } + /*获取到的定位信息*/ private class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { if (bdLocation.getLongitude() != Double.MIN_VALUE && bdLocation.getLongitude() != Double.MIN_VALUE) { - //TODO 获取到的定位信息 sendLocationCurrent(bdLocation); + addPointToList(bdLocation); } } } + + private void addPointToList(BDLocation bdLocation) { + if (null != bdLocation) { + boolean isLegal = checkSinglePoint(bdLocation); + if (isLegal) { + if (mTempList.size() >= mMaxPoint) { + checkPoints(); + } else { + mTempList.add(bdLocation); + } + } + } + } + } + + /** + * 根据定位精度取最小精度 + */ + private void checkPoints() { + Collections.sort(mTempList, (o1, o2) -> { + if (o1.getRadius() > o2.getRadius()) { + return 1; + } else if (o1.getRadius() < o2.getRadius()) { + return -1; + } else { + return 0; + } + }); + buildUploadPoint(); + } + + /** + * 构建定位上传参数 + */ + private void buildUploadPoint() { + boolean wsConnected = mWsManager.isWsConnected(); + if (wsConnected) { + SaveLocationBean bean = new SaveLocationBean(); + bean.setCreator(UserLgUtils.getUserId()); + bean.setUserLat(mTempList.get(0).getLatitude() + ""); + bean.setUserLng(mTempList.get(0).getLongitude() + ""); + bean.setIsOverstep(0); + bean.setUserName(UserLgUtils.getName()); + bean.setUserUsername(UserLgUtils.getUserName()); + Gson gson = new Gson(); + String s = gson.toJson(bean); + sendLocationPoint(s); + } + } + + /** + * socket上报定位 + */ + private void sendLocationPoint(String point) { + AppSocketMessage msgBean = new AppSocketMessage(); + msgBean.setType(PathConfig.MSG_TYPE_POINT); + msgBean.setTo("system"); + msgBean.setFrom(UserLgUtils.getUserId()); + msgBean.setBody(point); + msgBean.setId(System.currentTimeMillis() + ""); + Gson gson = new Gson(); + String s = gson.toJson(msgBean); + mWsManager.sendMessage(s); + mTempList.clear(); + } + + /** + * 校验定位点的合法性 + */ + private boolean checkSinglePoint(BDLocation bdLocation) { + boolean isLegal = false; + if (isFirst) { + if (PathConfig.CITY_BAIDU_CODE.equals(bdLocation.getCityCode())) { + isLegal = true; + } else { + isLegal = false; + } + } else { + if (PathConfig.CITY_BAIDU_CODE.equals(bdLocation.getCityCode()) && bdLocation.getRadius() <= mPrecision) { + if (mCurrentLocation != null) { + LatLng latLng1 = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); + LatLng latLng2 = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); + boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(latLng1, 200, latLng2); + if (circleContainsPoint) { + mCurrentLocation = bdLocation; + isLegal = true; + } else { + isLegal = false; + } + } else { + mCurrentLocation = bdLocation; + isLegal = true; + } + } else { + isLegal = false; + } + } + return isLegal; } /** @@ -313,11 +423,11 @@ public class BusinessService extends Service { */ private void sendLocationCurrent(BDLocation bdLocation) { if (bdLocation.getRadius() <= mPrecision) { - //PathConfig.DEFAULT_CITY_CODE.equals(bdLocation.getCityCode()) && if (bdLocation.getRadius() <= mPrecision) { Intent mIntent = new Intent(PathConfig.ACTION_LOCATION_MESSAGE); mIntent.putExtra("data", bdLocation); sendBroadcast(mIntent); + } } } @@ -451,6 +561,7 @@ public class BusinessService extends Service { mWsManager.sendMessage(s); } + /** * 发送socket已办 */ diff --git a/commonmodule/src/main/AndroidManifest.xml b/commonmodule/src/main/AndroidManifest.xml index 033ca32..31a7440 100644 --- a/commonmodule/src/main/AndroidManifest.xml +++ b/commonmodule/src/main/AndroidManifest.xml @@ -3,7 +3,8 @@ package="com.tengshisoft.commonmodule"> - + + diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/department/ChooseDeptActivity.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/department/ChooseDeptActivity.java index 22ff8d2..3a0a6aa 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/department/ChooseDeptActivity.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/department/ChooseDeptActivity.java @@ -18,6 +18,7 @@ import com.tengshisoft.commonmodule.R2; import com.tengshisoft.commonmodule.adapters.ChooseDeptAdapter; import com.tengshisoft.commonmodule.adapters.SelDeptAdapter; import com.tengshisoft.commonmodule.beans.DepartmentListBean; +import com.tengshisoft.commonmodule.beans.DistributionDeptBean; import com.tengshisoft.commonmodule.nets.Apis; import com.tenlionsoft.baselib.constant.PathConfig; import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager; @@ -74,6 +75,7 @@ public class ChooseDeptActivity extends BaseActivity { private List mDepartments = new ArrayList<>(); private SelDeptAdapter mSelAdapter; private ChooseDeptAdapter mAdapter; + private String mTaskId; @Override @@ -84,20 +86,60 @@ public class ChooseDeptActivity extends BaseActivity { @Override public void initData() { mBind = ButterKnife.bind(this); - mDeptId = getIntent().getStringExtra("deptId"); - mDeptName = getIntent().getStringExtra("deptName"); + mTaskId = getIntent().getStringExtra("taskId"); + mTvBaseTitle.setText("选择部门"); mTvPublish.setVisibility(View.VISIBLE); mTvPublish.setText("确定"); mTvPublish.setOnClickListener(v -> doConfirm()); - if (TextUtils.isEmpty(mDeptId)) { + if (TextUtils.isEmpty(mTaskId)) { ToastUtils.show("数据有误"); finish(); } else { - initViews(); + getDepartByTaskId(); } } + /** + * 根据TaskId获取部门信息 + */ + private void getDepartByTaskId() { + RetrofitManager.getInstance() + .create(Apis.class) + .getDeptByTaskId(mTaskId, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull DistributionDeptBean distributionDeptBean) { + if (!TextUtils.isEmpty(distributionDeptBean.getUserDeptId())) { + mDeptId = distributionDeptBean.getUserDeptId(); + mDeptName = distributionDeptBean.getUserDeptName(); + initViews(); + } else { + refreshView(STATE_LOAD_EMPTY); + } + } + + @Override + public void onError(@NonNull Throwable e) { + refreshView(STATE_LOAD_ERROR); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + + } + /** * 确认选择 */ diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/logs/StatisticsActivity.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/logs/StatisticsActivity.java new file mode 100644 index 0000000..d899990 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/logs/StatisticsActivity.java @@ -0,0 +1,32 @@ +package com.tengshisoft.commonmodule.activitys.logs; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.tengshisoft.commonmodule.R; +import com.tenlionsoft.baselib.constant.PathConfig; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 作者: Adam + * 日期: 2021年10月29日16:43:03 + * 邮箱: itgaojian@163.com + * 描述: 统计分析 + */ +@Route(path = PathConfig.PATH_MODULE_COMMON_ACTIVITY_STATISTICS) +public class StatisticsActivity extends BaseActivity { + + + private Unbinder mBind; + + @Override + protected int setLayoutId() { + return R.layout.activity_statistics; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + } +} \ No newline at end of file diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/LocusStepAdapter.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/LocusStepAdapter.java new file mode 100755 index 0000000..bb37ee6 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/LocusStepAdapter.java @@ -0,0 +1,124 @@ +package com.tengshisoft.commonmodule.adapters; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.tengshisoft.commonmodule.R; +import com.tengshisoft.commonmodule.beans.LocusTextBean; +import com.tengshisoft.commonmodule.holders.LocusOfflineHolder; +import com.tengshisoft.commonmodule.holders.LocusOnlineHolder; +import com.tengshisoft.commonmodule.holders.LocusStartHolder; +import com.tengshisoft.commonmodule.holders.LocusStayHolder; +import com.tengshisoft.commonmodule.holders.LocusStopHolder; +import com.tenlionsoft.baselib.core.widget.base.BaseRecyclerAdapter; +import com.tenlionsoft.baselib.utils.TimeUtils; + +import java.util.List; + +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 10:30 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class LocusStepAdapter extends BaseRecyclerAdapter { + public static final int TYPE_START = 121;//开始 + public static final int TYPE_ONLINE = 122;//在线,移动 + public static final int TYPE_OFFLINE = 123;//离线 + public static final int TYPE_STAY = 124;//停留 + public static final int TYPE_STOP = 125;//停止 + public static final int TYPE_UNUSUAL = 126;//异常 + + public LocusStepAdapter(Context ctx, List list) { + super(ctx, list); + } + + @Override + public RecyclerView.ViewHolder createHolder(ViewGroup parent, int viewType) { + RecyclerView.ViewHolder holder = null; + View itemView = null; + switch (viewType) { + case TYPE_START: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_start, parent, false); + holder = new LocusStartHolder(itemView); + break; + case TYPE_ONLINE: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_online, parent, false); + holder = new LocusOnlineHolder(itemView); + break; + case TYPE_OFFLINE: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_offline, parent, false); + holder = new LocusOfflineHolder(itemView); + break; + case TYPE_STAY: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_stay, parent, false); + holder = new LocusStayHolder(itemView); + break; + case TYPE_STOP: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_stop, parent, false); + holder = new LocusStopHolder(itemView); + break; + case TYPE_UNUSUAL: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_unusual, parent, false); + holder = new LocusStopHolder(itemView); + break; + default: + itemView = LayoutInflater.from(mContext).inflate(R.layout.item_step_offline, parent, false); + holder = new LocusOfflineHolder(itemView); + break; + } + return holder; + } + + @Override + public int getItemViewType(int position) { + return mData.get(position).getType(); + } + + @Override + public void bindHolder(RecyclerView.ViewHolder myHolder, int i) { + int itemViewType = getItemViewType(i); + String time = ""; + if (mData.get(i).getSecond() > 0) { + time = TimeUtils.secToTime(mData.get(i).getSecond()); + } else { + time = "0"; + } + switch (itemViewType) { + case TYPE_START: + ((LocusStartHolder) myHolder).mTvTime.setText(mData.get(i).getTime()); + ((LocusStartHolder) myHolder).mTvAddress.setText(mData.get(i).getAddress()); + break; + case TYPE_ONLINE: + ((LocusOnlineHolder) myHolder).mTvTime.setText(mData.get(i).getTime()); + ((LocusOnlineHolder) myHolder).mTvAddress.setText(mData.get(i).getAddress()); + ((LocusOnlineHolder) myHolder).mTvStateTime.setText("移动时间:" + time); + break; + case TYPE_OFFLINE: + ((LocusOfflineHolder) myHolder).mTvTime.setText(mData.get(i).getTime()); + ((LocusOfflineHolder) myHolder).mTvAddress.setText(mData.get(i).getAddress()); + ((LocusOfflineHolder) myHolder).mTvStateTime.setText("断联时间:" + time); + break; + case TYPE_STAY: + ((LocusStayHolder) myHolder).mTvTime.setText(mData.get(i).getTime()); + ((LocusStayHolder) myHolder).mTvAddress.setText(mData.get(i).getAddress()); + ((LocusStayHolder) myHolder).mTvStateTime.setText("等待时间:" + time); + break; + case TYPE_STOP: + ((LocusStopHolder) myHolder).mTvTime.setText(mData.get(i).getTime()); + ((LocusStopHolder) myHolder).mTvAddress.setText(mData.get(i).getAddress()); + break; + case TYPE_UNUSUAL: + ((LocusStopHolder) myHolder).mTvTime.setText(mData.get(i).getTime()); + ((LocusStopHolder) myHolder).mTvAddress.setText(mData.get(i).getAddress()); + ((LocusStopHolder) myHolder).mTvStateTime.setText("异常时间:" + time); + break; + } + + } +} + diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DistributionDeptBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DistributionDeptBean.java new file mode 100644 index 0000000..0954d86 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DistributionDeptBean.java @@ -0,0 +1,155 @@ +package com.tengshisoft.commonmodule.beans; + +/** + * 作者: adam + * 日期: 2021/10/30 - 2:36 下午 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class DistributionDeptBean { + + private String businessId; + private String creator; + private String creatorName; + private String distributionId; + private String distributionUserId; + private String gmtCreate; + private String reportId; + private String taskId; + private String userDeptId; + private String userDeptName; + private String userId; + private String userName; + private String userStatus; + private String userStatusText; + private String userType; + private String userTypeText; + + public String getBusinessId() { + return businessId; + } + + public void setBusinessId(String businessId) { + this.businessId = businessId; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getCreatorName() { + return creatorName; + } + + public void setCreatorName(String creatorName) { + this.creatorName = creatorName; + } + + public String getDistributionId() { + return distributionId; + } + + public void setDistributionId(String distributionId) { + this.distributionId = distributionId; + } + + public String getDistributionUserId() { + return distributionUserId; + } + + public void setDistributionUserId(String distributionUserId) { + this.distributionUserId = distributionUserId; + } + + public String getGmtCreate() { + return gmtCreate; + } + + public void setGmtCreate(String gmtCreate) { + this.gmtCreate = gmtCreate; + } + + public String getReportId() { + return reportId; + } + + public void setReportId(String reportId) { + this.reportId = reportId; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getUserDeptId() { + return userDeptId; + } + + public void setUserDeptId(String userDeptId) { + this.userDeptId = userDeptId; + } + + public String getUserDeptName() { + return userDeptName; + } + + public void setUserDeptName(String userDeptName) { + this.userDeptName = userDeptName; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserStatus() { + return userStatus; + } + + public void setUserStatus(String userStatus) { + this.userStatus = userStatus; + } + + public String getUserStatusText() { + return userStatusText; + } + + public void setUserStatusText(String userStatusText) { + this.userStatusText = userStatusText; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + + public String getUserTypeText() { + return userTypeText; + } + + public void setUserTypeText(String userTypeText) { + this.userTypeText = userTypeText; + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DrawMapLineBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DrawMapLineBean.java new file mode 100755 index 0000000..ec958ba --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/DrawMapLineBean.java @@ -0,0 +1,48 @@ +package com.tengshisoft.commonmodule.beans; + +import com.baidu.mapapi.model.LatLng; + +/** + * 作者: Adam + * 日期: 2019/8/29 - 17:34 + * 邮箱: itgaojian@163.com + * 描述: type 线的类型 12:移动 13:等待 14:异常 + */ +public class DrawMapLineBean { + private int type;//线的类型 + private LatLng onePoint; + private LatLng twoPoint; + private Integer lineColor; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public LatLng getOnePoint() { + return onePoint; + } + + public void setOnePoint(LatLng onePoint) { + this.onePoint = onePoint; + } + + public LatLng getTwoPoint() { + return twoPoint; + } + + public void setTwoPoint(LatLng twoPoint) { + this.twoPoint = twoPoint; + } + + public Integer getLineColor() { + return lineColor; + } + + public void setLineColor(Integer lineColor) { + this.lineColor = lineColor; + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/IncidentRebackBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/IncidentRebackBean.java index 65316cc..545ef7d 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/IncidentRebackBean.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/IncidentRebackBean.java @@ -7,17 +7,16 @@ package com.tengshisoft.commonmodule.beans; * 描述: */ public class IncidentRebackBean { - - private String dispatchId; + private String reportId; private String explain; private String taskId; - public String getDispatchId() { - return dispatchId; + public String getReportId() { + return reportId; } - public void setDispatchId(String dispatchId) { - this.dispatchId = dispatchId; + public void setReportId(String reportId) { + this.reportId = reportId; } public String getExplain() { diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocationPointBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocationPointBean.java new file mode 100644 index 0000000..dc16394 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocationPointBean.java @@ -0,0 +1,93 @@ +package com.tengshisoft.commonmodule.beans; + +/** + * 作者: adam + * 日期: 2021/10/29 - 6:05 下午 + * 邮箱: itgaojian@163.com + * 描述:用户轨迹点 + */ +public class LocationPointBean implements Comparable { + + private String creator; + private String gmtCreate; + private int isOverstep; + private String userLat; + private String userLng; + private String userLocationId; + private String userName; + private String userUsername; + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getGmtCreate() { + return gmtCreate; + } + + public void setGmtCreate(String gmtCreate) { + this.gmtCreate = gmtCreate; + } + + public int getIsOverstep() { + return isOverstep; + } + + public void setIsOverstep(int isOverstep) { + this.isOverstep = isOverstep; + } + + public String getUserLat() { + return userLat; + } + + public void setUserLat(String userLat) { + this.userLat = userLat; + } + + public String getUserLng() { + return userLng; + } + + public void setUserLng(String userLng) { + this.userLng = userLng; + } + + public String getUserLocationId() { + return userLocationId; + } + + public void setUserLocationId(String userLocationId) { + this.userLocationId = userLocationId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserUsername() { + return userUsername; + } + + public void setUserUsername(String userUsername) { + this.userUsername = userUsername; + } + @Override + public int compareTo(LocationPointBean o) { + if (gmtCreate.compareTo(o.getGmtCreate()) > 0) { + return 1; + } else if (gmtCreate.compareTo(o.getGmtCreate()) < 0) { + return -1; + } else { + return 0; + } + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocusTextBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocusTextBean.java new file mode 100755 index 0000000..b0f69c6 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/LocusTextBean.java @@ -0,0 +1,94 @@ +package com.tengshisoft.commonmodule.beans; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 11:32 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class LocusTextBean implements Comparable { + private String time;//时间 + private String stateTime; + private String address;//地址 + private int type;//类型 + private String createTime; + private long second; + private int order;//排序 + + public long getSecond() { + return second; + } + + public void setSecond(long second) { + this.second = second; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + private boolean isDelete; + + public boolean isDelete() { + return isDelete; + } + + public void setDelete(boolean delete) { + isDelete = delete; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getStateTime() { + return stateTime; + } + + public void setStateTime(String stateTime) { + this.stateTime = stateTime; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } + + @Override + public int compareTo(LocusTextBean o) { + if (getOrder() > o.getOrder()) { + return -1; + } else if (getOrder() < o.getOrder()) { + return 1; + } else { + return 0; + } + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SaveHandleIncidentBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SaveHandleIncidentBean.java index f467913..5fe0aaf 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SaveHandleIncidentBean.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SaveHandleIncidentBean.java @@ -8,17 +8,17 @@ package com.tengshisoft.commonmodule.beans; */ public class SaveHandleIncidentBean { - private String dispatchId; private String handlePhotos; private String handleSummary; private String taskId; + private String reportId; - public String getDispatchId() { - return dispatchId; + public String getReportId() { + return reportId; } - public void setDispatchId(String dispatchId) { - this.dispatchId = dispatchId; + public void setReportId(String reportId) { + this.reportId = reportId; } public String getHandlePhotos() { diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOfflineHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOfflineHolder.java new file mode 100755 index 0000000..9ce88d6 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOfflineHolder.java @@ -0,0 +1,28 @@ +package com.tengshisoft.commonmodule.holders; + + +import android.view.View; +import android.widget.TextView; + +import com.tengshisoft.commonmodule.R; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 11:35 + * 邮箱: itgaojian@163.com + * 描述: 工作轨迹-离线item + */ +public class LocusOfflineHolder extends RecyclerView.ViewHolder { + public TextView mTvTime; + public TextView mTvStateTime; + public TextView mTvAddress; + public LocusOfflineHolder(@NonNull View itemView) { + super(itemView); + mTvTime = itemView.findViewById(R.id.tv_time); + mTvStateTime = itemView.findViewById(R.id.tv_state_time); + mTvAddress = itemView.findViewById(R.id.tv_address); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOnlineHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOnlineHolder.java new file mode 100755 index 0000000..663f467 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusOnlineHolder.java @@ -0,0 +1,28 @@ +package com.tengshisoft.commonmodule.holders; + + +import android.view.View; +import android.widget.TextView; + +import com.tengshisoft.commonmodule.R; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 11:35 + * 邮箱: itgaojian@163.com + * 描述: 工作轨迹-在线item + */ +public class LocusOnlineHolder extends RecyclerView.ViewHolder { + public TextView mTvTime; + public TextView mTvStateTime; + public TextView mTvAddress; + public LocusOnlineHolder(@NonNull View itemView) { + super(itemView); + mTvTime = itemView.findViewById(R.id.tv_time); + mTvStateTime = itemView.findViewById(R.id.tv_state_time); + mTvAddress = itemView.findViewById(R.id.tv_address); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStartHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStartHolder.java new file mode 100755 index 0000000..c0c30e5 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStartHolder.java @@ -0,0 +1,28 @@ +package com.tengshisoft.commonmodule.holders; + + +import android.view.View; +import android.widget.TextView; + +import com.tengshisoft.commonmodule.R; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 11:35 + * 邮箱: itgaojian@163.com + * 描述: 工作轨迹-开始item + */ +public class LocusStartHolder extends RecyclerView.ViewHolder { + public TextView mTvTime; + public TextView mTvStateTime; + public TextView mTvAddress; + + public LocusStartHolder(@NonNull View itemView) { + super(itemView); + mTvTime = itemView.findViewById(R.id.tv_time); + mTvAddress = itemView.findViewById(R.id.tv_address); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStayHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStayHolder.java new file mode 100755 index 0000000..c1ad03e --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStayHolder.java @@ -0,0 +1,28 @@ +package com.tengshisoft.commonmodule.holders; + + +import android.view.View; +import android.widget.TextView; + +import com.tengshisoft.commonmodule.R; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 11:35 + * 邮箱: itgaojian@163.com + * 描述: 工作轨迹-停留item + */ +public class LocusStayHolder extends RecyclerView.ViewHolder { + public TextView mTvTime; + public TextView mTvStateTime; + public TextView mTvAddress; + public LocusStayHolder(@NonNull View itemView) { + super(itemView); + mTvTime = itemView.findViewById(R.id.tv_time); + mTvStateTime = itemView.findViewById(R.id.tv_state_time); + mTvAddress = itemView.findViewById(R.id.tv_address); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStopHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStopHolder.java new file mode 100755 index 0000000..ddbfff6 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/LocusStopHolder.java @@ -0,0 +1,28 @@ +package com.tengshisoft.commonmodule.holders; + + +import android.view.View; +import android.widget.TextView; + +import com.tengshisoft.commonmodule.R; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: Adam + * 日期: 2019/7/31 - 11:35 + * 邮箱: itgaojian@163.com + * 描述: 工作轨迹-停止item + */ +public class LocusStopHolder extends RecyclerView.ViewHolder { + public TextView mTvTime; + public TextView mTvStateTime; + public TextView mTvAddress; + public LocusStopHolder(@NonNull View itemView) { + super(itemView); + mTvTime = itemView.findViewById(R.id.tv_time); + mTvStateTime = itemView.findViewById(R.id.tv_state_time); + mTvAddress = itemView.findViewById(R.id.tv_address); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/Apis.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/Apis.java index 0e87ca6..d3c4316 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/Apis.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/Apis.java @@ -28,6 +28,7 @@ import com.tengshisoft.commonmodule.beans.CorrectDetailBean; import com.tengshisoft.commonmodule.beans.DepartmentBean; import com.tengshisoft.commonmodule.beans.DepartmentListBean; import com.tengshisoft.commonmodule.beans.DispatchDetailBean; +import com.tengshisoft.commonmodule.beans.DistributionDeptBean; import com.tengshisoft.commonmodule.beans.DrugDetailBean; import com.tengshisoft.commonmodule.beans.ExpressDetailBean; import com.tengshisoft.commonmodule.beans.ExpressListBean; @@ -45,6 +46,7 @@ import com.tengshisoft.commonmodule.beans.IncidentListBean; import com.tengshisoft.commonmodule.beans.IncidentLogBean; import com.tengshisoft.commonmodule.beans.KeyAreaDetailBean; import com.tengshisoft.commonmodule.beans.KeyAreaListBean; +import com.tengshisoft.commonmodule.beans.LocationPointBean; import com.tengshisoft.commonmodule.beans.MigrantDetailBean; import com.tengshisoft.commonmodule.beans.MigrantListBean; import com.tengshisoft.commonmodule.beans.OutboundDetailBean; @@ -136,6 +138,13 @@ public interface Apis { @GET("app/dispatch/list-dispatchdepttree/{deptId}") Observable> getDeptList(@Path("deptId") String deptId, @Header("token") String token); + /** + * 根据taskid获取任务分拨部门信息 + */ + @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) + @GET("app/dispatch/getdistributionuser-bytask/{taskId}") + Observable getDeptByTaskId(@Path("taskId") String taskId, @Header("token") String token); + /** * 根据部门Id获取部门下所有人员 */ @@ -157,6 +166,12 @@ public interface Apis { @GET("app/department/user/list-with-user") Observable> getAllUserList(@Header("token") String token); + /** + * 获取用户定位记录 + */ + @Headers({"Content-Type: application/json", "Accept: application/json"}) + @GET("app/user-realtime-location/list") + Observable> getUserLocationList(@Query("startTime") String startTime, @Query("endTime") String endTime, @Header("token") String token); /*======================================================网格员========================================================================================*/ /** @@ -1025,21 +1040,21 @@ public interface Apis { */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) @GET("app/taskbase/listpage-task-dh") - Observable getIncidentHandleList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); + Observable getIncidentHandleList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); /** * 获取事件派遣详情 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @GET("app/dispatch/get/{dispatchId}") - Observable getDispatchDetailById(@Path("dispatchId") String id, @Header("token") String token); + @GET("app/dispatch/get-bytaskId/{taskId}") + Observable getDispatchDetailById(@Path("taskId") String id, @Header("token") String token); /** * 延期申请 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @POST("app/delayapply/save") - Observable doApplyDelay(@Body RequestBody body, @Header("token") String token); + @POST("app/delayapply/save/{reportId}") + Observable doApplyDelay(@Path("reportId") String reportId, @Body RequestBody body, @Header("token") String token); /** * 保存处理 @@ -1066,8 +1081,8 @@ public interface Apis { * 获取事件处理详情 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @GET("app/handle/get/{handleId}") - Observable getHandleDetailByHandleId(@Path("handleId") String id, @Header("token") String token); + @GET("app/handle/get-bytaskId/{taskId}") + Observable getHandleDetailByHandleId(@Path("taskId") String id, @Header("token") String token); /** * 获取事件核查列表 diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/DeptApis.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/DeptApis.java index 18362e5..b202b37 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/DeptApis.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/DeptApis.java @@ -30,29 +30,29 @@ public interface DeptApis { */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) @GET("app/taskbase/listpage-dispatch") - Observable getIncidentDistributionList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); + Observable getIncidentDistributionList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); /** * 事件分拨-分拨确认列表 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) @GET("app/taskbase/listpage-task-as") - Observable getIncidentAcceptList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); + Observable getIncidentAcceptList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); /** * 事件分拨-确认受理 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @PUT("app/taskcompetebase/update-allocatesure-accept/{distributionUserId}") - Observable doIncidentAccept(@Path("distributionUserId") String id, @Body RequestBody body, @Header("token") String token); + @PUT("app/taskcompetebase/update-allocatesure-accept/{reportId}") + Observable doIncidentAccept(@Path("reportId") String id, @Body RequestBody body, @Header("token") String token); /** * 事件分拨-不予受理 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @PUT("app/taskcompetebase/update-allocatesure-noaccept/{distributionUserId}") - Observable doIncidentAbolish(@Path("distributionUserId") String id, @Body RequestBody body, @Header("token") String token); + @PUT("app/taskcompetebase/update-allocatesure-noaccept/{reportId}") + Observable doIncidentAbolish(@Path("reportId") String id, @Body RequestBody body, @Header("token") String token); /** * 事件派遣保存 @@ -66,19 +66,19 @@ public interface DeptApis { */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) @GET("app/taskbase/listpage-task-dhe") - Observable getIncidentCheckList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); + Observable getIncidentCheckList(@Query("keywords") String key, @Query("page") String page, @Header("token") String token); /** * 事件核查通过 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @PUT("app/taskcompetebase/update-dispatch-he-pass/{dispatchId}") - Observable doIncidentDeptCheckPass(@Path("dispatchId") String id, @Body RequestBody body, @Header("token") String token); + @PUT("app/taskcompetebase/update-dispatch-he-pass/{reportId}") + Observable doIncidentDeptCheckPass(@Path("reportId") String id, @Body RequestBody body, @Header("token") String token); /** * 事件核查不通过 */ @Headers({"base_url_name:case", "Content-Type: application/json", "Accept: application/json"}) - @PUT("app/taskcompetebase/update-dispatch-he-pass/{dispatchId}/{handleId}") - Observable doIncidentDeptCheckUnPass(@Path("dispatchId") String id, @Path("handleId") String hId, @Body RequestBody body, @Header("token") String token); + @PUT("app/taskcompetebase/update-dispatch-he-pass/{reportId}") + Observable doIncidentDeptCheckUnPass(@Path("reportId") String id, @Body RequestBody body, @Header("token") String token); } diff --git a/commonmodule/src/main/res/drawable-xhdpi/ic_step_offline.png b/commonmodule/src/main/res/drawable-xhdpi/ic_step_offline.png new file mode 100755 index 0000000000000000000000000000000000000000..800ee2ace1b7d03b0b1667c27374ab38ce942bfd GIT binary patch literal 15220 zcmeI3TZ|J`7{`YI3MGiL5DA*yQo~J|&P>~BJ44$|ZCSd(uFbN@;sY|BIo*!i&eYB< z?JhBz-5|jSgTxyK#YEzhs4;{{6bu>@;EAA#f%t+FV!{Rm^+Ax}nO zRH(aLkmO-tI@4fC)xxgdzWmzdRF$x6 zE1zVOg&4@HiLoNsJk~cLj}6O$;_8k#LS+#q$OBVymh(By5X)g#C9ep7Tf>aYS#dFk z!>*`R&^ee)Ib(VeIC;09mN{?G84%nYF9bclbxse<`59JVI3LY&A}fe2=d8V45eNJg zDk>SVKi*R-2d%IxYnla-VM?WvyX1B2#UX|h1c6~ajK@Pm584>jOsPz3#$(ka^*nK4 z$VIhas=DU1@=9ra#0A`n`PPsDRLvGFjCA_rl!aY z$bmf2OasPoZQ}}A-PDb&K26DnJZ)jPCdp)@cH8;p^KDBT=7yaRK@Dl!NMm5M0GNJY z=p#iLY}g4e<*{~GZ>pK*;!Me8Dbvm!l+|g%ETtM&*$UMa3c+g?V?`jDdT~J4bCK#U zOVtrNV=-%21)OV=lB{YL*R>%A4Qj4okl*R6A%cIC*Mla?iGot3DA;1*0p%Bv? zw0So6l^D}=dJ#?wM7$xU-LNgHve(33%`hcR2EFkJ9B`|uBBp~rpGWZtG?(!NX`k2U zr-PCZpk=Sj`6XWBc|oW^OeXE&Eve(WJYw|=OkF)%6kUeto6`#TSUH^$1Ui#R^EAf= zWLlDWfmS45Q6z;Gd~&8<$d;_7(9=Z~o_tcy=3`xp0*eW0KkxyV*slcqv@e}j=(Hqo zwBG|Ho>M$&UnW>D(I!nxsf234{W@yf$8a}S&bH0qg{h-;A*WW(sDe~9fYpIvSG@%r zhg##zvSKQoEK0IwO2J&#cTQ` zhMqA?QV~Rl;0~Et?^p9q4MYos80-Har~U^^VMsggZXssYS9h}z$Qkv2E<|%D%UMYq z0!oCbZ{qsE%+{{DqEox8-m$IS7_$DNMA*r2S4ou);zCTzShI4~f6(g4+(^Yg;9=p5 z;jGVEs9i=wx8XzWG8)>9+@h&w#8az=4BMit|Iz9ZzZu^0fry{yy?ls4htY_XS_Zkn zxC+l=!#Y!VSg8_&3T*?oO&4erYJt_IvfZ3jy0AJ5Z~fq1C)2p?Y-!NONp>%PG_UAh zW<_$5A_x$?NpRu$AS%Iy0KuCC7oHEI5?lxnyh(83`5-F6g#f{u1Q(tUq7qyP5WGon z;rSpc!G!?9n*M`%iB?I#9kic_F;`RBFj9m)O@QPwiWi{d~c#&*tw+T^(5$1#`!CU-$N~ z%N*-d@mt4UUH{9Y&t3oFK&iNYm(j6h%hKIPhgWZMym(?wIrY|0XJY4ehvvMOh%P_= zdvxW6MQ6XCJ^Dp#wx{c;9(expifp2@M@x2&KYruEKUd9Nn~1*D^~TB5-)`5US0>K( z9ocwg;x2UI?ivucK<}@;n-s6weeH{COC8cp#zI99{YKG^3YA+hvSpou_NW4 z&XarIzkG=O|D{!VDlUvN4Hk3MjF$GJDnJxdP9_J2C@ mjB=+VwCSTIH^&amqE@fiyY*V(n={sPvArAm;-5UZWBgyn2$oC$ literal 0 HcmV?d00001 diff --git a/commonmodule/src/main/res/drawable-xhdpi/ic_step_online.png b/commonmodule/src/main/res/drawable-xhdpi/ic_step_online.png new file mode 100755 index 0000000000000000000000000000000000000000..5680210ae23a23dbbb6accc7daa8cff7de6bfad3 GIT binary patch literal 15056 zcmeI3O>E;t6vt-;LQBz}UHVe?FF_wn?o)_7}dLfN#v){?EQjpRq@qWFqoFtUmtqp0# z52<7nD>Bh^Q>t1;&9KZ;`9-OuY86Gb6s;_)nyp&4s!5}x&{$%>YN6A$H=D1F(lM)E z*o))9R+PbDP#ow*KipL`%d!-;q?AfBn;}O>UW|vb7hTSRjN>$EL_#-+UEhPzRZt5srJ!A+*NauP++eZOaHfiJ^goLghvP-!<@9JZ> zJ6)VpkrHL$xznM$z%5ZSw{$CHD^z3GYOjP8$9}l&`@KfC%QnUcrInRrS5>9wT9~+A z!u9!@0-dHSK8;74IHnEeYsso9YsR*w+3aQLFQ}%is<|N9Oc0~xJ8t)APK=Ufmn-=g zxtTBqs~`u*_)Jmqb8~SVVt4(pkK=~h$GcPsyxp2I9n8&~>??c4@A)A+E!xm)%Dmy6 zSGw2ibuWssN9cO9!3K)1>)0xFI)+omGSM|hE_a9}cMKED1~scD?N;?NHd2VKR^ELk zbkipXNxiVpS!;28!op8aOE*fUqtc4p?OIsYv?`H1s-?-8>SjglVvAI&<3zb&Gl^ac zUDo+rba|KUkh9f(7WcFxOi)vj|AU_U zA1piN3o#*NY_8yL=c zCI6#Yi{E0me6&$944rjiI1D{D+#&6?n=b3cQPNWkmMQgt!d%ClMUFXP%pAS$4E&zmY3S4|XKoz(E5WXpJ@%aE%-~vGSrohGL15|+v0O6Yg z7oQJM1ug)DZwg#|K0p#peT5feQfPn*tY~4^Raz0EBM}Tzo!26}SKpzA13= z`2bbm0zmktz{TeSRDlZs;hS7sOVbBAsmGq)9I(eUKmOsyXY3JAiL7n55ITMqp?BXy z=${kz{WC(F=h3-~ZG`NP5PIDI{>`U9U~}8+&E@UkkH6h{<|2|Fd+^(>FTZ%Fc&u3XvroSA5S^?LKGm*2YiFP&dO APyhe` literal 0 HcmV?d00001 diff --git a/commonmodule/src/main/res/drawable-xhdpi/ic_step_start.png b/commonmodule/src/main/res/drawable-xhdpi/ic_step_start.png new file mode 100755 index 0000000000000000000000000000000000000000..e4ec224f6d10ce2b8a92fa5cd4bbe501d5871a51 GIT binary patch literal 15500 zcmeI3&yU+g6vw9mL0QxjR7HSPlL`q0j(^8LNK%%~!bWP!YB#7UCnn>`uGPdgwztWy zIG}Pu2#FI&h!cWq1s5)rC>%I*M56xy2qZ3m1eY?l^TU}WqZKVept17n&3E2=p3lrY zI|skLeetDJYmcr008TZx8aw1$Pv0l+BcI=l9{Y)WJrHhPjsbY^q4a$MeE88L06cfy zYj=`P>w<%VK^eM17netakn{$idVUl_bOk3u7w>s~t@O){nYo$v@OKyc5c;DMP zitz5y#Wp&+f^4^RzP?r+IV8XUCr}s-`hM(;YNaf$Lw={tQc1|VBv)#s^)#W-X>AJ| zL4*aPToI9?S%PVo6~nev{aHbkm5LU;>flmE5i6F)z`?cYUK8uoyLpfbi}Ha z_LC%ZBxyJtmWNt7i1sAKwrxpPB~=wk4>3OU6F3t6_*@=j5~qP<6nSCd1-_8Rh27vF zsg+7;qUkXn*C3oG^5Zc(LQxvQP*TdWw9LsxQ=jl4>Sw3sA_@2L0Q*Ty{FJ4B;eL<= z@qVx(YsL5G3zO#b^bt*E^hxq1tVw;^?wt z7{wTco^%YdgIt)vV?`jOzPeM?qMnP_o~vYvCwn6uAGgaA4KG|a9yiP z%bE*b*;;d&ew;ub;bx;w8p@vMI(paYxteW?J!smZ-t8$Olx0KgnFg5;-Ov$68N^nr z=)MrT5uk%~zmU**X>kKY!p}}iam|WrY86q2$P^XDbVUnms%YbGMYo}^4T4}Ncr$udAvr?aICp!?O)vb=w4T9aOG}k&i zt*PhO&0Cz#;~~i77u;9p817@AwY~CCS+CVW;-HrdVT9NB$O<{$-p}LCJJJcNQhGh; zd;h>x#PI5!O@xfyuHouXM4IA~eT8hXYgkY;uw`1fXKH%7-0y56RK?LNlN$AJPQ+{_ zqkZV_VYe<##x`mAFU{TYYU1CWyCv6`|Ha(pyK%lUPO9x4Km^8TH)n)VN}{-!FELsHVuv1?JLT`#j;i!$vx^L)kklDaz1Ml~0_(tDu%^1MrK z*KxgK7#i8_bTjR-?Tv81)9}c3G)}Jv2FaB9(85y3%c~p}K9tIFQ9#%x$HnGDsT>ytgl%$MY(A9A zaZy0nCdb9*L#Z4W1%z#KTx>p+%5hOZ*e1ut=0m9*7X^fEa$Iaal*(~YK-eb7#pXk) z92W(IZE{>}K9tIFQ9#%x$HnGDsT>ytgl%$MY(A9AaZy0nCdb9*L#Z4W1%z#KTx>p+ z%5hOZ*e1ut=0m9*7X^fEa$Iaal*(~YK-eb7#pXk)92W(IZE{>}K9tIFQ9#%x$HnGD zsT>ytgl%$MY(A9AaZy0nCKK1%>>*t2lP7P7vx*q&-=f6{C)6- y+5PRy=B*1~{Ql#uU!~`dd)&N1g5JJ;50F2(^zoU`&wfTs(A>P(xcQrZA5Cnn=bV>Pjj?KWv8 zBm`VIAaPlNfC~q%`wwt{3ulf0Z{+LVaD6WZ;PQj%`vUm%^M?U=_J-Hm zO?I0vIVk9tp&PVudDst0Zvd*x!w{kaoCs~a@A2w+X1I#G-ug*| zcTP52=;Q#|ZfUu`R2@1bKp!Vi81{R9>FF^z%h!vF!2IkNaMnGaG2Ce zr8Lpx7>%nRP7?X?h#jFQ4PhuLWm%dha?wN+9!9 zky6jXbH_t(fh_gpvTP~jGgKvGbygz`lOSpZL9d>#vaK;fVRbcKRi^M{6C%$~xjt2u zXwh`Wr}1zDCb&+twkTVoVzd;+AumIFTDBZnE(FPYQZbr=>vfLL#8B;)QgL*}(Trk@ zLQgsd*+DK$;JKm{`xfH3$ms-8A0~CL5BISY`ukOB+F0m0Sy#?#&h50qGeWOQCBQiv^8XkwvJ8NwGdP_J%iY67UeUc z8v!~@_X`P~mliibB>eQWG(&B-6;l>vNWv?M>53NCRME!mif%(yccC#(R0uYc=;g>G zl@Im`ebTYGB$coanMNyFv2VQWQCk>@8@yP3h4w@DZL)_ynkRS zVt90W6Cq=_ZMZrVk*2t!-bS|AHY_L_*fK5LF*QA1?zcA)s^aLCagF*nCt|viQ5X9A z*sV+Bv5g!4OLKR=n)r9;ZqD`Pe=&FYZaiBV$JKVWl2+5(3x`x;QW0QQ{gkRS(>7f- zdH>zCn)VK}{-!FELsHVuk+kThrF(2?(M?OI%2$0asjH)GRC7U<-UH>A=N)ppj_Vb} z(8zA5n`y|d?+u+MFC-(92c7p<>k02AZ(N4V)LQA92W(I zZE{>}K9rZ^qJXeXj*HEQ@^V}h5Vpy2vH4J5j*9}qHaRXfAIi&dQ9#%x$HnGDc{wf$ z2;1bi*nB82$3+2Qn;aLL59Q^!C?IT;<6`rnyc`z=gl%$MY(A8imZlHkVxK&DJ0OqPzVC$B$>X^KTHkI0aPkBI@4N@VAE)H| zCIH))z=el)0dPJB;A-&w8;^ZN`o6Z&SZNJ^`2D*t9su%v7nNJfFaCV_(7UJm$u~bO vf7!2mX21R8pLbn4=W%mz6@b&zi{RH^?tkU_ + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/drawable/sel_btn_submit_gray_right.xml b/commonmodule/src/main/res/drawable/sel_btn_submit_gray_right.xml new file mode 100755 index 0000000..7ab1709 --- /dev/null +++ b/commonmodule/src/main/res/drawable/sel_btn_submit_gray_right.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/drawable/sel_btn_text_white_black.xml b/commonmodule/src/main/res/drawable/sel_btn_text_white_black.xml new file mode 100755 index 0000000..4cda6ae --- /dev/null +++ b/commonmodule/src/main/res/drawable/sel_btn_text_white_black.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/drawable/shape_btn_left_radius_blue.xml b/commonmodule/src/main/res/drawable/shape_btn_left_radius_blue.xml new file mode 100755 index 0000000..273e141 --- /dev/null +++ b/commonmodule/src/main/res/drawable/shape_btn_left_radius_blue.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/drawable/shape_btn_left_radius_gray.xml b/commonmodule/src/main/res/drawable/shape_btn_left_radius_gray.xml new file mode 100755 index 0000000..b0b4618 --- /dev/null +++ b/commonmodule/src/main/res/drawable/shape_btn_left_radius_gray.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/drawable/shape_btn_right_radius_blue.xml b/commonmodule/src/main/res/drawable/shape_btn_right_radius_blue.xml new file mode 100755 index 0000000..b54874d --- /dev/null +++ b/commonmodule/src/main/res/drawable/shape_btn_right_radius_blue.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/drawable/shape_btn_right_radius_gray.xml b/commonmodule/src/main/res/drawable/shape_btn_right_radius_gray.xml new file mode 100755 index 0000000..281bdfc --- /dev/null +++ b/commonmodule/src/main/res/drawable/shape_btn_right_radius_gray.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/activity_statistics.xml b/commonmodule/src/main/res/layout/activity_statistics.xml new file mode 100644 index 0000000..4a907c9 --- /dev/null +++ b/commonmodule/src/main/res/layout/activity_statistics.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_offline.xml b/commonmodule/src/main/res/layout/item_step_offline.xml new file mode 100755 index 0000000..1e2b47f --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_offline.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_offline_test.xml b/commonmodule/src/main/res/layout/item_step_offline_test.xml new file mode 100755 index 0000000..288fe85 --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_offline_test.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_online.xml b/commonmodule/src/main/res/layout/item_step_online.xml new file mode 100755 index 0000000..c91ff71 --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_online.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_start.xml b/commonmodule/src/main/res/layout/item_step_start.xml new file mode 100755 index 0000000..678fdf1 --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_start.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_stay.xml b/commonmodule/src/main/res/layout/item_step_stay.xml new file mode 100755 index 0000000..eda068e --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_stay.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_stop.xml b/commonmodule/src/main/res/layout/item_step_stop.xml new file mode 100755 index 0000000..cb0f0e3 --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_stop.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/commonmodule/src/main/res/layout/item_step_unusual.xml b/commonmodule/src/main/res/layout/item_step_unusual.xml new file mode 100755 index 0000000..c3be5bd --- /dev/null +++ b/commonmodule/src/main/res/layout/item_step_unusual.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gridmodule/src/main/AndroidManifest.xml b/gridmodule/src/main/AndroidManifest.xml index eed9990..76429b1 100644 --- a/gridmodule/src/main/AndroidManifest.xml +++ b/gridmodule/src/main/AndroidManifest.xml @@ -4,7 +4,8 @@ package="com.tengshisoft.gridmodule"> - + + diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleActivity.java index b8761e5..9622ef4 100644 --- a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleActivity.java +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleActivity.java @@ -150,8 +150,7 @@ public class IncidentHandleActivity extends BaseActivity { @BindView(R2.id.rlv_handle_photos) RecyclerView mRlvHandlePhotos; private Unbinder mBind; - private String mCaseId; - private String mDispatchId; + private String mReportId; private IncidentDetailBean mIncidentDetailBean; private DispatchDetailBean mDispatchDetailBean; private BaiduMap mBaiduMap; @@ -173,8 +172,7 @@ public class IncidentHandleActivity extends BaseActivity { public void initData() { mBind = ButterKnife.bind(this); mTvBaseTitle.setText("事件处理"); - mCaseId = getIntent().getStringExtra("caseId"); - mDispatchId = getIntent().getStringExtra("dispatchId"); + mReportId = getIntent().getStringExtra("reportId"); mTaskId = getIntent().getStringExtra("taskId"); mTvPublish.setVisibility(View.VISIBLE); mTvPublish.setText("日志"); @@ -196,6 +194,7 @@ public class IncidentHandleActivity extends BaseActivity { private void onShowBackDialog() { CenterInputView intputView = new CenterInputView.DialogBuilder(mActivity).build(); intputView.addOnChoseListener((time, content) -> { + hideSoftKeyboard(); intputView.dismiss(); doRollBack(content); }); @@ -209,7 +208,7 @@ public class IncidentHandleActivity extends BaseActivity { */ private void doRollBack(String content) { IncidentRebackBean bean = new IncidentRebackBean(); - bean.setDispatchId(mDispatchId); + bean.setReportId(mReportId); bean.setExplain(content); bean.setTaskId(mTaskId); Gson gson = new Gson(); @@ -322,7 +321,7 @@ public class IncidentHandleActivity extends BaseActivity { */ private RequestBody buildParams() { SaveHandleIncidentBean bean = new SaveHandleIncidentBean(); - bean.setDispatchId(mDispatchId); + bean.setReportId(mReportId); bean.setHandlePhotos(mPhotoIds); String content = mEtContent.getText().toString().trim(); bean.setHandleSummary(content); @@ -507,7 +506,7 @@ public class IncidentHandleActivity extends BaseActivity { */ private void doSaveApply(String time, String content) { DelayApplyBean bean = new DelayApplyBean(); - bean.setDispatchId(mDispatchId); + bean.setDispatchId(""); bean.setDelayExpireTime(time); bean.setDelayApplyReason(content); Gson gson = new Gson(); @@ -517,7 +516,7 @@ public class IncidentHandleActivity extends BaseActivity { dialog.show(); RetrofitManager.getInstance() .create(Apis.class) - .doApplyDelay(requestBody, UserLgUtils.getToken()) + .doApplyDelay(mReportId, requestBody, UserLgUtils.getToken()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -573,8 +572,8 @@ public class IncidentHandleActivity extends BaseActivity { * 获取详情 */ private void getDetailData() { - Observable dispatch = RetrofitManager.getInstance().create(Apis.class).getDispatchDetailById(mDispatchId, UserLgUtils.getToken()); - Observable incidentDetail = RetrofitManager.getInstance().create(Apis.class).getIncidentDetailById(mCaseId, UserLgUtils.getToken()); + Observable dispatch = RetrofitManager.getInstance().create(Apis.class).getDispatchDetailById(mTaskId, UserLgUtils.getToken()); + Observable incidentDetail = RetrofitManager.getInstance().create(Apis.class).getIncidentDetailById(mReportId, UserLgUtils.getToken()); Observable.merge(dispatch, incidentDetail) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleListActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleListActivity.java index 325552d..4068e40 100644 --- a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleListActivity.java +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/cases/IncidentHandleListActivity.java @@ -15,7 +15,9 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.hjq.toast.ToastUtils; import com.scwang.smart.refresh.layout.SmartRefreshLayout; import com.tengshisoft.commonmodule.adapters.IncidentHandleListAdapter; +import com.tengshisoft.commonmodule.adapters.IncidentListAdapter; import com.tengshisoft.commonmodule.beans.IncidentHandleListBean; +import com.tengshisoft.commonmodule.beans.IncidentListBean; import com.tengshisoft.commonmodule.nets.Apis; import com.tengshisoft.gridmodule.R; import com.tengshisoft.gridmodule.R2; @@ -69,8 +71,8 @@ public class IncidentHandleListActivity extends BaseActivity { @BindView(R2.id.tv_error_hint) TextView mTvErrorHint; private Unbinder mBind; - private List mDatas; - private IncidentHandleListAdapter mAdapter; + private List mDatas; + private IncidentListAdapter mAdapter; private int mCurrentPage = 1; private String mKeywords = ""; @@ -86,7 +88,7 @@ public class IncidentHandleListActivity extends BaseActivity { mEtBaseSearchContent.setHint("请输入事件编码(分类名称)"); refreshView(STATE_LOAD_SUCCESS); mDatas = new ArrayList<>(); - mAdapter = new IncidentHandleListAdapter(mActivity, mDatas); + mAdapter = new IncidentListAdapter(mActivity, mDatas); mRlvComponents.setLayoutManager(new LinearLayoutManager(mActivity)); mRlvComponents.setAdapter(mAdapter); mSrlContent.setOnRefreshListener(v -> doRefresh()); @@ -101,8 +103,7 @@ public class IncidentHandleListActivity extends BaseActivity { }); mAdapter.addOnItemClickListener(v -> ARouter.getInstance() .build(PathConfig.PATH_MODULE_GRID_ACTIVITY_INCIDENT_HANDLE) - .withString("caseId", v.getReportId()) - .withString("dispatchId", v.getDispatchId()) + .withString("reportId", v.getReportId()) .withString("taskId", v.getTaskId()) .navigation(mActivity, 12)); } @@ -117,14 +118,14 @@ public class IncidentHandleListActivity extends BaseActivity { .getIncidentHandleList(mKeywords, mCurrentPage + "", UserLgUtils.getToken()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { + .subscribe(new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(@NonNull IncidentHandleListBean communityListBean) { + public void onNext(@NonNull IncidentListBean communityListBean) { if (communityListBean.getRows() != null && communityListBean.getRows().size() > 0) { ++mCurrentPage; if (currentPage == 1) { diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/locus/WorkLocusActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/locus/WorkLocusActivity.java new file mode 100644 index 0000000..9b0f09e --- /dev/null +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/locus/WorkLocusActivity.java @@ -0,0 +1,678 @@ +package com.tengshisoft.gridmodule.incident.activitys.locus; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.graphics.Color; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.ZoomControls; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.baidu.mapapi.map.BaiduMap; +import com.baidu.mapapi.map.BitmapDescriptor; +import com.baidu.mapapi.map.MapStatus; +import com.baidu.mapapi.map.MapStatusUpdate; +import com.baidu.mapapi.map.MapStatusUpdateFactory; +import com.baidu.mapapi.map.OverlayOptions; +import com.baidu.mapapi.map.PolylineOptions; +import com.baidu.mapapi.map.TextureMapView; +import com.baidu.mapapi.model.LatLng; +import com.baidu.mapapi.utils.DistanceUtil; +import com.bigkoo.pickerview.builder.TimePickerBuilder; +import com.bigkoo.pickerview.view.TimePickerView; +import com.hjq.toast.ToastUtils; +import com.tengshisoft.commonmodule.adapters.LocusStepAdapter; +import com.tengshisoft.commonmodule.beans.DrawMapLineBean; +import com.tengshisoft.commonmodule.beans.LocationPointBean; +import com.tengshisoft.commonmodule.beans.LocusTextBean; +import com.tengshisoft.commonmodule.nets.Apis; +import com.tengshisoft.gridmodule.R; +import com.tengshisoft.gridmodule.R2; +import com.tenlionsoft.baselib.constant.PathConfig; +import com.tenlionsoft.baselib.constant.TimeConstants; +import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; +import com.tenlionsoft.baselib.utils.ExceptionHandler; +import com.tenlionsoft.baselib.utils.TimeUtils; +import com.tenlionsoft.baselib.utils.UIUtil; +import com.tenlionsoft.baselib.utils.UserLgUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * 作者: Adam + * 日期: 2021年10月29日17:33:22 + * 邮箱: itgaojian@163.com + * 描述: 工作轨迹 + */ +@Route(path = PathConfig.PATH_MODULE_GRID_ACTIVITY_WORK_LOCUS) +public class WorkLocusActivity extends BaseActivity { + + + @BindView(R2.id.tmv_map) + TextureMapView mTmvMap; + @BindView(R2.id.btn_reload) + Button mBtnReload; + @BindView(R2.id.rb_type_map) + RadioButton mRbTypeMap; + @BindView(R2.id.rb_satellite) + RadioButton mRbSatellite; + @BindView(R2.id.rg_map_type) + RadioGroup mRgMapType; + @BindView(R2.id.rl_map_view) + RelativeLayout mRlMapView; + @BindView(R2.id.rb_map) + RadioButton mRbMap; + @BindView(R2.id.rb_text) + RadioButton mRbText; + @BindView(R2.id.rg_type) + RadioGroup mRgType; + @BindView(R2.id.iv_user_icon) + ImageView mIvUserIcon; + @BindView(R2.id.tv_user_name) + TextView mTvUserName; + @BindView(R2.id.tv_distance) + TextView mTvDistance; + @BindView(R2.id.cv_card) + CardView mCvCard; + @BindView(R2.id.rlv_step) + RecyclerView mRlvStep; + @BindView(R2.id.tv_start_date) + TextView mTvStartDate; + private Unbinder mBind; + + + private TimePickerView mTimePickerView; + private String mNowDate; + private BaiduMap mBaiduMap; + private BitmapDescriptor mBitMap; + private int mCurrentShowType = 1;//1是地图 2是文本 + private LocusStepAdapter mAdapter; + private ProgressDialog mProgressDialog; + + @Override + protected int setLayoutId() { + return R.layout.activity_work_locus; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + refreshView(STATE_LOAD_SUCCESS); + mTvStartDate.setOnClickListener(v -> showPickerView()); + mNowDate = TimeUtils.getCurrentDate(); + initMap(); + initViews(); + } + + private void initViews() { + mRgType.setOnCheckedChangeListener((group, checkedId) -> { + if (checkedId == R.id.rb_map) { + mCurrentShowType = 1; + } else if (checkedId == R.id.rb_text) { + mCurrentShowType = 2; + } + setCurrentShowView(); + }); + mRgMapType.setOnCheckedChangeListener((group, checkedId) -> { + int id = 0; + if (checkedId == R.id.rb_type_map) {//普通的 + id = 123; + } else if (checkedId == R.id.rb_satellite) {//卫星地图 + id = 1234; + } + if (id != 0) { + setMapType(id); + } + }); + mTvStartDate.setText(TimeUtils.getCurrentDate()); + setCurrentShowView(); + List mStep = new ArrayList<>(); + mAdapter = new LocusStepAdapter(this, mStep); + mRlvStep.setLayoutManager(new LinearLayoutManager(this)); + mRlvStep.setAdapter(mAdapter); + getLocusList(); + } + + /** + * 地图显示方式切换 + */ + private void setMapType(int id) { + if (id == 123) { + mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); + } else { + mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); + } + } + + /** + * 视图切换 + */ + private void setCurrentShowView() { + if (mCurrentShowType == 1) { + //显示地图 + mRlMapView.setVisibility(View.VISIBLE); + mRlvStep.setVisibility(View.GONE); + } else { + //显示文本 + mRlvStep.setVisibility(View.VISIBLE); + mRlMapView.setVisibility(View.GONE); + } + } + + /** + * 初始化地图 + */ + @SuppressLint("ClickableViewAccessibility") + private void initMap() { + mTmvMap.showZoomControls(false);//缩放控件 + mTmvMap.showScaleControl(false);//比例尺 + mBaiduMap = mTmvMap.getMap(); + mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); + mBaiduMap.setMyLocationEnabled(false); + View childAt = mTmvMap.getChildAt(1); + if (childAt != null && (childAt instanceof ImageView || childAt instanceof ZoomControls)) { + childAt.setVisibility(View.INVISIBLE); + } + moveMapToCenter(new LatLng(PathConfig.LA, PathConfig.LO), 14); + } + + /** + * 将地图移动到定位中心 + * + * @param latLng + */ + private void moveMapToCenter(LatLng latLng, int room) { + MapStatus ms = new MapStatus.Builder().zoom(room).target(latLng).build(); + MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms); + mBaiduMap.setMapStatus(u); + } + + private void showPickerView() { + mTimePickerView = new TimePickerBuilder(mActivity, (date, v) -> { + boolean i = TimeUtils.compare(mNowDate, TimeUtils.dateToString(date)); + if (i) { + ToastUtils.show("请选择当前时间之前的日期."); + } else { + mNowDate = TimeUtils.dateToString(date); + mTvStartDate.setText(mNowDate); + getLocusList(); + } + }) + .setTitleText("请选择日期") + .setCancelColor(Color.parseColor("#1189FF")) + .setSubmitColor(Color.parseColor("#1189FF")) + .setType(new boolean[]{true, true, true, false, false, false}) + .setTitleColor(Color.parseColor("#1189FF")) + .build(); + mTimePickerView.show(); + } + + /** + * 获取定位点 + */ + private void getLocusList() { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中..."); + dialog.show(); + String startTime = mNowDate + " 00:00:00"; + String endTime = mNowDate + " 23:59:59"; + RetrofitManager.getInstance() + .create(Apis.class) + .getUserLocationList(startTime, endTime, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull List locationPointBeans) { + dialog.dismiss(); + if (locationPointBeans.size() > 0) { + drawLineToMap(locationPointBeans); + parserLocationPoint(locationPointBeans); + } else { + ToastUtils.show("当前选择时间段内无轨迹"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + + private void drawLineToMap(List mBeas) { + //清除之前的 + if (mBeas.size() > 2) { + Collections.sort(mBeas); + List mTempBeans = new ArrayList<>(mBeas); + Observable.just(mTempBeans) + .map(mineLocationBeans -> { + //坐标集合 + //颜色集合 + List lineDatas = new ArrayList<>(); + for (int i = 0; i < mineLocationBeans.size(); i++) { + if (i != mineLocationBeans.size() - 1) { + //TODO 12:移动 13:等待 14:异常 + DrawMapLineBean bean = new DrawMapLineBean(); + //第一个 + LocationPointBean preBean = mineLocationBeans.get(i); + //下一点 + LocationPointBean nextBean = mineLocationBeans.get(i + 1); + long timeSpan = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), preBean.getGmtCreate(), TimeConstants.SEC); + LatLng preLatlng = new LatLng(Double.parseDouble(preBean.getUserLat()), Double.parseDouble(preBean.getUserLng())); + LatLng nextLatlng = new LatLng(Double.parseDouble(nextBean.getUserLat()), Double.parseDouble(nextBean.getUserLng())); + //TODO 1、距离 + double distance = DistanceUtil.getDistance(preLatlng, nextLatlng); + if (timeSpan < 600) { + //在线 + if (distance / timeSpan > 20) { + //TODO 速度大于20/s异常 + bean.setOnePoint(preLatlng); + bean.setTwoPoint(nextLatlng); + bean.setType(14); + bean.setLineColor(Integer.valueOf(Color.RED)); + } else if (distance / timeSpan <= 0.5) { + //TODO 速度小于0.5m/s等待 + bean.setOnePoint(preLatlng); + bean.setTwoPoint(nextLatlng); + bean.setType(13); + bean.setLineColor(Integer.valueOf(Color.YELLOW)); + } else { + //TODO 移动 绿色 + bean.setOnePoint(preLatlng); + bean.setTwoPoint(nextLatlng); + bean.setType(12); + bean.setLineColor(Integer.valueOf(Color.parseColor("#218868"))); + } + } else { + //TODO 失联 + bean.setOnePoint(preLatlng); + bean.setTwoPoint(nextLatlng); + bean.setType(12); + bean.setLineColor(Integer.valueOf(Color.GRAY)); + } + lineDatas.add(bean); + } + } + return lineDatas; + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(List o) { + mBaiduMap.clear(); + if (o != null && o.size() > 0) { + for (int i = 0; i < o.size(); i++) { + List points = new ArrayList<>(); + points.add(o.get(i).getOnePoint()); + points.add(o.get(i).getTwoPoint()); + OverlayOptions ooPolyline11 = new PolylineOptions() + .width(10) + .dottedLine(false) + .color(o.get(i).getLineColor()) + .points(points); + mBaiduMap.addOverlay(ooPolyline11); + } + moveMapToCenter(new LatLng(o.get(0).getOnePoint().latitude, o.get(0).getOnePoint().longitude), 14); + } +// TODO 电子围栏 +// if (mPenLineBeans != null && mPenLineBeans.size() > 0) { +// drawPenToMap(mPenLineBeans); +// } + } + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + } + + @Override + public void onComplete() { + + } + }); + } + } + + + /** + * TODO 解析文本数据 + * + * @param mineBeans + */ + private void parserLocationPoint(List mineBeans) { + Collections.sort(mineBeans); + Observable.just(mineBeans) + .map((List mineLocationBeans) -> { + List mStepBeans = new ArrayList<>(); + if (mineBeans.size() >= 2) { + for (int i = 0; i < mineBeans.size(); i++) { + if (i != mineBeans.size() - 1) { + //第一个 + LocationPointBean preBean = mineBeans.get(i); + //下一点 + LocationPointBean nextBean = mineBeans.get(i + 1); + long timeSpan = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), preBean.getGmtCreate(), TimeConstants.SEC); + LatLng preLatlng = new LatLng(Double.parseDouble(preBean.getUserLat()), Double.parseDouble(preBean.getUserLng())); + LatLng nextLatlng = new LatLng(Double.parseDouble(nextBean.getUserLat()), Double.parseDouble(nextBean.getUserLng())); + if (i == 0) { + LocusTextBean bean = new LocusTextBean(); +// bean.setAddress("定位地址:未知"); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// +// } else { +// bean.setAddress(preBean.getUserLocation()); +// } + bean.setTime(preBean.getGmtCreate()); + bean.setStateTime("开始定位" + preBean.getGmtCreate()); + bean.setType(LocusStepAdapter.TYPE_START); + bean.setCreateTime(preBean.getGmtCreate()); + bean.setOrder(i); + mStepBeans.add(bean); + } else { + //TODO 1、距离 + double distance = DistanceUtil.getDistance(preLatlng, nextLatlng); + if (timeSpan < 600) { + //在线 + if (distance / timeSpan > 20) { + //TODO 速度大于20/s异常 + if (mStepBeans != null && mStepBeans.size() > 0) { + LocusTextBean tempbean = mStepBeans.get(mStepBeans.size() - 1); + if (tempbean.getType() == LocusStepAdapter.TYPE_UNUSUAL) { + //上一条也是移动的 //将停止时间累计 + long timeSpan2 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), tempbean.getCreateTime(), TimeConstants.SEC); + tempbean.setStateTime(timeSpan2 + ""); + tempbean.setCreateTime(nextBean.getGmtCreate()); + long l = tempbean.getSecond() + timeSpan2; + tempbean.setOrder(i); + tempbean.setSecond(l); + } else { + LocusTextBean text = mStepBeans.get(mStepBeans.size() - 1); + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(text.getCreateTime()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), text.getCreateTime(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setType(LocusStepAdapter.TYPE_UNUSUAL); + bean.setSecond(timeSpan1); + bean.setOrder(i); + mStepBeans.add(bean); + } + } else { + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(preBean.getGmtCreate()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), preBean.getGmtCreate(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setSecond(timeSpan1); + bean.setType(LocusStepAdapter.TYPE_UNUSUAL); + bean.setOrder(i); + mStepBeans.add(bean); + } + } else if (distance / timeSpan <= 0.5) { + //TODO 速度小于0.5m/s等待 + if (mStepBeans != null && mStepBeans.size() > 0) { + LocusTextBean tempbean = mStepBeans.get(mStepBeans.size() - 1); + if (tempbean.getType() == LocusStepAdapter.TYPE_STAY) { + //上一条也是移动的 //将停止时间累计 + long timeSpan2 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), tempbean.getCreateTime(), TimeConstants.SEC); + tempbean.setStateTime(timeSpan2 + ""); + tempbean.setCreateTime(nextBean.getGmtCreate()); + long l = tempbean.getSecond() + timeSpan2; + tempbean.setOrder(i); + tempbean.setSecond(l); + } else { + LocusTextBean text = mStepBeans.get(mStepBeans.size() - 1); + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(text.getCreateTime()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), text.getCreateTime(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setType(LocusStepAdapter.TYPE_STAY); + bean.setOrder(i); + bean.setSecond(timeSpan1); + mStepBeans.add(bean); + } + } else { + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(preBean.getGmtCreate()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), preBean.getGmtCreate(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setSecond(timeSpan1); + bean.setType(LocusStepAdapter.TYPE_STAY); + bean.setOrder(i); + mStepBeans.add(bean); + } + } else { + //TODO 移动 + if (mStepBeans != null && mStepBeans.size() > 0) { + LocusTextBean tempbean = mStepBeans.get(mStepBeans.size() - 1); + if (tempbean.getType() == LocusStepAdapter.TYPE_ONLINE) { + //上一条也是移动的 //将停止时间累计 + long timeSpan2 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), tempbean.getCreateTime(), TimeConstants.SEC); + tempbean.setStateTime(timeSpan2 + ""); + tempbean.setCreateTime(nextBean.getGmtCreate()); + long l = tempbean.getSecond() + timeSpan2; + tempbean.setSecond(l); + tempbean.setOrder(i); + } else { + LocusTextBean locusTextBean = mStepBeans.get(mStepBeans.size() - 1); + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(locusTextBean.getCreateTime()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), locusTextBean.getCreateTime(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setType(LocusStepAdapter.TYPE_ONLINE); + bean.setSecond(timeSpan1); + bean.setOrder(i); + mStepBeans.add(bean); + } + } else { + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(preBean.getGmtCreate()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), preBean.getGmtCreate(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setSecond(timeSpan1); + bean.setType(LocusStepAdapter.TYPE_ONLINE); + bean.setOrder(i); + mStepBeans.add(bean); + } + } + } else { + //TODO 失联 + if (mStepBeans != null && mStepBeans.size() > 0) { + LocusTextBean tempbean = mStepBeans.get(mStepBeans.size() - 1); + if (tempbean.getType() == LocusStepAdapter.TYPE_OFFLINE) { + //上一条也是移动的 //将停止时间累计 + long timeSpan2 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), tempbean.getCreateTime(), TimeConstants.SEC); + tempbean.setStateTime(timeSpan2 + ""); + tempbean.setCreateTime(nextBean.getGmtCreate()); + long l = tempbean.getSecond() + timeSpan2; + tempbean.setSecond(l); + tempbean.setOrder(i); + } else { + LocusTextBean locusTextBean = mStepBeans.get(mStepBeans.size() - 1); + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(locusTextBean.getCreateTime()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), locusTextBean.getCreateTime(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setType(LocusStepAdapter.TYPE_OFFLINE); + bean.setSecond(timeSpan1); + bean.setOrder(i); + mStepBeans.add(bean); + } + } else { + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(preBean.getUserLocation()) || "null".equals(preBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress("定位地址:" + preBean.getUserLocation()); +// } + bean.setOrder(i); + bean.setCreateTime(nextBean.getGmtCreate()); + bean.setTime(preBean.getGmtCreate()); + long timeSpan1 = TimeUtils.getTimeSpan(nextBean.getGmtCreate(), preBean.getGmtCreate(), TimeConstants.SEC); + bean.setStateTime(timeSpan1 + ""); + bean.setSecond(timeSpan1); + bean.setType(LocusStepAdapter.TYPE_OFFLINE); + mStepBeans.add(bean); + } + } + } + } else { + //最后一个点 + LocationPointBean mineLocationBean = mineBeans.get(mineBeans.size() - 1); + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(mineLocationBean.getUserLocation()) || "null".equals(mineLocationBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress(mineLocationBean.getUserLocation()); +// } + bean.setOrder(i); + bean.setTime(mineLocationBean.getGmtCreate()); + bean.setStateTime("开始定位" + mineLocationBean.getGmtCreate()); + bean.setType(LocusStepAdapter.TYPE_STOP); + bean.setCreateTime(mineLocationBean.getGmtCreate()); + mStepBeans.add(bean); + } + } + } else { + LocationPointBean mineLocationBean = mineBeans.get(mineBeans.size() - 1); + LocusTextBean bean = new LocusTextBean(); +// if (TextUtils.isEmpty(mineLocationBean.getUserLocation()) || "null".equals(mineLocationBean.getUserLocation())) { +// bean.setAddress("定位地址:未知"); +// } else { +// bean.setAddress(mineLocationBean.getUserLocation()); +// } + bean.setOrder(2); + bean.setTime(mineLocationBean.getGmtCreate()); + bean.setStateTime("开始定位" + mineLocationBean.getGmtCreate()); + bean.setType(LocusStepAdapter.TYPE_START); + bean.setCreateTime(mineLocationBean.getGmtCreate()); + mStepBeans.add(bean); + + LocusTextBean bean1 = new LocusTextBean(); +// if (TextUtils.isEmpty(mineLocationBean.getUserLocation()) || "null".equals(mineLocationBean.getUserLocation())) { +// bean1.setAddress("定位地址:未知"); +// } else { +// bean1.setAddress(mineLocationBean.getUserLocation()); +// } + bean1.setOrder(1); + bean1.setTime(mineLocationBean.getGmtCreate()); + bean1.setStateTime("开始定位" + mineLocationBean.getGmtCreate()); + bean1.setType(LocusStepAdapter.TYPE_STOP); + bean1.setCreateTime(mineLocationBean.getGmtCreate()); + mStepBeans.add(bean1); + } + return mStepBeans; + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(List locusTextBeans) { + if (locusTextBeans != null && locusTextBeans.size() > 0) { + Collections.sort(locusTextBeans); + mAdapter.setData(locusTextBeans); + } + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + } + } + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + } + ToastUtils.show("获取历史轨迹数据失败,请稍后重试"); + } + + @Override + public void onComplete() { + + } + }); + } +} \ No newline at end of file diff --git a/gridmodule/src/main/res/layout/activity_work_locus.xml b/gridmodule/src/main/res/layout/activity_work_locus.xml new file mode 100644 index 0000000..ad5ee8c --- /dev/null +++ b/gridmodule/src/main/res/layout/activity_work_locus.xml @@ -0,0 +1,223 @@ + + + + + + + + + +