package com.dayu.pipirrapp.activity;
|
|
import static com.dayu.pipirrapp.net.Constants.BASE_URL;
|
|
import android.content.Context;
|
import android.content.Intent;
|
import android.os.Bundle;
|
import android.text.TextUtils;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
|
import androidx.activity.result.ActivityResultLauncher;
|
import androidx.activity.result.contract.ActivityResultContracts;
|
import androidx.lifecycle.Observer;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.SimpleItemAnimator;
|
|
import com.dayu.pipirrapp.MyApplication;
|
import com.dayu.pipirrapp.adapter.AddPictureAdapter;
|
import com.dayu.pipirrapp.bean.db.LatLonBean;
|
import com.dayu.pipirrapp.bean.net.AddProcessingRequest;
|
import com.dayu.pipirrapp.bean.net.InsectionResult;
|
import com.dayu.pipirrapp.bean.net.UplodFileState;
|
import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
|
import com.dayu.pipirrapp.fragment.OrderFragment;
|
import com.dayu.pipirrapp.net.ApiManager;
|
import com.dayu.pipirrapp.net.BaseResponse;
|
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
|
import com.dayu.pipirrapp.tool.FileUploadUtils;
|
import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
|
import com.dayu.pipirrapp.tool.GlideEngine;
|
import com.dayu.pipirrapp.tool.ImageFileCompressEngine;
|
import com.dayu.pipirrapp.utils.CommonKeyName;
|
import com.dayu.pipirrapp.utils.MyLog;
|
import com.dayu.pipirrapp.utils.ServiceUtils;
|
import com.dayu.pipirrapp.utils.ToastUtil;
|
import com.dayu.pipirrapp.view.TitleBar;
|
import com.jeremyliao.liveeventbus.LiveEventBus;
|
import com.loper7.date_time_picker.DateTimeConfig;
|
import com.loper7.date_time_picker.dialog.CardDatePickerDialog;
|
import com.luck.picture.lib.basic.PictureSelectionModel;
|
import com.luck.picture.lib.basic.PictureSelector;
|
import com.luck.picture.lib.config.PictureMimeType;
|
import com.luck.picture.lib.config.SelectMimeType;
|
import com.luck.picture.lib.decoration.GridSpacingItemDecoration;
|
import com.luck.picture.lib.engine.ImageEngine;
|
import com.luck.picture.lib.entity.LocalMedia;
|
import com.luck.picture.lib.entity.MediaExtraInfo;
|
import com.luck.picture.lib.interfaces.OnExternalPreviewEventListener;
|
import com.luck.picture.lib.utils.DensityUtil;
|
import com.luck.picture.lib.utils.MediaUtils;
|
import com.luck.picture.lib.utils.PictureFileUtils;
|
import com.tencent.bugly.crashreport.CrashReport;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import retrofit2.Call;
|
|
/**
|
* OrderDealDetailActivity -
|
* 工单处理界面
|
*
|
* @author zuoxiao
|
* @version 1.0
|
* @since 2024-11-27
|
*/
|
public class OrderDealActivity extends BaseActivity {
|
private final String TAG = "OrderDealActivity";
|
ActivityOrderDealBinding binding;
|
RecyclerView mRecyclerView;
|
AddPictureAdapter mAdapter;
|
int maxSelectNum = 10;//最大照片
|
int maxSelectVideoNum = 0;//最大视频
|
private final List<LocalMedia> mData = new ArrayList<>();
|
private ActivityResultLauncher<Intent> launcherResult;
|
private ImageEngine imageEngine;
|
// List<UplodFileState> uplodFileStates = new ArrayList<>();
|
Map<String, UplodFileState> uplodFileStates = new HashMap<>();
|
String workOrderId;
|
LatLonBean latLonBean;
|
String strCompleteTime;
|
|
/**
|
* 定位监听
|
*/
|
private Observer<Object> locationObserver = new Observer<Object>() {
|
@Override
|
public void onChanged(Object o) {
|
MyLog.d("OrderDealActivity>>>locationObserver>>");
|
latLonBean = (LatLonBean) o;
|
}
|
};
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
|
setContentView(binding.getRoot());
|
workOrderId = this.getIntent().getStringExtra("workOrderId");
|
launcherResult = createActivityResultLauncher();
|
initView();
|
startLocation();
|
}
|
|
|
void initView() {
|
new TitleBar(this).setTitleText("处理工单").setLeftIco().setLeftIcoListening(v -> OrderDealActivity.this.finish());
|
binding.timeLL.setOnClickListener(v -> {
|
long time = System.currentTimeMillis();
|
List<Integer> list = new ArrayList<>();
|
list.add(DateTimeConfig.YEAR);
|
list.add(DateTimeConfig.MONTH);
|
list.add(DateTimeConfig.DAY);
|
list.add(DateTimeConfig.HOUR);
|
list.add(DateTimeConfig.MIN);
|
new CardDatePickerDialog.Builder(this)
|
.setTitle("选择处理时间")
|
.setOnChoose("确定", aLong -> {
|
//aLong = millisecond
|
strCompleteTime = com.dayu.pipirrapp.utils.DateUtils.formatTimestamp(aLong);
|
binding.timeData.setText(strCompleteTime);
|
return null;
|
})
|
.showBackNow(true)
|
.setDefaultTime(time)
|
.setMaxTime(time)
|
.setMinTime(time - 365L * 24 * 60 * 60 * 1000) // 设置最小时间为一年前
|
.setDisplayType(list)
|
.build().show();
|
});
|
mRecyclerView = binding.recycler;
|
FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
|
4, GridLayoutManager.VERTICAL, false);
|
mRecyclerView.setLayoutManager(manager);
|
RecyclerView.ItemAnimator itemAnimator = mRecyclerView.getItemAnimator();
|
if (itemAnimator != null) {
|
((SimpleItemAnimator) itemAnimator).setSupportsChangeAnimations(false);
|
}
|
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4,
|
DensityUtil.dip2px(this, 8), false));
|
mAdapter = new AddPictureAdapter(this, mData, uplodFileStates);
|
mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
|
mRecyclerView.setAdapter(mAdapter);
|
imageEngine = GlideEngine.createGlideEngine();
|
mAdapter.setOnItemClickListener(new AddPictureAdapter.OnItemClickListener() {
|
@Override
|
public void onItemClick(View v, int position) {
|
// 预览图片、视频、音频
|
PictureSelector.create(OrderDealActivity.this)
|
.openPreview()
|
.setImageEngine(imageEngine)
|
.setExternalPreviewEventListener(new MyExternalPreviewEventListener())
|
.startActivityPreview(position, true, mAdapter.getData());
|
}
|
|
@Override
|
public void openPicture() {
|
//添加图片
|
mOpenPicture();
|
}
|
|
@Override
|
public void onDeleteClick(int position) {
|
deleteItem(position);
|
}
|
|
@Override
|
public void onReUpload(UplodFileState uplodFileState) {
|
FileUploadUtils.uploadFile(OrderDealActivity.this, uplodFileState, uplodFileStates, mAdapter);
|
}
|
});
|
binding.dealButton.setOnClickListener(v -> {
|
boolean isAllPost = true;
|
for (UplodFileState imgData : uplodFileStates.values()) {
|
if (imgData.getState() == 0) {
|
isAllPost = false;
|
}
|
}
|
|
if (!TextUtils.isEmpty(binding.contentET.getText().toString())) {
|
if (isAllPost) {
|
if (uplodFileStates.size() > 0) {
|
postData();
|
} else {
|
ToastUtil.showToast(OrderDealActivity.this, "请上传图片");
|
}
|
} else {
|
ToastUtil.showToast(OrderDealActivity.this, "图片正在上传请稍后提交");
|
}
|
} else {
|
ToastUtil.showToast(OrderDealActivity.this, "请输入反馈内容");
|
}
|
});
|
}
|
|
/**
|
* 添加图片
|
*/
|
private void mOpenPicture() {
|
// 进入相册
|
PictureSelectionModel selectionModel = PictureSelector.create(this)
|
.openGallery(SelectMimeType.ofImage())
|
.setMaxSelectNum(maxSelectNum)
|
.setMaxVideoSelectNum(maxSelectVideoNum)
|
.setImageEngine(imageEngine)
|
//设置图片压缩
|
.setCompressEngine(new ImageFileCompressEngine())
|
.setSelectedData(mAdapter.getData());
|
|
selectionModel.forResult(launcherResult);
|
}
|
|
/**
|
* 创建一个ActivityResultLauncher
|
*
|
* @return
|
*/
|
private ActivityResultLauncher<Intent> createActivityResultLauncher() {
|
return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
|
result -> {
|
int resultCode = result.getResultCode();
|
if (resultCode == RESULT_OK) {
|
ArrayList<LocalMedia> selectList = PictureSelector.obtainSelectorList(result.getData());
|
analyticalSelectResults(selectList);
|
} else if (resultCode == RESULT_CANCELED) {
|
Log.i(TAG, "onActivityResult PictureSelector Cancel");
|
}
|
});
|
}
|
|
/**
|
* 外部预览监听事件
|
*/
|
private class MyExternalPreviewEventListener implements OnExternalPreviewEventListener {
|
|
@Override
|
public void onPreviewDelete(int position) {
|
deleteItem(position);
|
mAdapter.remove(position);
|
mAdapter.notifyItemRemoved(position);
|
}
|
|
@Override
|
public boolean onLongPressDownload(Context context, LocalMedia media) {
|
return false;
|
}
|
}
|
|
/**
|
* 处理选择结果
|
*
|
* @param result
|
*/
|
private void analyticalSelectResults(ArrayList<LocalMedia> result) {
|
for (LocalMedia media : result) {
|
if (media.getWidth() == 0 || media.getHeight() == 0) {
|
if (PictureMimeType.isHasImage(media.getMimeType())) {
|
MediaExtraInfo imageExtraInfo = MediaUtils.getImageSize(this, media.getPath());
|
media.setWidth(imageExtraInfo.getWidth());
|
media.setHeight(imageExtraInfo.getHeight());
|
} else if (PictureMimeType.isHasVideo(media.getMimeType())) {
|
MediaExtraInfo videoExtraInfo = MediaUtils.getVideoSize(this, media.getPath());
|
media.setWidth(videoExtraInfo.getWidth());
|
media.setHeight(videoExtraInfo.getHeight());
|
}
|
}
|
Log.i(TAG, "文件名: " + media.getFileName());
|
Log.i(TAG, "是否压缩:" + media.isCompressed());
|
Log.i(TAG, "压缩:" + media.getCompressPath());
|
Log.i(TAG, "初始路径:" + media.getPath());
|
Log.i(TAG, "绝对路径:" + media.getRealPath());
|
Log.i(TAG, "是否裁剪:" + media.isCut());
|
Log.i(TAG, "裁剪路径:" + media.getCutPath());
|
Log.i(TAG, "是否开启原图:" + media.isOriginal());
|
Log.i(TAG, "原图路径:" + media.getOriginalPath());
|
Log.i(TAG, "沙盒路径:" + media.getSandboxPath());
|
Log.i(TAG, "水印路径:" + media.getWatermarkPath());
|
Log.i(TAG, "视频缩略图:" + media.getVideoThumbnailPath());
|
Log.i(TAG, "原始宽高: " + media.getWidth() + "x" + media.getHeight());
|
Log.i(TAG, "裁剪宽高: " + media.getCropImageWidth() + "x" + media.getCropImageHeight());
|
Log.i(TAG, "文件大小: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
|
Log.i(TAG, "文件时长: " + media.getDuration());
|
Log.i(TAG, "扩展名: " + media.getMimeType());
|
FileUploadUtils.creatAndUploadFile(this, media, uplodFileStates, mAdapter);
|
}
|
// 获取 result 中没有而 uplodFileStates 中有的地址
|
FileUploadUtils.cancelRemovedUploads(result, uplodFileStates);
|
// 更新UI
|
FileUploadUtils.updateUI(result, mAdapter);
|
}
|
|
|
|
/**
|
* 上报处理结果
|
*/
|
private void postData() {
|
AddProcessingRequest result = new AddProcessingRequest();
|
result.setImages(uplodFileStates);
|
result.setContent(binding.contentET.getText().toString());
|
result.setInspectorId(MyApplication.myApplication.userId);
|
result.setWorkOrderId(workOrderId);
|
result.setCompleteTime(strCompleteTime);
|
if (latLonBean != null) {
|
result.setLat(String.valueOf(latLonBean.getLatitude()));
|
result.setLng(String.valueOf(latLonBean.getLongitude()));
|
}
|
ApiManager.getInstance().requestPostHideLoading(this, BASE_URL + "/app/workOrder/addProcessingResult", InsectionResult.class, result.toMap(result), new SubscriberListener<BaseResponse<List<InsectionResult>>>() {
|
@Override
|
public void onNext(BaseResponse<List<InsectionResult>> t) {
|
try {
|
if (t.isSuccess()) {
|
ToastUtil.showToastLong(OrderDealActivity.this, "上报成功");
|
setResult(OrderFragment.RESULT_REFRESH);
|
OrderDealActivity.this.finish();
|
} else {
|
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
|
}
|
});
|
}
|
|
/**
|
* 开始定位相关逻辑
|
*/
|
private void startLocation() {
|
ServiceUtils.startLocationService(this, true);
|
//获取定位服务传过来的坐标点
|
LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
|
}
|
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
|
FileUploadUtils.cancelAllCall(uplodFileStates);
|
}
|
|
/**
|
* 预览和图片列表删除图片时处理删除事件
|
*/
|
private void deleteItem(int position) {
|
LocalMedia localMedia = mAdapter.getData().get(position);
|
String path;
|
UplodFileState uplodFileState;
|
if (TextUtils.isEmpty(localMedia.getCompressPath())) {
|
uplodFileState = uplodFileStates.get(localMedia.getRealPath());
|
} else {
|
uplodFileState = uplodFileStates.get(localMedia.getCompressPath());
|
}
|
if (uplodFileState != null) {
|
path = uplodFileState.getFilePath();
|
try {
|
Call mCall = uplodFileStates.get(path).getThisCall();
|
if (mCall != null) {
|
mCall.cancel();
|
MyLog.d("progressRequestBody>>>" + "cancel》》》path:" + path);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
uplodFileStates.remove(path);
|
}
|
}
|
}
|