diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 8a54be3..6c7a6fa 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -25,4 +25,12 @@ } return audioFile; } + + public static String getImageCompressPath() { + File dir = new File(Environment.getExternalStorageDirectory(), "CompressFile"); + if (!dir.exists()) { + dir.mkdir(); + } + return dir.toString(); + } } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 8a54be3..6c7a6fa 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -25,4 +25,12 @@ } return audioFile; } + + public static String getImageCompressPath() { + File dir = new File(Environment.getExternalStorageDirectory(), "CompressFile"); + if (!dir.exists()) { + dir.mkdir(); + } + return dir.toString(); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 71513c7..31c3b6f 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -15,16 +15,19 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; -import retrofit2.http.Body; +import okhttp3.MultipartBody; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; +import retrofit2.http.Multipart; import retrofit2.http.POST; +import retrofit2.http.Part; import retrofit2.http.Path; import retrofit2.http.Query; import rx.Observable; @@ -71,9 +74,27 @@ /** * 提交案卷 */ + @FormUrlEncoded @POST("/case/add") - Observable submit(@Header("token") String token, - @Body SubmitInfoBean infoBean); + Observable submitCase(@Header("token") String token, + @Field("isNeedVerify") String isNeedVerify, + @Field("isNeedRevisit") String isNeedRevisit, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("source") String source, + @Field("caseLevel") String caseLevel, + @Field("eorc") String eorc, + @Field("casetypeCode") String casetypeCode, + @Field("casetypeDetailCode") String casetypeDetailCode, + @Field("areaCode") String areaCode, + @Field("streetCode") String streetCode, + @Field("communityCode") String communityCode, + @Field("gridId") String gridId, + @Field("description") String description, + @Field("fieldintro") String fieldintro, + @Field("fileIdVerify") String fileIdVerify, + @Field("bzhours") int bzhours, + @Field("bzminis") int bzminis); /** * 退出登录 @@ -183,4 +204,26 @@ Observable obtainCaseHandled(@Header("token") String token, @Query("limit") int limit, @Query("offset") int offset); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadImage(@Header("token") String token, + @Part MultipartBody.Part file); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadAudio(@Header("token") String token, + @Part MultipartBody.Part file); } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 8a54be3..6c7a6fa 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -25,4 +25,12 @@ } return audioFile; } + + public static String getImageCompressPath() { + File dir = new File(Environment.getExternalStorageDirectory(), "CompressFile"); + if (!dir.exists()) { + dir.mkdir(); + } + return dir.toString(); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 71513c7..31c3b6f 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -15,16 +15,19 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; -import retrofit2.http.Body; +import okhttp3.MultipartBody; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; +import retrofit2.http.Multipart; import retrofit2.http.POST; +import retrofit2.http.Part; import retrofit2.http.Path; import retrofit2.http.Query; import rx.Observable; @@ -71,9 +74,27 @@ /** * 提交案卷 */ + @FormUrlEncoded @POST("/case/add") - Observable submit(@Header("token") String token, - @Body SubmitInfoBean infoBean); + Observable submitCase(@Header("token") String token, + @Field("isNeedVerify") String isNeedVerify, + @Field("isNeedRevisit") String isNeedRevisit, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("source") String source, + @Field("caseLevel") String caseLevel, + @Field("eorc") String eorc, + @Field("casetypeCode") String casetypeCode, + @Field("casetypeDetailCode") String casetypeDetailCode, + @Field("areaCode") String areaCode, + @Field("streetCode") String streetCode, + @Field("communityCode") String communityCode, + @Field("gridId") String gridId, + @Field("description") String description, + @Field("fieldintro") String fieldintro, + @Field("fileIdVerify") String fileIdVerify, + @Field("bzhours") int bzhours, + @Field("bzminis") int bzminis); /** * 退出登录 @@ -183,4 +204,26 @@ Observable obtainCaseHandled(@Header("token") String token, @Query("limit") int limit, @Query("offset") int offset); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadImage(@Header("token") String token, + @Part MultipartBody.Part file); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadAudio(@Header("token") String token, + @Part MultipartBody.Part file); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 5cfde94..7db4182 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -17,8 +17,9 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; @@ -27,9 +28,13 @@ import org.jetbrains.annotations.NotNull; +import java.io.File; import java.util.concurrent.TimeUnit; +import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.OkHttpClient; +import okhttp3.RequestBody; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; @@ -113,10 +118,20 @@ /** * 提交案卷 */ - public static Observable submitCase(SubmitInfoBean infoBean) { + public static Observable getSubmitCaseResult(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.submit(TokenHelper.getToken(), infoBean); + return service.submitCase(TokenHelper.getToken(), isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, communityCode, + gridId, description, fieldintro, fileIdVerify, bzhours, bzminis); } /** @@ -238,4 +253,29 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainCaseHandled(TokenHelper.getToken(), limit, offset); } + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + public static Observable getImageUploadResult(File image) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); + return service.uploadImage(TokenHelper.getToken(), imagePart); + } + + /** + * 上传案卷音频 + */ + public static Observable getAudioUploadResult(File audio) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), audio); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", audio.getName(), requestBody); + return service.uploadAudio(TokenHelper.getToken(), imagePart); + } } diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 8a54be3..6c7a6fa 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -25,4 +25,12 @@ } return audioFile; } + + public static String getImageCompressPath() { + File dir = new File(Environment.getExternalStorageDirectory(), "CompressFile"); + if (!dir.exists()) { + dir.mkdir(); + } + return dir.toString(); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 71513c7..31c3b6f 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -15,16 +15,19 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; -import retrofit2.http.Body; +import okhttp3.MultipartBody; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; +import retrofit2.http.Multipart; import retrofit2.http.POST; +import retrofit2.http.Part; import retrofit2.http.Path; import retrofit2.http.Query; import rx.Observable; @@ -71,9 +74,27 @@ /** * 提交案卷 */ + @FormUrlEncoded @POST("/case/add") - Observable submit(@Header("token") String token, - @Body SubmitInfoBean infoBean); + Observable submitCase(@Header("token") String token, + @Field("isNeedVerify") String isNeedVerify, + @Field("isNeedRevisit") String isNeedRevisit, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("source") String source, + @Field("caseLevel") String caseLevel, + @Field("eorc") String eorc, + @Field("casetypeCode") String casetypeCode, + @Field("casetypeDetailCode") String casetypeDetailCode, + @Field("areaCode") String areaCode, + @Field("streetCode") String streetCode, + @Field("communityCode") String communityCode, + @Field("gridId") String gridId, + @Field("description") String description, + @Field("fieldintro") String fieldintro, + @Field("fileIdVerify") String fileIdVerify, + @Field("bzhours") int bzhours, + @Field("bzminis") int bzminis); /** * 退出登录 @@ -183,4 +204,26 @@ Observable obtainCaseHandled(@Header("token") String token, @Query("limit") int limit, @Query("offset") int offset); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadImage(@Header("token") String token, + @Part MultipartBody.Part file); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadAudio(@Header("token") String token, + @Part MultipartBody.Part file); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 5cfde94..7db4182 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -17,8 +17,9 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; @@ -27,9 +28,13 @@ import org.jetbrains.annotations.NotNull; +import java.io.File; import java.util.concurrent.TimeUnit; +import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.OkHttpClient; +import okhttp3.RequestBody; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; @@ -113,10 +118,20 @@ /** * 提交案卷 */ - public static Observable submitCase(SubmitInfoBean infoBean) { + public static Observable getSubmitCaseResult(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.submit(TokenHelper.getToken(), infoBean); + return service.submitCase(TokenHelper.getToken(), isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, communityCode, + gridId, description, fieldintro, fileIdVerify, bzhours, bzminis); } /** @@ -238,4 +253,29 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainCaseHandled(TokenHelper.getToken(), limit, offset); } + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + public static Observable getImageUploadResult(File image) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); + return service.uploadImage(TokenHelper.getToken(), imagePart); + } + + /** + * 上传案卷音频 + */ + public static Observable getAudioUploadResult(File audio) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), audio); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", audio.getName(), requestBody); + return service.uploadAudio(TokenHelper.getToken(), imagePart); + } } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index a9ff51c..3f932ff 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -6,19 +6,39 @@ android:background="@color/white" android:orientation="vertical"> - + android:background="@color/mainThemeColor"> + + + + + + android:layout_height="wrap_content" + android:scrollbars="vertical"> - - - - - - - - - @@ -196,6 +193,29 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:drawableEnd="@mipmap/point" + android:text="社区" + android:textSize="@dimen/textFontSize" /> + + + + + + + + + @@ -227,6 +247,7 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" + android:layout_toStartOf="@id/audioUploadView" android:background="@drawable/bg_layout"> + + @@ -261,54 +290,53 @@ android:text="案卷图片\n/视频" android:textSize="@dimen/textFontSize" /> - - - + android:layout_toStartOf="@id/imageUploadView" + android:orientation="horizontal"> - - + - + + - + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:background="@drawable/ic_update" /> + + diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 8a54be3..6c7a6fa 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -25,4 +25,12 @@ } return audioFile; } + + public static String getImageCompressPath() { + File dir = new File(Environment.getExternalStorageDirectory(), "CompressFile"); + if (!dir.exists()) { + dir.mkdir(); + } + return dir.toString(); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 71513c7..31c3b6f 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -15,16 +15,19 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; -import retrofit2.http.Body; +import okhttp3.MultipartBody; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; +import retrofit2.http.Multipart; import retrofit2.http.POST; +import retrofit2.http.Part; import retrofit2.http.Path; import retrofit2.http.Query; import rx.Observable; @@ -71,9 +74,27 @@ /** * 提交案卷 */ + @FormUrlEncoded @POST("/case/add") - Observable submit(@Header("token") String token, - @Body SubmitInfoBean infoBean); + Observable submitCase(@Header("token") String token, + @Field("isNeedVerify") String isNeedVerify, + @Field("isNeedRevisit") String isNeedRevisit, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("source") String source, + @Field("caseLevel") String caseLevel, + @Field("eorc") String eorc, + @Field("casetypeCode") String casetypeCode, + @Field("casetypeDetailCode") String casetypeDetailCode, + @Field("areaCode") String areaCode, + @Field("streetCode") String streetCode, + @Field("communityCode") String communityCode, + @Field("gridId") String gridId, + @Field("description") String description, + @Field("fieldintro") String fieldintro, + @Field("fileIdVerify") String fileIdVerify, + @Field("bzhours") int bzhours, + @Field("bzminis") int bzminis); /** * 退出登录 @@ -183,4 +204,26 @@ Observable obtainCaseHandled(@Header("token") String token, @Query("limit") int limit, @Query("offset") int offset); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadImage(@Header("token") String token, + @Part MultipartBody.Part file); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadAudio(@Header("token") String token, + @Part MultipartBody.Part file); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 5cfde94..7db4182 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -17,8 +17,9 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; @@ -27,9 +28,13 @@ import org.jetbrains.annotations.NotNull; +import java.io.File; import java.util.concurrent.TimeUnit; +import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.OkHttpClient; +import okhttp3.RequestBody; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; @@ -113,10 +118,20 @@ /** * 提交案卷 */ - public static Observable submitCase(SubmitInfoBean infoBean) { + public static Observable getSubmitCaseResult(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.submit(TokenHelper.getToken(), infoBean); + return service.submitCase(TokenHelper.getToken(), isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, communityCode, + gridId, description, fieldintro, fileIdVerify, bzhours, bzminis); } /** @@ -238,4 +253,29 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainCaseHandled(TokenHelper.getToken(), limit, offset); } + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + public static Observable getImageUploadResult(File image) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); + return service.uploadImage(TokenHelper.getToken(), imagePart); + } + + /** + * 上传案卷音频 + */ + public static Observable getAudioUploadResult(File audio) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), audio); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", audio.getName(), requestBody); + return service.uploadAudio(TokenHelper.getToken(), imagePart); + } } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index a9ff51c..3f932ff 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -6,19 +6,39 @@ android:background="@color/white" android:orientation="vertical"> - + android:background="@color/mainThemeColor"> + + + + + + android:layout_height="wrap_content" + android:scrollbars="vertical"> - - - - - - - - - @@ -196,6 +193,29 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:drawableEnd="@mipmap/point" + android:text="社区" + android:textSize="@dimen/textFontSize" /> + + + + + + + + + @@ -227,6 +247,7 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" + android:layout_toStartOf="@id/audioUploadView" android:background="@drawable/bg_layout"> + + @@ -261,54 +290,53 @@ android:text="案卷图片\n/视频" android:textSize="@dimen/textFontSize" /> - - - + android:layout_toStartOf="@id/imageUploadView" + android:orientation="horizontal"> - - + - + + - + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:background="@drawable/ic_update" /> + + diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml new file mode 100644 index 0000000..a799254 --- /dev/null +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 16111ef..33265ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,10 +70,6 @@ implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' //官方Json解析库 implementation 'com.google.code.gson:gson:2.8.6' - //图片选择框架 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' - //视频播放器 - implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //全球可用地图MapBox implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' @@ -94,4 +90,8 @@ implementation 'com.gyf.immersionbar:immersionbar:3.0.0' //fragment快速实现 implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0' + //图片选择框架 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //视频播放器 + implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 490d1ee..7e7f351 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + mediaList; + private List mediaList = new ArrayList<>(); private LayoutInflater inflater; - public ImageGridViewAdapter(Context mContext, List selectList) { + public ImageGridViewAdapter(Context mContext) { this.context = mContext; - this.mediaList = selectList; inflater = LayoutInflater.from(context); } + public void setMediaList(List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + @Override public int getCount() { return mediaList == null ? 0 : mediaList.size(); diff --git a/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java new file mode 100644 index 0000000..480ffcc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/ImageRecycleViewAdapter.java @@ -0,0 +1,110 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.utils.Constant; +import com.luck.picture.lib.entity.LocalMedia; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Pengxh + * @Time: 2021/4/7 17:17 + * @Email: 290677893@qq.com + **/ +public class ImageRecycleViewAdapter extends RecyclerView.Adapter { + + private Context context; + private List mediaList = new ArrayList<>(); + + public ImageRecycleViewAdapter(Context mContext) { + this.context = mContext; + } + + public void setMediaList(@Nullable List selectList) { + mediaList.clear(); + if (selectList != null) { + mediaList.addAll(selectList); + } + notifyDataSetChanged(); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_select_gridview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public int getItemCount() { + return Math.min(mediaList.size(), 3); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); + holder.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + private ImageView imageView; + private ImageView deleteView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + deleteView = itemView.findViewById(R.id.deleteView); + } + } + + private OnDeleteItemClickListener clickListener; + + public interface OnDeleteItemClickListener { + void onClick(int position); + } + + public void setOnDeleteClickListener(OnDeleteItemClickListener deleteItemClickListener) { + this.clickListener = deleteItemClickListener; + } + + private OnItemClickListener itemClickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java deleted file mode 100644 index f23402b..0000000 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.casic.dcms.bean; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 14:58 - * @Email: 290677893@qq.com - **/ -public class SubmitInfoBean { - /** - * @param isNeedVerify 是否需要核实,0-不需要,1-需要 - * @param isNeedRevisit 是否需要回访 ,0-不需要,1-需要 - * @param longitude 经度 - * @param latitude 纬度 - * @param source 案卷来源(字典值),案卷上报or快速上报,1-案卷上报,2-快速上报 - * @param caseLevel 案卷等级(字典值) - * @param eorc 案卷类别(字典值),事件or部件,1-事件,2-部件 - * @param casetypeCode 案卷大类编码 - * @param casetypeDetailCode 案卷小类编码 - * @param areaCode 所属区县ID,对应AREA表的主键id - * @param streetCode 所属街道ID,对应AREA表的主键id - * @param communityCode 所属社区ID(预留字段,暂不维护) - * @param gridId 万米网格ID,后期地图接入后维护 - * @param description 案件描述 - * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径(非必填) - * @param bzhours 限制完成总时限(小时)(非必填) - * @param bzminis 限制完成总时限(分)(非必填) - */ - private String isNeedVerify; - private String isNeedRevisit; - private String longitude; - private String latitude; - private String source; - private String caseLevel; - private String eorc; - private String casetypeCode; - private String casetypeDetailCode; - private String areaCode; - private String streetCode; - private String communityCode; - private String gridId; - private String description; - private String fieldintro; - private String fileIdVerify; - private String bzhours; - private String bzminis; - - public String getIsNeedVerify() { - return isNeedVerify; - } - - public void setIsNeedVerify(String isNeedVerify) { - this.isNeedVerify = isNeedVerify; - } - - public String getIsNeedRevisit() { - return isNeedRevisit; - } - - public void setIsNeedRevisit(String isNeedRevisit) { - this.isNeedRevisit = isNeedRevisit; - } - - public String getLongitude() { - return longitude; - } - - public void setLongitude(String longitude) { - this.longitude = longitude; - } - - public String getLatitude() { - return latitude; - } - - public void setLatitude(String latitude) { - this.latitude = latitude; - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - - public String getCaseLevel() { - return caseLevel; - } - - public void setCaseLevel(String caseLevel) { - this.caseLevel = caseLevel; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getAreaCode() { - return areaCode; - } - - public void setAreaCode(String areaCode) { - this.areaCode = areaCode; - } - - public String getStreetCode() { - return streetCode; - } - - public void setStreetCode(String streetCode) { - this.streetCode = streetCode; - } - - public String getCommunityCode() { - return communityCode; - } - - public void setCommunityCode(String communityCode) { - this.communityCode = communityCode; - } - - public String getGridId() { - return gridId; - } - - public void setGridId(String gridId) { - this.gridId = gridId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getBzhours() { - return bzhours; - } - - public void setBzhours(String bzhours) { - this.bzhours = bzhours; - } - - public String getBzminis() { - return bzminis; - } - - public void setBzminis(String bzminis) { - this.bzminis = bzminis; - } -} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java index d55a129..1428e36 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitResultBean.java @@ -8,16 +8,14 @@ public class SubmitResultBean { /** - * code : 500 + * code : 200 * data : - * exceptionClazz : - * message : 服务器异常 - * success : false + * message : 请求成功 + * success : true */ private int code; private String data; - private String exceptionClazz; private String message; private boolean success; @@ -37,14 +35,6 @@ this.data = data; } - public String getExceptionClazz() { - return exceptionClazz; - } - - public void setExceptionClazz(String exceptionClazz) { - this.exceptionClazz = exceptionClazz; - } - public String getMessage() { return message; } diff --git a/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java new file mode 100644 index 0000000..8b2e11e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadAudioResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadAudioResultBean { + + /** + * code : 200.0 + * data : 2021-04\eaed5a1c6bdb40b99dff47aacb794c6e.m4a + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java new file mode 100644 index 0000000..ec37400 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/UploadImageResultBean.java @@ -0,0 +1,48 @@ +package com.casic.dcms.bean; + +public class UploadImageResultBean { + + /** + * code : 200.0 + * data : 2021-04\000bcf78345f4c1c86484efa3f9d68a2.jpeg + * message : 请求成功 + * success : true + */ + + private double code; + private String data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java index 9f86e54..07e579f 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseSubmitModelImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -33,8 +32,19 @@ } @Override - public Subscription sendRetrofitRequest(SubmitInfoBean infoBean) { - Observable observable = RetrofitServiceManager.submitCase(infoBean); + public Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { + Observable observable = RetrofitServiceManager.getSubmitCaseResult(isNeedVerify, + isNeedRevisit, longitude, latitude, source, caseLevel, eorc, casetypeCode, + casetypeDetailCode, areaCode, streetCode, communityCode, gridId, description, + fieldintro, fileIdVerify, bzhours, bzminis); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java index c8d7d07..5e343a8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseSubmitModel.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.model; -import com.casic.dcms.bean.SubmitInfoBean; - import rx.Subscription; public interface ICaseSubmitModel { - Subscription sendRetrofitRequest(SubmitInfoBean infoBean); + Subscription sendRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java new file mode 100644 index 0000000..99700bf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadAudioModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadAudioModel { + Subscription sendRetrofitRequest(File audio); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java new file mode 100644 index 0000000..4e7a37e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IUploadImageModel.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.model; + +import java.io.File; + +import rx.Subscription; + +public interface IUploadImageModel { + Subscription sendRetrofitRequest(File image); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java new file mode 100644 index 0000000..d2964a1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadAudioModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadAudioModelImpl implements IUploadAudioModel { + + private OnUploadAudioListener listener; + + public UploadAudioModelImpl(OnUploadAudioListener uploadAudioListener) { + this.listener = uploadAudioListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadAudioListener { + void onSuccess(UploadAudioResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File audio) { + Observable observable = RetrofitServiceManager.getAudioUploadResult(audio); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadAudioResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java new file mode 100644 index 0000000..159bea1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/UploadImageModelImpl.java @@ -0,0 +1,56 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import java.io.File; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class UploadImageModelImpl implements IUploadImageModel { + + private OnUploadImageListener listener; + + public UploadImageModelImpl(OnUploadImageListener uploadImageListener) { + this.listener = uploadImageListener; + } + + /** + * 数据回调接口 + */ + public interface OnUploadImageListener { + void onSuccess(UploadImageResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(File image) { + Observable observable = RetrofitServiceManager.getImageUploadResult(image); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(UploadImageResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java index 1641026..c7191e4 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseSubmitPresenterImpl.java @@ -1,6 +1,5 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.CaseSubmitModelImpl; @@ -22,9 +21,15 @@ } @Override - public void onReadyRetrofitRequest(SubmitInfoBean infoBean) { + public void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(infoBean)); + addSubscription(actionModel.sendRetrofitRequest(isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, + communityCode, gridId, description, fieldintro, fileIdVerify, bzhours, bzminis)); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java index af804fa..e0f6a92 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseSubmitPresenter.java @@ -1,9 +1,11 @@ package com.casic.dcms.mvp.presenter; -import com.casic.dcms.bean.SubmitInfoBean; - public interface ICaseSubmitPresenter { - void onReadyRetrofitRequest(SubmitInfoBean infoBean); + void onReadyRetrofitRequest(String isNeedVerify, String isNeedRevisit, String longitude, String latitude, + String source, String caseLevel, String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, String streetCode, String communityCode, + String gridId, String description, String fieldintro, String fileIdVerify, + int bzhours, int bzminis); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java new file mode 100644 index 0000000..8a20229 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadAudioPresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadAudioPresenter { + void onReadyRetrofitRequest(File audio); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java new file mode 100644 index 0000000..f417fff --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IUploadImagePresenter.java @@ -0,0 +1,9 @@ +package com.casic.dcms.mvp.presenter; + +import java.io.File; + +public interface IUploadImagePresenter { + void onReadyRetrofitRequest(File image); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java new file mode 100644 index 0000000..51f0e0b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadAudioPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadAudioModelImpl; +import com.casic.dcms.mvp.view.IUploadAudioView; + +import java.io.File; + +public class UploadAudioPresenterImpl extends BasePresenter implements IUploadAudioPresenter, UploadAudioModelImpl.OnUploadAudioListener { + + private IUploadAudioView view; + private UploadAudioModelImpl actionModel; + + public UploadAudioPresenterImpl(IUploadAudioView uploadAudioView) { + this.view = uploadAudioView; + actionModel = new UploadAudioModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File audio) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(audio)); + } + + @Override + public void onSuccess(UploadAudioResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java new file mode 100644 index 0000000..b1edae8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.UploadImageModelImpl; +import com.casic.dcms.mvp.view.IUploadImageView; + +import java.io.File; + +public class UploadImagePresenterImpl extends BasePresenter implements IUploadImagePresenter, UploadImageModelImpl.OnUploadImageListener { + + private IUploadImageView view; + private UploadImageModelImpl actionModel; + + public UploadImagePresenterImpl(IUploadImageView uploadImageView) { + this.view = uploadImageView; + actionModel = new UploadImageModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(File image) { + view.showProgress(); + addSubscription(actionModel.sendRetrofitRequest(image)); + } + + @Override + public void onSuccess(UploadImageResultBean resultBean) { + view.hideProgress(); + view.obtainUploadResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + view.hideProgress(); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java new file mode 100644 index 0000000..d1e2115 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadAudioView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadAudioResultBean; + +public interface IUploadAudioView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadAudioResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java new file mode 100644 index 0000000..ed80ab4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUploadImageView.java @@ -0,0 +1,11 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.UploadImageResultBean; + +public interface IUploadImageView { + void showProgress(); + + void hideProgress(); + + void obtainUploadResult(UploadImageResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index c3436a2..241c810 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -6,13 +6,10 @@ import android.content.Intent; import android.location.Address; import android.location.Geocoder; -import android.location.Location; import android.media.MediaRecorder; import android.text.TextUtils; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; @@ -22,30 +19,37 @@ import androidx.core.content.ContextCompat; import com.casic.dcms.R; -import com.casic.dcms.adapter.ImageGridViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadAudioPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadAudioView; +import com.casic.dcms.mvp.view.IUploadImageView; import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; -import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; -import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -53,8 +57,8 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -62,13 +66,13 @@ import butterknife.OnClick; public class CaseUploadActivity extends BaseActivity implements View.OnClickListener, View.OnTouchListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView { + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadAudioView, IUploadImageView { private static final String TAG = "CaseUploadActivity"; private Context context = this; - @BindView(R.id.caseTopLayout) - QMUITopBarLayout caseTopLayout; + @BindView(R.id.leftBackView) + ImageView leftBackView; @BindView(R.id.caseClassView) TextView caseClassView; @@ -100,16 +104,20 @@ private MediaRecorder mediaRecorder; private File outputFile; - private List mediaList = new ArrayList<>();//拍照或者视频数据集 private CaseLargeClassPresenterImpl caseLargeClassPresenter; private CaseSmallClassPresenterImpl caseSmallClassPresenter; private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; private QMUITipDialog submitDialog; - private SubmitInfoBean infoBean; - private HashMap locationMap; private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private UploadAudioPresenterImpl uploadAudioPresenter; @Override public int initLayoutView() { @@ -118,9 +126,9 @@ @Override protected void setupTopBarLayout() { - caseTopLayout.setTitle("案卷上报").setTextColor(ContextCompat.getColor(this, R.color.white)); - caseTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); - caseTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -131,29 +139,6 @@ @Override public void initData() { gson = new Gson(); - //进入页面即创建提交表单的实体 - infoBean = new SubmitInfoBean(); - infoBean.setIsNeedRevisit("0"); - infoBean.setIsNeedVerify("0"); - infoBean.setCaseLevel("1"); - infoBean.setSource("1");//案卷上报 - infoBean.setAreaCode("崇仁县"); - infoBean.setStreetCode("巴山镇"); - //以下暂未确定,后期需要换成从地图获取 - infoBean.setCommunityCode("361024"); - infoBean.setGridId("361024100"); - //以下非必选参数 - infoBean.setFileIdVerify(""); - infoBean.setBzhours(""); - infoBean.setBzminis(""); - //定位点经纬度 - locationMap = new HashMap<>(); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - updateLocation(location); - } - }); initMediaRecorder(); largeClassBeans = new ArrayList<>(); smallClassBeans = new ArrayList<>(); @@ -162,35 +147,10 @@ caseSubmitPresenter = new CaseSubmitPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷提交中,请稍后") + .setTipWord("提交中,请稍后") .create(); - } - - private void updateLocation(Location location) { - if (location != null) { - double longitude = location.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = location.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); -// infoBean.setAreaCode(address.getSubLocality()); -// infoBean.setStreetCode(address.getSubAdminArea()); - //保存经纬度,供地图页面定位 - locationMap.put("longitude", longitude); - locationMap.put("latitude", latitude); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } + uploadImagePresenter = new UploadImagePresenterImpl(this); + uploadAudioPresenter = new UploadAudioPresenterImpl(this); } /** @@ -220,7 +180,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -238,8 +198,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - infoBean.setEorc(eorc); + eorc = String.valueOf(position + 1); caseLargeClassPresenter.onReadyRetrofitRequest(eorc); } }).build().show(); @@ -257,7 +216,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(largeClassBeans.get(position).getTypeCode()); + typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -285,7 +244,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - infoBean.setCasetypeDetailCode(smallClassBeans.get(position).getTypeDetailCode()); + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); @@ -295,9 +254,24 @@ } break; case R.id.locationMapView: - Intent intent = new Intent(this, MapBoxActivity.class); - intent.putExtra("locationMap", locationMap); - startActivity(intent); + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.audioUploadView: + if (!caseDetailEditView.getText().toString().contains("AUD_")) { + ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + return; + } + uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -341,6 +315,10 @@ .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -349,6 +327,10 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -357,6 +339,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) + .videoMaxSecond(5 * 60) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -366,60 +349,22 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - List selectList = PictureSelector.obtainMultipleResult(data); -// Log.d(TAG, "onActivityResult: " + new Gson().toJson(selectList)); - if (selectList != null && selectList.size() > 0) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); + selectList = PictureSelector.obtainMultipleResult(data); - ImageGridViewAdapter imageGridViewAdapter = new ImageGridViewAdapter(this, selectList); - selectedResultView.setAdapter(imageGridViewAdapter); - //九宫格点击事件 - selectedResultView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageGridViewAdapter.setOnDeleteClickListener(new ImageGridViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageGridViewAdapter.notifyDataSetChanged(); - if (selectList.size() == 0) { - selectedResultView.setVisibility(View.GONE); - addImageView.setVisibility(View.VISIBLE); - } else { - selectedResultView.setVisibility(View.VISIBLE); - addImageView.setVisibility(View.GONE); - } - } - }); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); - } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - mediaList.add(localMedia); - //重排序 - reOrderList(mediaList); - //TODO 未完成 需要判断是照片还是视频 - - if (mediaList.size() == 3) { - addImageView.setVisibility(View.GONE); - selectedResultView.setVisibility(View.VISIBLE); - - - Log.d(TAG, "onActivityResult: " + new Gson().toJson(localMedia)); - } else { - addImageView.setVisibility(View.VISIBLE); - selectedResultView.setVisibility(View.GONE); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); break; default: break; @@ -427,20 +372,39 @@ } } - private void reOrderList(List list) { - for (int i = 0; i < list.size(); i++) { - LocalMedia localMedia = list.get(i); - if (localMedia.getMimeType().equals("video/mp4")) { - mediaList.add(0, localMedia);//视频必须放在第一个 - } else { - mediaList.add(localMedia); - } + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); } + communityNameView.setText(buffer); + } + + private void reOrderList(List list) { +// for (int i = 0; i < list.size(); i++) { +// LocalMedia localMedia = list.get(i); +// if (localMedia.getMimeType().equals("video/mp4")) { +// mediaList.add(0, localMedia);//视频必须放在第一个 +// } else { +// mediaList.add(localMedia); +// } +// } } private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); -// intent.putExtra("mediaJson", gson.toJson(mediaList)); intent.putExtra("path", path); startActivity(intent); } @@ -546,34 +510,68 @@ submitDialog.show(); } + @Override + public void obtainUploadResult(UploadAudioResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + /** * 案卷提交 */ private void submitCase() { - infoBean.setLongitude(longitudeView.getText().toString()); - infoBean.setLatitude(latitudeView.getText().toString()); + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); String fieldIntro = caseLocationView.getText().toString(); - if (!TextUtils.isEmpty(fieldIntro)) { - infoBean.setFieldintro(fieldIntro); - } else { + if (TextUtils.isEmpty(fieldIntro)) { ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); } String description = caseDetailEditView.getText().toString(); - if (!TextUtils.isEmpty(description)) { - infoBean.setFieldintro(description); - } else { + if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); - caseSubmitPresenter.onReadyRetrofitRequest(infoBean); + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); } else { ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); } @@ -596,5 +594,11 @@ if (caseSubmitPresenter != null) { caseSubmitPresenter.disposeRetrofitRequest(); } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + if (uploadAudioPresenter != null) { + uploadAudioPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java new file mode 100644 index 0000000..97682e3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -0,0 +1,476 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.CaseLargeClassBean; +import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; +import com.casic.dcms.mvp.presenter.CaseSubmitPresenterImpl; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.ICaseLargeClassView; +import com.casic.dcms.mvp.view.ICaseSmallClassView; +import com.casic.dcms.mvp.view.ICaseSubmitCaseView; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.ColorHelper; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, + ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + + private Context context = this; + + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.caseClassView) + TextView caseClassView; + @BindView(R.id.caseLargeClassView) + TextView caseLargeClassView; + @BindView(R.id.caseSmallClassView) + TextView caseSmallClassView; + @BindView(R.id.communityNameView) + EditText communityNameView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.locationMapView) + ImageView locationMapView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private CaseLargeClassPresenterImpl caseLargeClassPresenter; + private CaseSmallClassPresenterImpl caseSmallClassPresenter; + private CaseSubmitPresenterImpl caseSubmitPresenter; + private List largeClassBeans; + private List smallClassBeans; + private QMUITipDialog submitDialog; + private Gson gson; + private List selectList = new ArrayList<>(); + private UploadImagePresenterImpl uploadImagePresenter; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + private String eorc; + private String typeCode; + private String typeDetailCode; + private ImageRecycleViewAdapter imageAdapter; + + @Override + public int initLayoutView() { + return R.layout.activity_case_upload_quickly; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + gson = new Gson(); + largeClassBeans = new ArrayList<>(); + smallClassBeans = new ArrayList<>(); + caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); + caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); + caseSubmitPresenter = new CaseSubmitPresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + uploadImagePresenter = new UploadImagePresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setAdapter(imageAdapter); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(selectList.get(position).getRealPath()); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + selectList.remove(position); + imageAdapter.setMediaList(selectList); + } + }); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.caseClassLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + caseClassView.setText(tag); + caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷大类 + eorc = String.valueOf(position + 1); + caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + } + }).build().show(); + break; + case R.id.caseLargeClassLayout: + if (largeClassBeans != null) { + if (largeClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeClassBean.DataBean dataBean : largeClassBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeCode = largeClassBeans.get(position).getTypeCode(); + + caseLargeClassView.setText(tag); + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + + //获取案卷小类 + CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); + String eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); + } + }).build().show(); + } + } + break; + case R.id.caseSmallClassLayout: + if (smallClassBeans != null) { + if (smallClassBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(this); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallClassBean.DataBean dataBean : smallClassBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); + + caseSmallClassView.setText(tag); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + } + }).build().show(); + } + } + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.locationMapView: + startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.imageUploadView: + if (selectList == null || selectList.size() == 0) { + ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case R.id.submitButton: + submitCase();//案卷提交 + break; + default: + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .selectionData(selectList) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + selectList = PictureSelector.obtainMultipleResult(data); + imageAdapter.setMediaList(selectList); + break; + case PictureConfig.REQUEST_CAMERA: + selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); + imageAdapter.setMediaList(selectList); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + String pointJson = data.getStringExtra("pointJson"); + Type type = new TypeToken() { + }.getType(); + LatLng latLng = gson.fromJson(pointJson, type); + updateLocation(latLng); + break; + default: + break; + } + } + } + + private void updateLocation(LatLng point) { + double longitude = point.getLongitude(); + longitudeView.setText(String.valueOf(longitude)); + double latitude = point.getLatitude(); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } + + @Override + public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); + if (largeClassBean.isSuccess()) { + //设置大类数据 + this.largeClassBeans = largeClassBean.getData(); + if (largeClassBeans.size() == 0) { + caseLargeClassView.setText("无小类"); + } else { + caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 + } + caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + + caseSmallClassView.setText("请选择"); + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void obtainSmallClassData(CaseSmallClassBean smallClassBean) { +// Log.d(TAG, "obtainSmallClassData: " + new Gson().toJson(smallClassBean)); + if (smallClassBean.isSuccess()) { + //设置大类数据 + this.smallClassBeans = smallClassBean.getData(); + if (smallClassBeans.size() == 0) { + caseSmallClassView.setText("无小类"); + } else { + caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 + } + caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + } + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { +// Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + PictureFileUtils.deleteAllCacheDirFile(this); + ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); + } else { + ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = longitudeView.getText().toString(); + String latitude = latitudeView.getText().toString(); + + String fieldIntro = caseLocationView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING); + } + String description = caseDetailEditView.getText().toString(); + if (TextUtils.isEmpty(description)) { + ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); + } + if (mediaList.size() == 0) { + ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + return; + } + caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "361024", "361024100", description, fieldIntro, + gson.toJson(mediaList), 0, 0); + } + + @Override + public void obtainSubmitResult(SubmitResultBean resultBean) { +// Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); + finish(); + } else { + ToastHelper.showToast("案卷提交失败,请重试", ToastHelper.ERROR); + } + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseLargeClassPresenter != null) { + caseLargeClassPresenter.disposeRetrofitRequest(); + } + if (caseSmallClassPresenter != null) { + caseSmallClassPresenter.disposeRetrofitRequest(); + } + if (caseSubmitPresenter != null) { + caseSubmitPresenter.disposeRetrofitRequest(); + } + if (uploadImagePresenter != null) { + uploadImagePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index 29393ee..d4ec0fe 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; import android.os.Bundle; import android.view.Gravity; import android.view.View; @@ -11,7 +13,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; import com.google.gson.Gson; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -28,11 +32,10 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; - import butterknife.BindView; import butterknife.OnClick; @@ -106,11 +109,19 @@ expandMapView.setChangeAlphaWhenPress(true); minusMapView.setChangeAlphaWhenPress(true); removeToLocalView.setChangeAlphaWhenPress(true); + //开始定位 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + latLng = new LatLng(location.getLatitude(), location.getLongitude()); + } + } + }); + } - HashMap locationMap = (HashMap) getIntent().getSerializableExtra("locationMap"); - if (locationMap != null) { - latLng = new LatLng(locationMap.get("latitude"), locationMap.get("longitude")); - } + @Override + public void initEvent() { mapBoxView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { @@ -140,8 +151,25 @@ mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() { @Override public boolean onMapClick(@NonNull LatLng point) { - map.addMarker(new MarkerOptions().position(point).title(new Gson().toJson(point))); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + map.addMarker(new MarkerOptions().position(point)); + String pointJson = new Gson().toJson(point); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为" + pointJson + ",确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("pointJson", pointJson); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return true; } }); @@ -149,11 +177,6 @@ }); } - @Override - public void initEvent() { - - } - @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) @Override public void onClick(View v) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index e955983..93d617f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -19,6 +19,7 @@ import com.casic.dcms.ui.CaseCheckActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; +import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; import com.casic.dcms.utils.StringHelper; @@ -77,7 +78,8 @@ startActivity(intent); break; case 1: - ToastHelper.showToast("快速上报", ToastHelper.INFO); + intent.setClass(context, CaseUploadQuicklyActivity.class); + startActivity(intent); break; case 2: ToastHelper.showToast("三包上报", ToastHelper.INFO); diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4f24791..0f5df93 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -47,7 +47,7 @@ public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; - public static final int SELECT_PICTURE_CODE = 9001; + public static final int REQUEST_MAP_CODE = 9001; public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 8a54be3..6c7a6fa 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -25,4 +25,12 @@ } return audioFile; } + + public static String getImageCompressPath() { + File dir = new File(Environment.getExternalStorageDirectory(), "CompressFile"); + if (!dir.exists()) { + dir.mkdir(); + } + return dir.toString(); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 71513c7..31c3b6f 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -15,16 +15,19 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; -import retrofit2.http.Body; +import okhttp3.MultipartBody; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; +import retrofit2.http.Multipart; import retrofit2.http.POST; +import retrofit2.http.Part; import retrofit2.http.Path; import retrofit2.http.Query; import rx.Observable; @@ -71,9 +74,27 @@ /** * 提交案卷 */ + @FormUrlEncoded @POST("/case/add") - Observable submit(@Header("token") String token, - @Body SubmitInfoBean infoBean); + Observable submitCase(@Header("token") String token, + @Field("isNeedVerify") String isNeedVerify, + @Field("isNeedRevisit") String isNeedRevisit, + @Field("longitude") String longitude, + @Field("latitude") String latitude, + @Field("source") String source, + @Field("caseLevel") String caseLevel, + @Field("eorc") String eorc, + @Field("casetypeCode") String casetypeCode, + @Field("casetypeDetailCode") String casetypeDetailCode, + @Field("areaCode") String areaCode, + @Field("streetCode") String streetCode, + @Field("communityCode") String communityCode, + @Field("gridId") String gridId, + @Field("description") String description, + @Field("fieldintro") String fieldintro, + @Field("fileIdVerify") String fileIdVerify, + @Field("bzhours") int bzhours, + @Field("bzminis") int bzminis); /** * 退出登录 @@ -183,4 +204,26 @@ Observable obtainCaseHandled(@Header("token") String token, @Query("limit") int limit, @Query("offset") int offset); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadImage(@Header("token") String token, + @Part MultipartBody.Part file); + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + @Multipart + @POST("/fileUpload") + Observable uploadAudio(@Header("token") String token, + @Part MultipartBody.Part file); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 5cfde94..7db4182 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -17,8 +17,9 @@ import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; import com.casic.dcms.bean.PublicKeyBean; -import com.casic.dcms.bean.SubmitInfoBean; import com.casic.dcms.bean.SubmitResultBean; +import com.casic.dcms.bean.UploadAudioResultBean; +import com.casic.dcms.bean.UploadImageResultBean; import com.casic.dcms.bean.UserBean; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; @@ -27,9 +28,13 @@ import org.jetbrains.annotations.NotNull; +import java.io.File; import java.util.concurrent.TimeUnit; +import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.OkHttpClient; +import okhttp3.RequestBody; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; @@ -113,10 +118,20 @@ /** * 提交案卷 */ - public static Observable submitCase(SubmitInfoBean infoBean) { + public static Observable getSubmitCaseResult(String isNeedVerify, String isNeedRevisit, + String longitude, String latitude, + String source, String caseLevel, + String eorc, String casetypeCode, + String casetypeDetailCode, String areaCode, + String streetCode, String communityCode, + String gridId, String description, + String fieldintro, String fileIdVerify, + int bzhours, int bzminis) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.submit(TokenHelper.getToken(), infoBean); + return service.submitCase(TokenHelper.getToken(), isNeedVerify, isNeedRevisit, longitude, latitude, + source, caseLevel, eorc, casetypeCode, casetypeDetailCode, areaCode, streetCode, communityCode, + gridId, description, fieldintro, fileIdVerify, bzhours, bzminis); } /** @@ -238,4 +253,29 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainCaseHandled(TokenHelper.getToken(), limit, offset); } + + /** + * 上传案卷图片 + *

+ * 系统路径static拼接图片返回路径 + * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg + */ + public static Observable getImageUploadResult(File image) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); + return service.uploadImage(TokenHelper.getToken(), imagePart); + } + + /** + * 上传案卷音频 + */ + public static Observable getAudioUploadResult(File audio) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), audio); + MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", audio.getName(), requestBody); + return service.uploadAudio(TokenHelper.getToken(), imagePart); + } } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index a9ff51c..3f932ff 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -6,19 +6,39 @@ android:background="@color/white" android:orientation="vertical"> - + android:background="@color/mainThemeColor"> + + + + + + android:layout_height="wrap_content" + android:scrollbars="vertical"> - - - - - - - - - @@ -196,6 +193,29 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:drawableEnd="@mipmap/point" + android:text="社区" + android:textSize="@dimen/textFontSize" /> + + + + + + + + + @@ -227,6 +247,7 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" + android:layout_toStartOf="@id/audioUploadView" android:background="@drawable/bg_layout"> + + @@ -261,54 +290,53 @@ android:text="案卷图片\n/视频" android:textSize="@dimen/textFontSize" /> - - - + android:layout_toStartOf="@id/imageUploadView" + android:orientation="horizontal"> - - + - + + - + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:background="@drawable/ic_update" /> + + diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml new file mode 100644 index 0000000..a799254 --- /dev/null +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_select_gridview.xml b/app/src/main/res/layout/item_select_gridview.xml index ccefa5e..5c9541b 100644 --- a/app/src/main/res/layout/item_select_gridview.xml +++ b/app/src/main/res/layout/item_select_gridview.xml @@ -5,8 +5,8 @@