From d9d97f97c800b255f2b909640e36d5d0da5208da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=81=A5?= Date: Fri, 22 Oct 2021 17:12:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=AB=E9=80=92=E7=89=A9=E6=B5=81=E5=B7=A1?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baselib/core/retrofit_net/BaseUrlApi.java | 2 +- .../adapters/ExpressListAdapter.java | 14 + .../adapters/PatrolExpressListAdapter.java | 43 ++ .../beans/PatrolExpressDetailBean.java | 128 ++++ .../beans/PatrolExpressListBean.java | 160 +++++ .../beans/SavePatrolExpressBean.java | 74 +++ .../commonmodule/holders/ExpressHolder.java | 2 + .../holders/PatrolExpressHolder.java | 30 + .../tengshisoft/commonmodule/nets/Apis.java | 41 ++ .../src/main/res/layout/item_express_list.xml | 72 ++- gridmodule/src/main/AndroidManifest.xml | 6 +- .../patrols/ExpressPatrolAddActivity.java | 519 ++++++++++++++++ .../patrols/ExpressPatrolDetailActivity.java | 245 ++++++++ .../patrols/ExpressPatrolEditActivity.java | 582 ++++++++++++++++++ .../patrols/ExpressPatrolListActivity.java | 353 +++++++++++ .../security/ExpressPoiListActivity.java | 11 + .../layout/activity_express_patrol_add.xml | 187 ++++++ .../layout/activity_express_patrol_detail.xml | 219 +++++++ .../layout/activity_express_patrol_edit.xml | 187 ++++++ .../layout/activity_express_patrol_list.xml | 332 ++++++++++ .../layout/activity_key_area_patrol_list.xml | 2 +- .../res/layout/activity_penal_patrol_list.xml | 2 +- 22 files changed, 3184 insertions(+), 27 deletions(-) create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/PatrolExpressListAdapter.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressDetailBean.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressListBean.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SavePatrolExpressBean.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/PatrolExpressHolder.java create mode 100644 gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolAddActivity.java create mode 100644 gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolDetailActivity.java create mode 100644 gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolEditActivity.java create mode 100644 gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolListActivity.java create mode 100644 gridmodule/src/main/res/layout/activity_express_patrol_add.xml create mode 100644 gridmodule/src/main/res/layout/activity_express_patrol_detail.xml create mode 100644 gridmodule/src/main/res/layout/activity_express_patrol_edit.xml create mode 100644 gridmodule/src/main/res/layout/activity_express_patrol_list.xml 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 6a36d43..53243bc 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 @@ -25,7 +25,7 @@ public class BaseUrlApi { public static final String BASE_URL = BASE_MAIN_IP;//基础URL - public static final String SOCKET_IP = "http://192.168.0.103:8081/websocket";/*SocketIP*/ + public static final String SOCKET_IP = IP + "websocket";/*SocketIP*/ //地图页面展示类型 diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ExpressListAdapter.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ExpressListAdapter.java index d2788e4..a771d6b 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ExpressListAdapter.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ExpressListAdapter.java @@ -7,6 +7,7 @@ import android.view.ViewGroup; import com.tengshisoft.commonmodule.R; import com.tengshisoft.commonmodule.beans.ExpressListBean; +import com.tengshisoft.commonmodule.beans.KeyAreaListBean; import com.tengshisoft.commonmodule.beans.PenalListBean; import com.tengshisoft.commonmodule.holders.ExpressHolder; import com.tengshisoft.commonmodule.holders.PenalListHolder; @@ -39,7 +40,20 @@ public class ExpressListAdapter extends BaseRecyclerAdapter mPatrolListener.onPatrol(bean)); + } + } + private OnPatrolListener mPatrolListener; + + public void addOnPatrolListener(OnPatrolListener listener) { + this.mPatrolListener = listener; + } + + + public interface OnPatrolListener { + void onPatrol(ExpressListBean.RowsBean bean); } } diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/PatrolExpressListAdapter.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/PatrolExpressListAdapter.java new file mode 100644 index 0000000..224b410 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/PatrolExpressListAdapter.java @@ -0,0 +1,43 @@ +package com.tengshisoft.commonmodule.adapters; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.tengshisoft.commonmodule.R; +import com.tengshisoft.commonmodule.beans.PatrolExpressListBean; +import com.tengshisoft.commonmodule.beans.PatrolPenalListBean; +import com.tengshisoft.commonmodule.holders.PatrolExpressHolder; +import com.tengshisoft.commonmodule.holders.PatrolPenalHolder; +import com.tenlionsoft.baselib.core.widget.base.BaseRecyclerAdapter; + +import java.util.List; + +/** + * 作者: adam + * 日期: 2021/9/26 - 3:01 下午 + * 邮箱: itgaojian@163.com + * 描述: 快递巡查 + */ +public class PatrolExpressListAdapter extends BaseRecyclerAdapter { + + public PatrolExpressListAdapter(Context ctx, List list) { + super(ctx, list); + } + + @Override + public PatrolExpressHolder createHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_patrol_key_area_list, parent, false); + return new PatrolExpressHolder(itemView); + } + + @Override + public void bindHolder(PatrolExpressHolder holder, int i) { + PatrolExpressListBean.RowsBean bean = mData.get(i); + holder.mTvContent.setText("巡查内容:" + Html.fromHtml(bean.getPatrolContent())); + holder.mTvResult.setText("巡查结果:" + Html.fromHtml(bean.getPatrolResult())); + holder.mTvTime.setText("巡查时间:" + bean.getPatrolTime()); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressDetailBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressDetailBean.java new file mode 100644 index 0000000..3da45db --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressDetailBean.java @@ -0,0 +1,128 @@ +package com.tengshisoft.commonmodule.beans; + +/** + * 作者: adam + * 日期: 2021/10/22 - 4:23 下午 + * 邮箱: itgaojian@163.com + * 描述: 快递巡查 + */ +public class PatrolExpressDetailBean { + + private String creator; + private String gmtCreate; + private String gmtModified; + private int isDelete; + private String logisticsSafeId; + private String logisticsSafePatrolId; + private String modifier; + private String patrolContent; + private String patrolPhoto; + private String patrolResult; + private String patrolTime; + private String patrolVideo; + private String remake; + + 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 String getGmtModified() { + return gmtModified; + } + + public void setGmtModified(String gmtModified) { + this.gmtModified = gmtModified; + } + + public int getIsDelete() { + return isDelete; + } + + public void setIsDelete(int isDelete) { + this.isDelete = isDelete; + } + + public String getLogisticsSafeId() { + return logisticsSafeId; + } + + public void setLogisticsSafeId(String logisticsSafeId) { + this.logisticsSafeId = logisticsSafeId; + } + + public String getLogisticsSafePatrolId() { + return logisticsSafePatrolId; + } + + public void setLogisticsSafePatrolId(String logisticsSafePatrolId) { + this.logisticsSafePatrolId = logisticsSafePatrolId; + } + + public String getModifier() { + return modifier; + } + + public void setModifier(String modifier) { + this.modifier = modifier; + } + + public String getPatrolContent() { + return patrolContent; + } + + public void setPatrolContent(String patrolContent) { + this.patrolContent = patrolContent; + } + + public String getPatrolPhoto() { + return patrolPhoto; + } + + public void setPatrolPhoto(String patrolPhoto) { + this.patrolPhoto = patrolPhoto; + } + + public String getPatrolResult() { + return patrolResult; + } + + public void setPatrolResult(String patrolResult) { + this.patrolResult = patrolResult; + } + + public String getPatrolTime() { + return patrolTime; + } + + public void setPatrolTime(String patrolTime) { + this.patrolTime = patrolTime; + } + + public String getPatrolVideo() { + return patrolVideo; + } + + public void setPatrolVideo(String patrolVideo) { + this.patrolVideo = patrolVideo; + } + + public String getRemake() { + return remake; + } + + public void setRemake(String remake) { + this.remake = remake; + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressListBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressListBean.java new file mode 100644 index 0000000..b798e75 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/PatrolExpressListBean.java @@ -0,0 +1,160 @@ +package com.tengshisoft.commonmodule.beans; + +import java.util.List; + +/** + * 作者: adam + * 日期: 2021/10/22 - 4:22 下午 + * 邮箱: itgaojian@163.com + * 描述: 快递巡查 + */ +public class PatrolExpressListBean { + + private int page; + private int total; + private List rows; + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + private String creator; + private String gmtCreate; + private String gmtModified; + private int isDelete; + private String logisticsSafeId; + private String logisticsSafePatrolId; + private String modifier; + private String patrolContent; + private String patrolPhoto; + private String patrolResult; + private String patrolTime; + private String patrolVideo; + private String remake; + + 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 String getGmtModified() { + return gmtModified; + } + + public void setGmtModified(String gmtModified) { + this.gmtModified = gmtModified; + } + + public int getIsDelete() { + return isDelete; + } + + public void setIsDelete(int isDelete) { + this.isDelete = isDelete; + } + + public String getLogisticsSafeId() { + return logisticsSafeId; + } + + public void setLogisticsSafeId(String logisticsSafeId) { + this.logisticsSafeId = logisticsSafeId; + } + + public String getLogisticsSafePatrolId() { + return logisticsSafePatrolId; + } + + public void setLogisticsSafePatrolId(String logisticsSafePatrolId) { + this.logisticsSafePatrolId = logisticsSafePatrolId; + } + + public String getModifier() { + return modifier; + } + + public void setModifier(String modifier) { + this.modifier = modifier; + } + + public String getPatrolContent() { + return patrolContent; + } + + public void setPatrolContent(String patrolContent) { + this.patrolContent = patrolContent; + } + + public String getPatrolPhoto() { + return patrolPhoto; + } + + public void setPatrolPhoto(String patrolPhoto) { + this.patrolPhoto = patrolPhoto; + } + + public String getPatrolResult() { + return patrolResult; + } + + public void setPatrolResult(String patrolResult) { + this.patrolResult = patrolResult; + } + + public String getPatrolTime() { + return patrolTime; + } + + public void setPatrolTime(String patrolTime) { + this.patrolTime = patrolTime; + } + + public String getPatrolVideo() { + return patrolVideo; + } + + public void setPatrolVideo(String patrolVideo) { + this.patrolVideo = patrolVideo; + } + + public String getRemake() { + return remake; + } + + public void setRemake(String remake) { + this.remake = remake; + } + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SavePatrolExpressBean.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SavePatrolExpressBean.java new file mode 100644 index 0000000..6daad81 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/beans/SavePatrolExpressBean.java @@ -0,0 +1,74 @@ +package com.tengshisoft.commonmodule.beans; + +/** + * 作者: adam + * 日期: 2021/10/22 - 4:49 下午 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class SavePatrolExpressBean { + + private String logisticsSafeId; + private String patrolContent; + private String patrolPhoto; + private String patrolResult; + private String patrolTime; + private String patrolVideo; + private String remake; + + public String getLogisticsSafeId() { + return logisticsSafeId; + } + + public void setLogisticsSafeId(String logisticsSafeId) { + this.logisticsSafeId = logisticsSafeId; + } + + public String getPatrolContent() { + return patrolContent; + } + + public void setPatrolContent(String patrolContent) { + this.patrolContent = patrolContent; + } + + public String getPatrolPhoto() { + return patrolPhoto; + } + + public void setPatrolPhoto(String patrolPhoto) { + this.patrolPhoto = patrolPhoto; + } + + public String getPatrolResult() { + return patrolResult; + } + + public void setPatrolResult(String patrolResult) { + this.patrolResult = patrolResult; + } + + public String getPatrolTime() { + return patrolTime; + } + + public void setPatrolTime(String patrolTime) { + this.patrolTime = patrolTime; + } + + public String getPatrolVideo() { + return patrolVideo; + } + + public void setPatrolVideo(String patrolVideo) { + this.patrolVideo = patrolVideo; + } + + public String getRemake() { + return remake; + } + + public void setRemake(String remake) { + this.remake = remake; + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/ExpressHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/ExpressHolder.java index c7b6aa6..96da4eb 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/ExpressHolder.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/ExpressHolder.java @@ -21,6 +21,7 @@ public class ExpressHolder extends RecyclerView.ViewHolder { public TextView mTvUser; public TextView mTvPhone; public TextView mTvLocation; + public TextView mTvPatrol; public ExpressHolder(@NonNull @NotNull View itemView) { super(itemView); @@ -28,5 +29,6 @@ public class ExpressHolder extends RecyclerView.ViewHolder { mTvUser = itemView.findViewById(R.id.tv_user); mTvPhone = itemView.findViewById(R.id.tv_phone); mTvLocation = itemView.findViewById(R.id.tv_location); + mTvPatrol = itemView.findViewById(R.id.tv_patrol_record); } } diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/PatrolExpressHolder.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/PatrolExpressHolder.java new file mode 100644 index 0000000..7e07fbe --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/holders/PatrolExpressHolder.java @@ -0,0 +1,30 @@ +package com.tengshisoft.commonmodule.holders; + +import android.view.View; +import android.widget.TextView; + +import com.tengshisoft.commonmodule.R; + +import org.jetbrains.annotations.NotNull; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * 作者: adam + * 日期: 2021年10月18日17:57:07 + * 邮箱: itgaojian@163.com + * 描述: 命案发生地巡查记录 + */ +public class PatrolExpressHolder extends RecyclerView.ViewHolder { + public TextView mTvContent; + public TextView mTvResult; + public TextView mTvTime; + + public PatrolExpressHolder(@NonNull @NotNull View itemView) { + super(itemView); + mTvContent = itemView.findViewById(R.id.tv_content); + mTvResult = itemView.findViewById(R.id.tv_result); + mTvTime = itemView.findViewById(R.id.tv_time); + } +} 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 f6fcac3..bb462ba 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/Apis.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/Apis.java @@ -37,6 +37,8 @@ import com.tengshisoft.commonmodule.beans.MigrantDetailBean; import com.tengshisoft.commonmodule.beans.MigrantListBean; import com.tengshisoft.commonmodule.beans.OutboundDetailBean; import com.tengshisoft.commonmodule.beans.OutboundListBean; +import com.tengshisoft.commonmodule.beans.PatrolExpressDetailBean; +import com.tengshisoft.commonmodule.beans.PatrolExpressListBean; import com.tengshisoft.commonmodule.beans.PatrolKeyAreaDetailBean; import com.tengshisoft.commonmodule.beans.PatrolKeyAreaListBean; import com.tengshisoft.commonmodule.beans.PatrolPenalDetailBean; @@ -1133,4 +1135,43 @@ public interface Apis { @Headers({"base_url_name:security", "Content-Type: application/json", "Accept: application/json"}) @GET("app/homicidepatrol/get/{homicidePatrolId}") Observable getPenalPatrolDetailById(@Path("homicidePatrolId") String id, @Header("token") String token); + + + + /*快递巡查*/ + + /** + * 快递记录列表 + */ + @Headers({"base_url_name:security", "Content-Type: application/json", "Accept: application/json"}) + @GET("app/logisticssafepatrol/listpagelogisticssafepatrol") + Observable getExpressPatrolList(@Query("logisticsSafeId") String id, @Query("keywords") String key, @Query("page") String page, @Header("token") String token); + + /** + * 保存快递巡查记录 + */ + @Headers({"base_url_name:security", "Content-Type: application/json", "Accept: application/json"}) + @POST("app/logisticssafepatrol/save") + Observable doSaveExpressPatrol(@Body RequestBody body, @Header("token") String token); + + /** + * 编辑快递巡查记录 + */ + @Headers({"base_url_name:security", "Content-Type: application/json", "Accept: application/json"}) + @PUT("app/logisticssafepatrol/updatelogisticssafepatrol/{logisticsSafePatrolId}") + Observable doEditExpressPatrol(@Path("logisticsSafePatrolId") String id, @Body RequestBody body, @Header("token") String token); + + /** + * 删除快递巡查记录 + */ + @Headers({"base_url_name:security", "Content-Type: application/json", "Accept: application/json"}) + @DELETE("app/logisticssafepatrol/remove/{ids}") + Observable doDelExpressPatrol(@Path("ids") String id, @Header("token") String token); + + /** + * 获取快递巡查记录 + */ + @Headers({"base_url_name:security", "Content-Type: application/json", "Accept: application/json"}) + @GET("app/logisticssafepatrol/get/{logisticsSafePatrolId}") + Observable getExpressPatrolDetailById(@Path("logisticsSafePatrolId") String id, @Header("token") String token); } diff --git a/commonmodule/src/main/res/layout/item_express_list.xml b/commonmodule/src/main/res/layout/item_express_list.xml index cfa78a3..10a818f 100644 --- a/commonmodule/src/main/res/layout/item_express_list.xml +++ b/commonmodule/src/main/res/layout/item_express_list.xml @@ -8,34 +8,60 @@ android:orientation="vertical" android:padding="10dp"> - - + android:orientation="horizontal"> - - + + + + + + + + + + + - + + + + + diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolAddActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolAddActivity.java new file mode 100644 index 0000000..708de84 --- /dev/null +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolAddActivity.java @@ -0,0 +1,519 @@ +package com.tengshisoft.gridmodule.incident.activitys.patrols; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Color; +import android.net.Uri; +import android.os.Environment; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; +import com.bigkoo.pickerview.builder.TimePickerBuilder; +import com.bigkoo.pickerview.view.TimePickerView; +import com.google.gson.Gson; +import com.hjq.toast.ToastUtils; +import com.tengshisoft.commonmodule.beans.SavePatrolExpressBean; +import com.tengshisoft.commonmodule.beans.SuccessBean; +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.core.beans.AddPhotoBean; +import com.tenlionsoft.baselib.core.beans.BaseSuccessBean; +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; +import com.tenlionsoft.baselib.core.widget.PhotoActivity; +import com.tenlionsoft.baselib.core.widget.base.AddPhotoAdapter; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; +import com.tenlionsoft.baselib.core.widget.views.ButtomDialogView; +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.io.File; +import java.util.ArrayList; +import java.util.List; + +import androidx.core.widget.NestedScrollView; +import androidx.recyclerview.widget.GridLayoutManager; +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.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; + +/** + * 作者: Adam + * 日期: 2021年10月22日16:44:40 + * 邮箱: itgaojian@163.com + * 描述: 物流巡查记录添加 + */ +@Route(path = PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_ADD) +public class ExpressPatrolAddActivity extends BaseActivity { + @BindView(R2.id.tv_issue_base_info) + TextView mTvIssueBaseInfo; + @BindView(R2.id.tv_time) + TextView mTvTime; + @BindView(R2.id.et_content) + EditText mEtContent; + @BindView(R2.id.et_result) + EditText mEtResult; + @BindView(R2.id.rlv_photos) + RecyclerView mRlvPhotos; + @BindView(R2.id.iv_play_video) + ImageView mIvPlayVideo; + @BindView(R2.id.ll_video) + LinearLayout mLlVideo; + @BindView(R2.id.iv_del_video) + ImageView mIvDelVideo; + @BindView(R2.id.et_remark) + EditText mEtRemark; + @BindView(R2.id.btn_submit) + Button mBtnSubmit; + @BindView(R2.id.nsv_content) + NestedScrollView mNsvContent; + private Unbinder mBind; + + private String mVideoPath;//视频文件路径 + private String mVideoId;//视频ID + private List mPhotos = new ArrayList<>(); + private AddPhotoAdapter mAddPhotoAdapter; + private AddPhotoBean mCurrentBean; + private String mPhotoIds = "";//相片Id + private String mPicPath; + private String mPoiId; + + @Override + protected int setLayoutId() { + return R.layout.activity_express_patrol_add; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mPoiId = getIntent().getStringExtra("poiId"); + mTvBaseTitle.setText("快递物流巡查记录上报"); + refreshView(STATE_LOAD_SUCCESS); + initViews(); + } + + private void initViews() { + mPhotos.add(new AddPhotoBean()); + mAddPhotoAdapter = new AddPhotoAdapter(mActivity, mPhotos); + mRlvPhotos.setLayoutManager(new GridLayoutManager(mActivity, 4)); + mRlvPhotos.setAdapter(mAddPhotoAdapter); + mAddPhotoAdapter.addOnDeleteListener(((bean, i) -> { + mAddPhotoAdapter.removeItem(bean); + mPhotoIds = mPhotoIds.replace(bean.getId() + ",", ""); + })); + mAddPhotoAdapter.addOnItemClickListener(bean -> { + if (TextUtils.isEmpty(bean.getPath())) { + //空数据 + showSelectPhoto(bean); + } else { + //预览 + ArrayList list = new ArrayList<>(); + list.add(bean.getPath()); + Intent intent = new Intent(); + intent.putExtra(PhotoActivity.TAG_IMGURL, list); + intent.setClass(mActivity, PhotoActivity.class); + startActivity(intent); + } + }); + mIvDelVideo.setVisibility(View.GONE); + mIvDelVideo.setOnClickListener(v -> { + mVideoPath = ""; + mVideoId = ""; + mIvPlayVideo.setBackgroundResource(R.drawable.picture_icon_video); + mIvDelVideo.setVisibility(View.GONE); + }); + mIvPlayVideo.setBackgroundResource(R.drawable.picture_icon_video); + mIvPlayVideo.setOnClickListener(v -> { + if (TextUtils.isEmpty(mVideoPath)) { + //选取视频 + showSelectVideo(); + } else { + //播放视频 + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_PLAYER_SIMPLE_VIDEO) + .withString("url", mVideoPath) + .withString("title", "巡查视频") + .navigation(); + } + }); + mTvTime.setOnClickListener(v -> onShowTime()); + mBtnSubmit.setOnClickListener(v -> doSubmit()); + } + + /** + * 时间选择 + */ + private void onShowTime() { + hideSoftKeyboard(); + TimePickerView mTimePickerView = new TimePickerBuilder(mActivity, (date, v) -> mTvTime.setText(TimeUtils.date2String(date))) + .setTitleText("请选时间") + .setCancelColor(Color.parseColor("#1189FF")) + .setSubmitColor(Color.parseColor("#1189FF")) + .setType(new boolean[]{true, true, true, true, true, true}) + .setTitleColor(Color.parseColor("#1189FF")) + .build(); + mTimePickerView.show(); + } + + private void doSubmit() { + if (checkParams()) { + RequestBody body = buildParams(); + ProgressDialog dialog = UIUtil.initDialog(mActivity, "提交中..."); + dialog.show(); + RetrofitManager.getInstance() + .create(Apis.class) + .doSaveExpressPatrol(body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull SuccessBean successBean) { + dialog.dismiss(); + ToastUtils.show("巡查成功"); + setResult(13); + finish(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + } + + private boolean checkParams() { + String time = mTvTime.getText().toString().trim(); + if (TextUtils.isEmpty(time)) { + ToastUtils.show("请输入巡查时间"); + return false; + } + String content = mEtContent.getText().toString().trim(); + if (TextUtils.isEmpty(content)) { + ToastUtils.show("请输入巡查内容"); + return false; + } + String result = mEtResult.getText().toString().trim(); + if (TextUtils.isEmpty(result)) { + ToastUtils.show("请输入巡查结果"); + return false; + } + + return true; + } + + private RequestBody buildParams() { + SavePatrolExpressBean bean = new SavePatrolExpressBean(); + bean.setLogisticsSafeId(mPoiId); + String time = mTvTime.getText().toString().trim(); + bean.setPatrolTime(time); + String content = mEtContent.getText().toString().trim(); + String result = mEtResult.getText().toString().trim(); + bean.setPatrolContent(content); + bean.setPatrolResult(result); + if (!TextUtils.isEmpty(mPhotoIds)) { + bean.setPatrolPhoto(mPhotoIds); + } + if (!TextUtils.isEmpty(mVideoId)) { + bean.setPatrolVideo(mVideoId); + } + String remark = mEtRemark.getText().toString().trim(); + if (!TextUtils.isEmpty(remark)) { + bean.setRemake(remark); + } + Gson gson = new Gson(); + String obj = gson.toJson(bean); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), obj); + return requestBody; + } + + /** + * 显示选择图片 + * + * @param bean + */ + private void showSelectPhoto(AddPhotoBean bean) { + ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity) + .setIsBackCancelable(true) + .setIscancelable(true) + .setShowLocation(Gravity.BOTTOM) + .setIsShowFile(false) + .build(); + buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() { + @Override + public void choseFile() { + } + + @Override + public void choseAlbum() { + mCurrentBean = bean; + Intent intent = new Intent(Intent.ACTION_PICK, null); + intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + "image/*"); + startActivityForResult(intent, BaseUrlApi.PHOTO_REQUEST); + buttomDialogView.dismiss(); + } + + @Override + public void choseShoot() { + mCurrentBean = bean; + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_BASELIB_TAKE_PHOTO) + .withString("path", getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getPath()) + .withString("type", "photo") + .navigation(mActivity, BaseUrlApi.CAMERA_REQUEST); + buttomDialogView.dismiss(); + } + + @Override + public void loginOut() { + + } + + @Override + public void changePwd() { + + } + }); + buttomDialogView.show(); + } + + /** + * 显示选择视频 + */ + private void showSelectVideo() { + ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity) + .setIsBackCancelable(true) + .setIscancelable(true) + .setShowLocation(Gravity.BOTTOM) + .setIsShowFile(false) + .build(); + buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() { + @Override + public void choseFile() { + } + + @Override + public void choseAlbum() { + Intent intent = new Intent(Intent.ACTION_PICK, null); + intent.setDataAndType(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, + "video/*"); + startActivityForResult(intent, BaseUrlApi.CAMERA_REQUEST_PHOTO); + buttomDialogView.dismiss(); + } + + @Override + public void choseShoot() { + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_BASELIB_TAKE_PHOTO) + .withString("path", getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getPath()) + .withString("type", "video") + .navigation(mActivity, BaseUrlApi.CAMERA_REQUEST_VIDEO); + buttomDialogView.dismiss(); + } + + @Override + public void loginOut() { + + } + + @Override + public void changePwd() { + + } + }); + buttomDialogView.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK) { + switch (requestCode) { + case BaseUrlApi.CAMERA_REQUEST://相机 + mPicPath = data.getStringExtra("name"); + uploadImg(mPicPath, 1); + break; + case BaseUrlApi.PHOTO_REQUEST://相册 + try { + if (data == null) return; + Uri uri = data.getData(); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String srcPath = cursor.getString(column_index); + uploadImg(srcPath, 2); + } catch (Exception e) { + e.printStackTrace(); + } + break; + case BaseUrlApi.CAMERA_REQUEST_VIDEO://相机录像 + mVideoPath = data.getStringExtra("name"); + uploadVideo(mVideoPath); + break; + case BaseUrlApi.CAMERA_REQUEST_PHOTO://相册 + try { + if (data == null) return; + Uri uri = data.getData(); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String srcPath = cursor.getString(column_index); + uploadVideo(srcPath); + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * 上传视频 + * + * @param videoPath + */ + private void uploadVideo(String videoPath) { + ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "视频上传中..."); + progressDialog.show(); + File file = new File(videoPath); + if (file.exists()) { + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("video", file.getName(), requestFile); + RetrofitManager.getInstance() + .create(BaseApiService.class) + .uploadVideo(body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseSuccessBean baseUserBean) { + if (progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.show("上传成功"); + mVideoPath = videoPath; + mVideoId = baseUserBean.getData(); + mIvDelVideo.setVisibility(View.VISIBLE); + mIvPlayVideo.setBackgroundResource(R.drawable.ic_play_white_icon); + } + + @Override + public void onError(Throwable e) { + if (progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ExceptionHandler.handleException(e); + + } + + @Override + public void onComplete() { + + } + }); + } else { + progressDialog.dismiss(); + ToastUtils.show("视频文件路径有误."); + } + } + + /** + * 上传文件 + * + * @param picPath + */ + private void uploadImg(String picPath, int src) { + File file = new File(picPath); + if (!file.exists()) { + showToast("图片路径错误."); + return; + } + ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "正在上传..."); + progressDialog.show(); + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile); + RetrofitManager.getInstance() + .create(BaseApiService.class) + .uploadImage(body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseSuccessBean baseUserBean) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.show("上传成功"); + mPhotoIds += (baseUserBean.getData() + ","); + mCurrentBean.setId(baseUserBean.getData()); + mCurrentBean.setPath(picPath); + if (mPhotos.size() < 4) { + mPhotos.add(new AddPhotoBean()); + } + mAddPhotoAdapter.notifyDataSetChanged(); + mCurrentBean = null; + } + + @Override + public void onError(Throwable e) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } +} \ No newline at end of file diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolDetailActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolDetailActivity.java new file mode 100644 index 0000000..0e371a9 --- /dev/null +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolDetailActivity.java @@ -0,0 +1,245 @@ +package com.tengshisoft.gridmodule.incident.activitys.patrols; + +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.Intent; +import android.text.Html; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; +import com.hjq.toast.ToastUtils; +import com.tengshisoft.commonmodule.beans.PatrolExpressDetailBean; +import com.tengshisoft.commonmodule.beans.SuccessBean; +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.core.retrofit_net.BaseUrlApi; +import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; +import com.tenlionsoft.baselib.core.widget.base.BaseShowPhotoAdapter; +import com.tenlionsoft.baselib.utils.ExceptionHandler; +import com.tenlionsoft.baselib.utils.UIUtil; +import com.tenlionsoft.baselib.utils.UserLgUtils; + +import java.util.ArrayList; + +import androidx.annotation.Nullable; +import androidx.core.widget.NestedScrollView; +import androidx.recyclerview.widget.GridLayoutManager; +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.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * 作者: Adam + * 日期: 2021年10月22日16:51:49 + * 邮箱: itgaojian@163.com + * 描述: 快递物流巡查记录详情 + */ +@Route(path = PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_DETAIL) +public class ExpressPatrolDetailActivity extends BaseActivity { + @BindView(R2.id.tv_time) + TextView mTvTime; + @BindView(R2.id.tv_content) + TextView mTvContent; + @BindView(R2.id.tv_result) + TextView mTvResult; + @BindView(R2.id.rlv_photos) + RecyclerView mRlvPhotos; + @BindView(R2.id.iv_play_video) + ImageView mIvPlayVideo; + @BindView(R2.id.ll_video) + LinearLayout mLlVideo; + @BindView(R2.id.iv_del_video) + ImageView mIvDelVideo; + @BindView(R2.id.tv_remark) + TextView mTvRemark; + @BindView(R2.id.nsv_content) + NestedScrollView mNsvContent; + @BindView(R2.id.tv_photo_hint) + TextView mTvPhotoHint; + @BindView(R2.id.tv_video_hint) + TextView mTvVideoHint; + @BindView(R2.id.btn_edit) + Button mBtnEdit; + @BindView(R2.id.btn_del) + Button mBtnDel; + private Unbinder mBind; + private String mId; + private String mPoiId; + private PatrolExpressDetailBean mDetailBean; + + + @Override + protected int setLayoutId() { + return R.layout.activity_express_patrol_detail; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mTvBaseTitle.setText("重点区域巡查记录详情"); + mId = getIntent().getStringExtra("id"); + mPoiId = getIntent().getStringExtra("poiId"); + mBtnDel.setOnClickListener(v -> doDel()); + mBtnEdit.setOnClickListener(v -> doEdit()); + getDetailData(); + } + + private void doEdit() { + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_EDIT) + .withString("id", mId) + .withString("poiId", mPoiId) + .navigation(mActivity, 12); + } + + private void doDel() { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle("提示") + .setMessage("确定要删除该条信息吗?") + .setPositiveButton("确定", (dialog, which) -> { + dialog.dismiss(); + ProgressDialog dialog1 = UIUtil.initDialog(mActivity, "删除中..."); + dialog1.show(); + RetrofitManager.getInstance() + .create(Apis.class) + .doDelExpressPatrol(mId, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull SuccessBean successBean) { + dialog1.dismiss(); + ToastUtils.show("删除成功"); + setResult(13); + finish(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog1.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + }) + .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()) + .create() + .show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 12) { + if (resultCode == 13) { + refreshView(STATE_LOAD_LOADING); + getDetailData(); + } + } + } + + /** + * 获取详情 + */ + private void getDetailData() { + RetrofitManager.getInstance() + .create(Apis.class) + .getExpressPatrolDetailById(mId, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull PatrolExpressDetailBean patrolKeyAreaDetailBean) { + mDetailBean = patrolKeyAreaDetailBean; + setDataToView(); + } + + @Override + public void onError(@NonNull Throwable e) { + refreshView(STATE_LOAD_ERROR); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 回显数据 + */ + private void setDataToView() { + refreshView(STATE_LOAD_SUCCESS); + mTvTime.setText(mDetailBean.getPatrolTime()); + mTvContent.setText(Html.fromHtml(mDetailBean.getPatrolContent())); + mTvResult.setText(Html.fromHtml(mDetailBean.getPatrolResult())); + mTvRemark.setText(Html.fromHtml(mDetailBean.getRemake())); + if (!TextUtils.isEmpty(mDetailBean.getPatrolPhoto())) { + mTvPhotoHint.setVisibility(View.GONE); + mRlvPhotos.setVisibility(View.VISIBLE); + String[] split = mDetailBean.getPatrolPhoto().split(","); + ArrayList paths = new ArrayList<>(); + for (int i = 0; i < split.length; i++) { + paths.add(BaseUrlApi.BASE_IMG_URL + split[i]); + } + BaseShowPhotoAdapter adapter = new BaseShowPhotoAdapter(mActivity, paths); + mRlvPhotos.setLayoutManager(new GridLayoutManager(mActivity, 4)); + mRlvPhotos.setAdapter(adapter); + adapter.setOnItemClickListener((data, pos) -> ARouter.getInstance() + .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG) + .withStringArrayList("imgUrls", paths) + .withInt("curItem", pos) + .navigation()); + } else { + mTvPhotoHint.setVisibility(View.VISIBLE); + mRlvPhotos.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(mDetailBean.getPatrolVideo())) { + //有视频 + mLlVideo.setVisibility(View.VISIBLE); + mTvVideoHint.setVisibility(View.GONE); + mIvPlayVideo.setBackgroundResource(R.drawable.ic_play_white_icon); + mLlVideo.setOnClickListener(v -> //播放视频 + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_PLAYER_SIMPLE_VIDEO) + .withString("url", BaseUrlApi.BASE_IMG_URL + mDetailBean.getPatrolVideo()) + .withString("title", "巡查视频") + .navigation()); + } else { + //没有视频 + mLlVideo.setVisibility(View.GONE); + mTvVideoHint.setVisibility(View.VISIBLE); + } + } +} \ No newline at end of file diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolEditActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolEditActivity.java new file mode 100644 index 0000000..1b7374d --- /dev/null +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolEditActivity.java @@ -0,0 +1,582 @@ +package com.tengshisoft.gridmodule.incident.activitys.patrols; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Environment; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; +import com.google.gson.Gson; +import com.hjq.toast.ToastUtils; +import com.tengshisoft.commonmodule.beans.PatrolExpressDetailBean; +import com.tengshisoft.commonmodule.beans.PatrolKeyAreaDetailBean; +import com.tengshisoft.commonmodule.beans.SavePatrolExpressBean; +import com.tengshisoft.commonmodule.beans.SavePatrolKeyAreaBean; +import com.tengshisoft.commonmodule.beans.SuccessBean; +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.core.beans.AddPhotoBean; +import com.tenlionsoft.baselib.core.beans.BaseSuccessBean; +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; +import com.tenlionsoft.baselib.core.widget.PhotoActivity; +import com.tenlionsoft.baselib.core.widget.base.AddPhotoAdapter; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; +import com.tenlionsoft.baselib.core.widget.views.ButtomDialogView; +import com.tenlionsoft.baselib.utils.ExceptionHandler; +import com.tenlionsoft.baselib.utils.UIUtil; +import com.tenlionsoft.baselib.utils.UserLgUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import androidx.core.widget.NestedScrollView; +import androidx.recyclerview.widget.GridLayoutManager; +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.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; + +/** + * 作者: Adam + * 日期: 2021年10月22日16:53:08 + * 邮箱: itgaojian@163.com + * 描述: 快递物流巡查记录修改 + */ +@Route(path = PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_EDIT) +public class ExpressPatrolEditActivity extends BaseActivity { + @BindView(R2.id.tv_issue_base_info) + TextView mTvIssueBaseInfo; + @BindView(R2.id.tv_time) + TextView mTvTime; + @BindView(R2.id.et_content) + EditText mEtContent; + @BindView(R2.id.et_result) + EditText mEtResult; + @BindView(R2.id.rlv_photos) + RecyclerView mRlvPhotos; + @BindView(R2.id.iv_play_video) + ImageView mIvPlayVideo; + @BindView(R2.id.ll_video) + LinearLayout mLlVideo; + @BindView(R2.id.iv_del_video) + ImageView mIvDelVideo; + @BindView(R2.id.et_remark) + EditText mEtRemark; + @BindView(R2.id.btn_submit) + Button mBtnSubmit; + @BindView(R2.id.nsv_content) + NestedScrollView mNsvContent; + private Unbinder mBind; + + private String mVideoPath;//视频文件路径 + private String mVideoId;//视频ID + private List mPhotos = new ArrayList<>(); + private AddPhotoAdapter mAddPhotoAdapter; + private AddPhotoBean mCurrentBean; + private String mPhotoIds = "";//相片Id + private String mPicPath; + private String mPoiId; + private String mId; + private PatrolExpressDetailBean mDetailBean; + + @Override + protected int setLayoutId() { + return R.layout.activity_express_patrol_edit; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mId = getIntent().getStringExtra("id"); + mPoiId = getIntent().getStringExtra("poiId"); + mTvBaseTitle.setText("快递物流巡查记录编辑"); + initViews(); + } + + /** + * 获取详情 + */ + private void getDetailData() { + RetrofitManager.getInstance() + .create(Apis.class) + .getExpressPatrolDetailById(mId, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull PatrolExpressDetailBean patrolKeyAreaDetailBean) { + mDetailBean = patrolKeyAreaDetailBean; + setDataToView(); + } + + @Override + public void onError(@NonNull Throwable e) { + refreshView(STATE_LOAD_ERROR); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 回显数据 + */ + private void setDataToView() { + refreshView(STATE_LOAD_SUCCESS); + mTvTime.setText(mDetailBean.getPatrolTime()); + mEtContent.setText(mDetailBean.getPatrolContent()); + mEtResult.setText(mDetailBean.getPatrolResult()); + mEtRemark.setText(mDetailBean.getRemake()); + //图片 + if (!TextUtils.isEmpty(mDetailBean.getPatrolPhoto())) { + mPhotos.clear(); + mPhotoIds = mDetailBean.getPatrolPhoto(); + String[] doorIds = mDetailBean.getPatrolPhoto().split(","); + for (int j = 0; j < doorIds.length; j++) { + if (!TextUtils.isEmpty(doorIds[j])) { + AddPhotoBean bean = new AddPhotoBean(); + bean.setId(doorIds[j]); + bean.setPath(BaseUrlApi.BASE_IMG_URL + doorIds[j]); + mPhotos.add(bean); + } + } + if (mPhotos.size() < 9) { + mPhotos.add(new AddPhotoBean()); + } + mAddPhotoAdapter.setData(mPhotos); + } + if (!TextUtils.isEmpty(mDetailBean.getPatrolVideo())) { + mIvDelVideo.setVisibility(View.VISIBLE); + mIvDelVideo.setOnClickListener(v -> { + mVideoPath = ""; + mVideoId = ""; + mIvPlayVideo.setBackgroundResource(R.drawable.picture_icon_video); + mIvDelVideo.setVisibility(View.GONE); + }); + mIvPlayVideo.setBackgroundResource(R.drawable.ic_play_white_icon); + mVideoPath = BaseUrlApi.BASE_IMG_URL + mDetailBean.getPatrolVideo(); + mVideoId = mDetailBean.getPatrolVideo(); + } + } + + private void initViews() { + mPhotos = new ArrayList<>(); + mPhotos.add(new AddPhotoBean()); + mAddPhotoAdapter = new AddPhotoAdapter(this, mPhotos); + mRlvPhotos.setLayoutManager(new GridLayoutManager(mActivity, 4)); + mRlvPhotos.setAdapter(mAddPhotoAdapter); + mAddPhotoAdapter.addOnDeleteListener(((bean, i) -> { + mAddPhotoAdapter.removeItem(bean); + mPhotoIds = mPhotoIds.replace(bean.getId() + ",", ""); + })); + mAddPhotoAdapter.addOnItemClickListener(bean -> { + if (TextUtils.isEmpty(bean.getPath())) { + //空数据 + showSelectPhoto(bean); + } else { + //预览 + ArrayList list = new ArrayList<>(); + list.add(bean.getPath()); + Intent intent = new Intent(); + intent.putExtra(PhotoActivity.TAG_IMGURL, list); + intent.setClass(mActivity, PhotoActivity.class); + startActivity(intent); + } + }); + + mIvDelVideo.setVisibility(View.GONE); + mIvDelVideo.setOnClickListener(v -> { + mVideoPath = ""; + mVideoId = ""; + mIvPlayVideo.setBackgroundResource(R.drawable.picture_icon_video); + mIvDelVideo.setVisibility(View.GONE); + }); + mIvPlayVideo.setBackgroundResource(R.drawable.picture_icon_video); + mIvPlayVideo.setOnClickListener(v -> { + if (TextUtils.isEmpty(mVideoPath)) { + //选取视频 + showSelectVideo(); + } else { + //播放视频 + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_PLAYER_SIMPLE_VIDEO) + .withString("url", mVideoPath) + .withString("title", "巡查视频") + .navigation(); + } + }); + mBtnSubmit.setOnClickListener(v -> doSubmit()); + getDetailData(); + } + + private void doSubmit() { + if (checkParams()) { + RequestBody body = buildParams(); + ProgressDialog dialog = UIUtil.initDialog(mActivity, "提交中..."); + dialog.show(); + RetrofitManager.getInstance() + .create(Apis.class) + .doEditExpressPatrol(mId, body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull SuccessBean successBean) { + dialog.dismiss(); + ToastUtils.show("修改成功"); + setResult(13); + finish(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + } + + private boolean checkParams() { + String time = mTvTime.getText().toString().trim(); + if (TextUtils.isEmpty(time)) { + ToastUtils.show("请输入巡查时间"); + return false; + } + String content = mEtContent.getText().toString().trim(); + if (TextUtils.isEmpty(content)) { + ToastUtils.show("请输入巡查内容"); + return false; + } + String result = mEtResult.getText().toString().trim(); + if (TextUtils.isEmpty(result)) { + ToastUtils.show("请输入巡查结果"); + return false; + } + + return true; + } + + private RequestBody buildParams() { + SavePatrolExpressBean bean = new SavePatrolExpressBean(); + bean.setLogisticsSafeId(mPoiId); + String time = mTvTime.getText().toString().trim(); + bean.setPatrolTime(time); + String content = mEtContent.getText().toString().trim(); + String result = mEtResult.getText().toString().trim(); + bean.setPatrolContent(content); + bean.setPatrolResult(result); + if (!TextUtils.isEmpty(mPhotoIds)) { + bean.setPatrolPhoto(mPhotoIds); + } + if (!TextUtils.isEmpty(mVideoId)) { + bean.setPatrolVideo(mVideoId); + } + String remark = mEtRemark.getText().toString().trim(); + if (!TextUtils.isEmpty(remark)) { + bean.setRemake(remark); + } + Gson gson = new Gson(); + String obj = gson.toJson(bean); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), obj); + return requestBody; + } + + /** + * 显示选择图片 + * + * @param bean + */ + private void showSelectPhoto(AddPhotoBean bean) { + ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity) + .setIsBackCancelable(true) + .setIscancelable(true) + .setShowLocation(Gravity.BOTTOM) + .setIsShowFile(false) + .build(); + buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() { + @Override + public void choseFile() { + } + + @Override + public void choseAlbum() { + mCurrentBean = bean; + Intent intent = new Intent(Intent.ACTION_PICK, null); + intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + "image/*"); + startActivityForResult(intent, BaseUrlApi.PHOTO_REQUEST); + buttomDialogView.dismiss(); + } + + @Override + public void choseShoot() { + mCurrentBean = bean; + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_BASELIB_TAKE_PHOTO) + .withString("path", getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getPath()) + .withString("type", "photo") + .navigation(mActivity, BaseUrlApi.CAMERA_REQUEST); + buttomDialogView.dismiss(); + } + + @Override + public void loginOut() { + + } + + @Override + public void changePwd() { + + } + }); + buttomDialogView.show(); + } + + /** + * 显示选择视频 + */ + private void showSelectVideo() { + ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity) + .setIsBackCancelable(true) + .setIscancelable(true) + .setShowLocation(Gravity.BOTTOM) + .setIsShowFile(false) + .build(); + buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() { + @Override + public void choseFile() { + } + + @Override + public void choseAlbum() { + Intent intent = new Intent(Intent.ACTION_PICK, null); + intent.setDataAndType(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, + "video/*"); + startActivityForResult(intent, BaseUrlApi.CAMERA_REQUEST_PHOTO); + buttomDialogView.dismiss(); + } + + @Override + public void choseShoot() { + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_BASELIB_TAKE_PHOTO) + .withString("path", getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getPath()) + .withString("type", "video") + .navigation(mActivity, BaseUrlApi.CAMERA_REQUEST_VIDEO); + buttomDialogView.dismiss(); + } + + @Override + public void loginOut() { + + } + + @Override + public void changePwd() { + + } + }); + buttomDialogView.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK) { + switch (requestCode) { + case BaseUrlApi.CAMERA_REQUEST://相机 + mPicPath = data.getStringExtra("name"); + uploadImg(mPicPath, 1); + break; + case BaseUrlApi.PHOTO_REQUEST://相册 + try { + if (data == null) return; + Uri uri = data.getData(); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String srcPath = cursor.getString(column_index); + uploadImg(srcPath, 2); + } catch (Exception e) { + e.printStackTrace(); + } + break; + case BaseUrlApi.CAMERA_REQUEST_VIDEO://相机录像 + mVideoPath = data.getStringExtra("name"); + uploadVideo(mVideoPath); + break; + case BaseUrlApi.CAMERA_REQUEST_PHOTO://相册 + try { + if (data == null) return; + Uri uri = data.getData(); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String srcPath = cursor.getString(column_index); + uploadVideo(srcPath); + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * 上传视频 + * + * @param videoPath + */ + private void uploadVideo(String videoPath) { + ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "视频上传中..."); + progressDialog.show(); + File file = new File(videoPath); + if (file.exists()) { + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("video", file.getName(), requestFile); + RetrofitManager.getInstance() + .create(BaseApiService.class) + .uploadVideo(body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseSuccessBean baseUserBean) { + if (progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.show("上传成功"); + mVideoPath = videoPath; + mVideoId = baseUserBean.getData(); + mIvDelVideo.setVisibility(View.VISIBLE); + mIvPlayVideo.setBackgroundResource(R.drawable.ic_play_white_icon); + } + + @Override + public void onError(Throwable e) { + if (progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ExceptionHandler.handleException(e); + + } + + @Override + public void onComplete() { + + } + }); + } else { + progressDialog.dismiss(); + ToastUtils.show("视频文件路径有误."); + } + } + + /** + * 上传文件 + * + * @param picPath + */ + private void uploadImg(String picPath, int src) { + File file = new File(picPath); + if (!file.exists()) { + showToast("图片路径错误."); + return; + } + ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "正在上传..."); + progressDialog.show(); + RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); + MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile); + RetrofitManager.getInstance() + .create(BaseApiService.class) + .uploadImage(body, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseSuccessBean baseUserBean) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ToastUtils.show("上传成功"); + mPhotoIds += (baseUserBean.getData() + ","); + mCurrentBean.setId(baseUserBean.getData()); + mCurrentBean.setPath(picPath); + if (mPhotos.size() < 4) { + mPhotos.add(new AddPhotoBean()); + } + mAddPhotoAdapter.notifyDataSetChanged(); + mCurrentBean = null; + } + + @Override + public void onError(Throwable e) { + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } +} \ No newline at end of file diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolListActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolListActivity.java new file mode 100644 index 0000000..56dca6c --- /dev/null +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/patrols/ExpressPatrolListActivity.java @@ -0,0 +1,353 @@ +package com.tengshisoft.gridmodule.incident.activitys.patrols; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; +import com.hjq.toast.ToastUtils; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.tengshisoft.commonmodule.adapters.PatrolExpressListAdapter; +import com.tengshisoft.commonmodule.beans.ExpressDetailBean; +import com.tengshisoft.commonmodule.beans.PatrolExpressListBean; +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.core.retrofit_net.RetrofitManager; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; +import com.tenlionsoft.baselib.utils.ExceptionHandler; +import com.tenlionsoft.baselib.utils.UserLgUtils; + +import java.util.ArrayList; +import java.util.List; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.SwitchCompat; +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.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * 作者: Adam + * 日期: 2021年10月22日16:32:15 + * 邮箱: itgaojian@163.com + * 描述: 物流快递点巡查 + */ +@Route(path = PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_LIST) +public class ExpressPatrolListActivity extends BaseActivity { + + + @BindView(R2.id.et_base_search_content) + EditText mEtBaseSearchContent; + @BindView(R2.id.iv_base_clear) + ImageView mIvBaseClear; + @BindView(R2.id.btn_base_search) + Button mBtnBaseSearch; + @BindView(R2.id.ll_base_search_content) + LinearLayout mLlBaseSearchContent; + @BindView(R2.id.tv_name) + TextView mTvName; + @BindView(R2.id.tv_area) + TextView mTvArea; + @BindView(R2.id.tv_address) + TextView mTvAddress; + @BindView(R2.id.tv_phone) + TextView mTvPhone; + @BindView(R2.id.tv_link) + TextView mTvLink; + @BindView(R2.id.tv_link_phone) + TextView mTvLinkPhone; + @BindView(R2.id.sw_is_seal) + SwitchCompat mSwIsSeal; + @BindView(R2.id.sw_is_real) + SwitchCompat mSwIsReal; + @BindView(R2.id.sw_is_security) + SwitchCompat mSwIsSecurity; + @BindView(R2.id.rlv_buildings) + RecyclerView mRlvBuildings; + @BindView(R2.id.pb_loading) + ProgressBar mPbLoading; + @BindView(R2.id.iv_empty_data) + ImageView mIvEmptyData; + @BindView(R2.id.tv_error_hint) + TextView mTvErrorHint; + @BindView(R2.id.srl_content) + SmartRefreshLayout mSrlContent; + private Unbinder mBind; + private String mId; + private int mCurrentPage = 1;//当前页数 + private List mDatas = new ArrayList<>(); + private PatrolExpressListAdapter mAdapter; + private String mKeywords = ""; + + private ExpressDetailBean mDetailBean; + + @Override + protected int setLayoutId() { + return R.layout.activity_express_patrol_list; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mId = getIntent().getStringExtra("id"); + mTvBaseTitle.setText("巡查记录"); + mTvPublish.setVisibility(View.VISIBLE); + mTvPublish.setText("巡查"); + mTvPublish.setOnClickListener(v -> ARouter.getInstance() + .build(PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_ADD) + .withString("poiId", mId) + .navigation(mActivity, 12)); + mAdapter = new PatrolExpressListAdapter(mActivity, mDatas); + mSrlContent.setOnLoadMoreListener(refreshLayout -> loadMore()); + mSrlContent.setOnRefreshListener(refreshLayout -> doRefresh()); + mRlvBuildings.setLayoutManager(new LinearLayoutManager(mActivity)); + mRlvBuildings.setAdapter(mAdapter); + mAdapter.addOnItemClickListener(this::showDetail); + refreshView(STATE_LOAD_SUCCESS); + setStateView(13); + getPatrolList(1); + mBtnBaseSearch.setOnClickListener(v -> doSearch()); + mIvBaseClear.setOnClickListener(v -> { + mKeywords = ""; + mEtBaseSearchContent.setText(""); + doRefresh(); + }); + getDetailById(); + } + + /** + * 获取详情 + */ + private void getDetailById() { + RetrofitManager.getInstance() + .create(Apis.class) + .getExpressDetailById(mId, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull ExpressDetailBean expressDetailBean) { + mDetailBean = expressDetailBean; + setDataToView(); + } + + @Override + public void onError(@NonNull Throwable e) { + refreshView(STATE_LOAD_ERROR); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 回显数据 + */ + private void setDataToView() { + refreshView(STATE_LOAD_SUCCESS); + mTvName.setText(mDetailBean.getLogisticsEnterpriseName()); + mTvArea.setText(mDetailBean.getEnterpriseLocationName()); + mTvAddress.setText(mDetailBean.getEnterpriseAddress()); + mTvPhone.setText(mDetailBean.getEnterprisePhone()); + mTvLink.setText(mDetailBean.getEnterpriseLinkMan()); + mTvLinkPhone.setText(mDetailBean.getEnterpriseLinkPhone()); + mSwIsReal.setChecked(mDetailBean.getIsRealName() == 1); + mSwIsSeal.setChecked(mDetailBean.getIsSealing() == 1); + mSwIsSecurity.setChecked(mDetailBean.getIsXCheck() == 1); + } + + /** + * 显示详情 + */ + private void showDetail(PatrolExpressListBean.RowsBean b) { + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_DETAIL) + .withString("id", b.getLogisticsSafePatrolId()) + .withString("poiId", b.getLogisticsSafeId()) + .navigation(mActivity, 12); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 12) { + if (resultCode == 13) { + doRefresh(); + } + } + } + + /** + * 获取列表 + * + * @param currentPage + */ + private void getPatrolList(int currentPage) { + mCurrentPage = currentPage; + RetrofitManager.getInstance() + .create(Apis.class) + .getExpressPatrolList(mId, mKeywords, mCurrentPage + "", UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull PatrolExpressListBean communityListBean) { + if (communityListBean != null && communityListBean.getRows() != null && communityListBean.getRows().size() > 0) { + ++mCurrentPage; + if (currentPage == 1) { + mDatas.clear(); + mDatas.addAll(communityListBean.getRows()); + } else { + mDatas.addAll(communityListBean.getRows()); + } + setStateView(14); + mAdapter.notifyDataSetChanged(); + mSrlContent.finishRefresh(); + if (mDatas.size() >= communityListBean.getTotal()) { + mSrlContent.finishLoadMore(); + mSrlContent.setNoMoreData(true); + } else { + mSrlContent.finishLoadMore(); + mSrlContent.setNoMoreData(false); + } + } else { + mSrlContent.setNoMoreData(true); + mSrlContent.finishLoadMore(); + if (currentPage > 1) { + setStateView(14); + } else { + if (TextUtils.isEmpty(mKeywords)) { + //无数据 + setStateView(15); + } else { + setStateView(15); + ToastUtils.show("未查询到相关内容"); + } + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + mSrlContent.finishLoadMore(); + mSrlContent.finishRefresh(); + ExceptionHandler.handleException(e); + setStateView(16); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * + */ + private void doSearch() { + hideSoftKeyboard(); + String searchContent = mEtBaseSearchContent.getText().toString().trim(); + if (!TextUtils.isEmpty(searchContent)) { + hideSoftKeyboard(); + setStateView(13); + mKeywords = searchContent; + mCurrentPage = 1; + getPatrolList(mCurrentPage); + + } else { + ToastUtils.show("请输入要查询的内容"); + } + } + + //加载更多 + private void loadMore() { + getPatrolList(mCurrentPage); + } + + //刷新 + private void doRefresh() { + mDatas.clear(); + mAdapter.setData(mDatas); + getPatrolList(1); + } + + /** + * 根据状态显示 + * 12 默认 + * 13 搜索中 + * 14 搜索完成有数据 + * 15 搜索完成没有数据 + * 16 搜索失败 + * + * @param state + */ + private void setStateView(int state) { + switch (state) { + case 12://默认 + mPbLoading.setVisibility(View.GONE); + mRlvBuildings.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.VISIBLE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("请输入查询的内容"); + break; + case 13://搜索中 + mPbLoading.setVisibility(View.VISIBLE); + mRlvBuildings.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.GONE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("加载中..."); + break; + case 14://搜索完成有数据 + mPbLoading.setVisibility(View.GONE); + mRlvBuildings.setVisibility(View.VISIBLE); + mIvEmptyData.setVisibility(View.GONE); + mTvErrorHint.setVisibility(View.GONE); + break; + case 15://搜索完成没有数据 + mPbLoading.setVisibility(View.GONE); + mRlvBuildings.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.VISIBLE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("没有搜索到数据"); + break; + case 16://搜索失败 + mPbLoading.setVisibility(View.GONE); + mRlvBuildings.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.VISIBLE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("加载失败,请稍后重试"); + break; + } + } +} \ No newline at end of file diff --git a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/security/ExpressPoiListActivity.java b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/security/ExpressPoiListActivity.java index 5cd33de..223ace7 100644 --- a/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/security/ExpressPoiListActivity.java +++ b/gridmodule/src/main/java/com/tengshisoft/gridmodule/incident/activitys/security/ExpressPoiListActivity.java @@ -94,6 +94,7 @@ public class ExpressPoiListActivity extends BaseActivity { mRlvBuildings.setLayoutManager(new LinearLayoutManager(mActivity)); mRlvBuildings.setAdapter(mAdapter); mAdapter.addOnItemClickListener(this::showDetail); + mAdapter.addOnPatrolListener(this::doPatrol); refreshView(STATE_LOAD_SUCCESS); setStateView(13); getExpressList(1); @@ -105,6 +106,16 @@ public class ExpressPoiListActivity extends BaseActivity { }); } + /** + * 巡查记录 + */ + private void doPatrol(ExpressListBean.RowsBean rowsBean) { + ARouter.getInstance() + .build(PathConfig.PATH_MODULE_GRID_ACTIVITY_PATROL_EXPRESS_LIST) + .withString("id", rowsBean.getLogisticsSafeId()) + .navigation(); + } + /** * 显示详情 */ diff --git a/gridmodule/src/main/res/layout/activity_express_patrol_add.xml b/gridmodule/src/main/res/layout/activity_express_patrol_add.xml new file mode 100644 index 0000000..5743a28 --- /dev/null +++ b/gridmodule/src/main/res/layout/activity_express_patrol_add.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +