app/src/main/java/com/dayu/pipirrapp/MyApplication.java
@@ -6,7 +6,7 @@ import com.jeremyliao.liveeventbus.LiveEventBus; import com.tencent.bugly.crashreport.CrashReport; //import cn.jpush.android.api.JPushInterface; /** * author: zuo @@ -19,7 +19,7 @@ //数据库的tag值 public String myTag = "-1"; public String token; public String userId; public String userId;//2024120411461000002 @Override app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -1,16 +1,14 @@ package com.dayu.pipirrapp.activity; import android.net.ConnectivityManager; import android.net.Network; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; @@ -18,13 +16,15 @@ import com.dayu.pipirrapp.bean.db.TagBean; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.databinding.ActivityMainBinding; import com.dayu.pipirrapp.fragment.OrderFragment; import com.dayu.pipirrapp.fragment.MapFragment; import com.dayu.pipirrapp.fragment.MyFragment; import com.dayu.pipirrapp.fragment.OrderFragment; import com.dayu.pipirrapp.net.MqttManager; import com.dayu.pipirrapp.tool.InspectionUtils; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.NetUtils; import com.jeremyliao.liveeventbus.LiveEventBus; import java.util.ArrayList; import java.util.List; @@ -47,7 +47,7 @@ super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); registNetCallBack(); setupFragments(); initView(); initTab(); @@ -60,6 +60,27 @@ } mqttManager = new MqttManager(this); mqttManager.connect(); LiveEventBus.get(CommonKeyName.NetworkCallback).observeForever(new Observer<Object>() { @Override public void onChanged(Object o) { switch ((int) o) { case NetUtils.Available: MyLog.i("MqttManager>>>Lost"); InspectionUtils.aginPutInspectionData(MainActivity.this); break; case NetUtils.Lost: break; } } }); registNetCallBack(); } @Override protected void onStart() { super.onStart(); } private void setupFragments() { @@ -163,31 +184,12 @@ // 注册网络监控 private void registNetCallBack() { NetUtils.registerNetCallBack(this, networkCallback); NetUtils.registerNetCallBack(this); } private void unregisterNetworkCallback() { NetUtils.unregisterReceiver(this, networkCallback); NetUtils.unregisterReceiver(this); } //网络监控 ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); // 这里可以执行网络可用后的逻辑,比如进行数据请求等 MyLog.d("onAvailable"); InspectionUtils.aginPutInspectionData(MainActivity.this); } @Override public void onLost(@NonNull Network network) { super.onLost(network); // 这里可以执行网络丢失后的逻辑,比如停止数据请求等 MyLog.d("onLost"); } }; app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -1,24 +1,42 @@ package com.dayu.pipirrapp.activity; import static com.dayu.pipirrapp.net.Constants.BASE_URL; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; 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.AddProcessingResult; import com.dayu.pipirrapp.bean.net.InsectionResult; import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding; import com.dayu.pipirrapp.net.ApiManager; import com.dayu.pipirrapp.net.BaseResponse; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.net.upload.UploadFileListener; import com.dayu.pipirrapp.service.MyLocationService; import com.dayu.pipirrapp.tool.FullyGridLayoutManager; import com.dayu.pipirrapp.tool.GlideEngine; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.ToastUtil; import com.dayu.pipirrapp.view.TitleBar; import com.jeremyliao.liveeventbus.LiveEventBus; import com.luck.picture.lib.basic.PictureSelectionModel; import com.luck.picture.lib.basic.PictureSelector; import com.luck.picture.lib.config.PictureMimeType; @@ -34,10 +52,13 @@ 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.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import top.zibin.luban.CompressionPredicate; import top.zibin.luban.Luban; @@ -62,14 +83,29 @@ private final List<LocalMedia> mData = new ArrayList<>(); private ActivityResultLauncher<Intent> launcherResult; private ImageEngine imageEngine; List<UplodFileState> uplodFileStates = new ArrayList<>(); String workOrderId; LatLonBean latLonBean; /** * 定位监听 */ private Observer<Object> locationObserver = new Observer<Object>() { @Override public void onChanged(Object o) { 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(); } @@ -104,6 +140,28 @@ public void openPicture() { //添加图片 mOpenPicture(); } }); binding.dealButton.setOnClickListener(v -> { boolean isAllPost = true; for (UplodFileState imgData : uplodFileStates) { 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, "请输入反馈内容"); } }); } @@ -166,6 +224,10 @@ * @param result */ private void analyticalSelectResults(ArrayList<LocalMedia> result) { Set<String> existingPaths = new HashSet<>(); for (UplodFileState uplodData : uplodFileStates) { existingPaths.add(uplodData.getFilePath()); } for (LocalMedia media : result) { if (media.getWidth() == 0 || media.getHeight() == 0) { if (PictureMimeType.isHasImage(media.getMimeType())) { @@ -194,6 +256,17 @@ Log.i(TAG, "裁剪宽高: " + media.getCropImageWidth() + "x" + media.getCropImageHeight()); Log.i(TAG, "文件大小: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize())); Log.i(TAG, "文件时长: " + media.getDuration()); String compressPath = media.getCompressPath(); //判断是否有这个路径,没有的话上传该图片 if (!existingPaths.contains(compressPath)) { UplodFileState uplodFileState = new UplodFileState(); uplodFileState.setFilePath(media.getRealPath()); uplodFileStates.add(uplodFileState); // 执行上传图片的操作 uplodeImg(uplodFileState); } } runOnUiThread(new Runnable() { @Override @@ -205,6 +278,7 @@ mAdapter.getData().addAll(result); mAdapter.notifyItemRangeInserted(0, result.size()); } }); } @@ -256,4 +330,77 @@ } //上传图片 private void uplodeImg(UplodFileState uplodFileState) { ApiManager.getInstance().uploadFile(this, uplodFileState, new UploadFileListener() { @Override public void onBack(UplodFileState state) { for (UplodFileState uplodFile : uplodFileStates) { if (uplodFile.getFilePath().equals(state.getFilePath())) { int index = uplodFileStates.indexOf(uplodFile); if (index != -1) { uplodFileStates.set(index, uplodFile); // 更新对应的项 } } } } }); } /** * 上报处理结果 */ private void postData() { AddProcessingResult result = new AddProcessingResult(); result.setImages(uplodFileStates); result.setContent(binding.contentET.getText().toString()); result.setInspectorId(MyApplication.myApplication.userId); result.setWorkOrderId(workOrderId); result.setCompleteTime(com.dayu.pipirrapp.utils.DateUtils.getNowDateToMMStr()); 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, "上报成功"); OrderDealActivity.this.finish(); } else { } } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } } }); } /** * 开始定位相关逻辑 */ private void startLocation() { Intent location = new Intent(this, MyLocationService.class); location.putExtra("isSingle", true); //开启定位 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { startForegroundService(location); } else { startService(location); } //获取定位服务传过来的坐标点 LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver); } @Override protected void onDestroy() { super.onDestroy(); LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver); } } app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
@@ -4,9 +4,12 @@ import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import androidx.annotation.Nullable; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.bean.net.DealDetailResult; import com.dayu.pipirrapp.bean.net.OrderDetailResult; import com.dayu.pipirrapp.databinding.ActivityOrderDetailBinding; import com.dayu.pipirrapp.net.ApiManager; @@ -30,6 +33,7 @@ public class OrderDetailActivity extends BaseActivity { ActivityOrderDetailBinding binding; String workOrderId; String proResultId; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -43,12 +47,18 @@ void initView() { workOrderId = this.getIntent().getStringExtra("workOrderId"); if (this.getIntent().hasExtra("proResultId")) { proResultId = this.getIntent().getStringExtra("proResultId"); getHandleData(proResultId); } if (!TextUtils.isEmpty(workOrderId)) { getMarkerData(workOrderId); } else { this.finish(); ToastUtil.showToastLong(this, "当前workOrderId为空"); } binding.setItemclidk(OrderDetailActivity.this); } @@ -59,13 +69,70 @@ private void getMarkerData(String workOrderId) { Map<String, Object> params = new HashMap<>(); params.put("workOrderId", workOrderId); ApiManager.getInstance().requestGetHideLoading(this, Constants.BASE_URL + "/app/workOrder/getOneWorkOrder", OrderDetailResult.class, params, new SubscriberListener<BaseResponse<OrderDetailResult>>() { ApiManager.getInstance().requestGet(this, Constants.BASE_URL + "/app/workOrder/getOneWorkOrder", OrderDetailResult.class, params, new SubscriberListener<BaseResponse<OrderDetailResult>>() { @Override public void onNext(BaseResponse<OrderDetailResult> t) { if (t.isSuccess()) { if (t.isSuccess()) { if (t.getContent() != null) { binding.setData(t.getContent()); OrderDetailResult orderDetailResult = t.getContent(); binding.setData(orderDetailResult); if (!TextUtils.isEmpty(t.getContent().getProResultId()) && TextUtils.isEmpty(proResultId)) { getHandleData(orderDetailResult.getProResultId()); } switch (orderDetailResult.getProResultStateId()) { case 0://未上报 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.black)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_no_bg)); break; case 1://已上报 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_wait_bg)); binding.dealButton.setVisibility(View.GONE); break; case 2://已完成 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_finish_bg)); binding.dealButton.setVisibility(View.GONE); break; case 3://被驳回 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_reject_bg)); break; } } else { ToastUtil.showToast(OrderDetailActivity.this, t.getMsg()); } } } else { ToastUtil.showToast(OrderDetailActivity.this, t.getMsg()); } } @Override public void onCloose() { super.onCloose(); } }); } /** * 获取处理详情 */ private void getHandleData(String proResultId) { Map<String, Object> params = new HashMap<>(); params.put("proResultId", proResultId); ApiManager.getInstance().requestGet(this, Constants.BASE_URL + "/app/workOrder/getProResult", DealDetailResult.class, params, new SubscriberListener<BaseResponse<DealDetailResult>>() { @Override public void onNext(BaseResponse<DealDetailResult> t) { if (t.isSuccess()) { if (t.isSuccess()) { if (t.getContent() != null) { binding.setDealData(t.getContent()); } else { ToastUtil.showToast(OrderDetailActivity.this, t.getMsg()); } @@ -87,7 +154,7 @@ public void startDealActivity() { Intent intent = new Intent(this, OrderDealActivity.class); intent.putExtra("workOrderId", workOrderId); startActivity(intent); startActivityForResult(intent, 1); } } app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java
@@ -52,7 +52,20 @@ public ImageViewHolder(View itemView) { super(itemView); // imageView = itemView.findViewById(R.id.thumbnailImageView); imageView = itemView.findViewById(R.id.thumbnailImageView); } } public interface OnItemClickListener { /** * Item click event * * @param v * @param position */ void onItemClick(View v, int position); } } app/src/main/java/com/dayu/pipirrapp/adapter/OrderAdapter.java
@@ -56,6 +56,26 @@ if (recordsList.size() > 0) { OrderListResult.Data record = recordsList.get(position); ((OrderAdapter.ViewHolder) holder).getBinding().setData(record); switch (record.getProResultStateId()) { case 0://未上报 ((ViewHolder) holder).mBinding.stateText.setTextColor(context.getResources().getColor(R.color.black)); ((ViewHolder) holder).mBinding.stateText.setBackground(context.getResources().getDrawable(R.drawable.order_state_no_bg)); break; case 1://已上报 ((ViewHolder) holder).mBinding.stateText.setTextColor(context.getResources().getColor(R.color.white)); ((ViewHolder) holder).mBinding.stateText.setBackground(context.getResources().getDrawable(R.drawable.order_state_wait_bg)); break; case 2://已完成 ((ViewHolder) holder).mBinding.stateText.setTextColor(context.getResources().getColor(R.color.white)); ((ViewHolder) holder).mBinding.stateText.setBackground(context.getResources().getDrawable(R.drawable.order_state_finish_bg)); break; case 3://被驳回 ((ViewHolder) holder).mBinding.stateText.setTextColor(context.getResources().getColor(R.color.white)); ((ViewHolder) holder).mBinding.stateText.setBackground(context.getResources().getDrawable(R.drawable.order_state_reject_bg)); break; } } } } app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingResult.java
New file @@ -0,0 +1,105 @@ package com.dayu.pipirrapp.bean.net; import java.util.ArrayList; import java.util.List; /** * AddProcessingResult -上报处理结果 * * @author zuoxiao * @version 1.0 * @since 2024-12-05 */ public class AddProcessingResult extends BaseRequest { String workOrderId;//工单ID String inspectorId;//巡检员ID String content;//结果内容 List<Image> images = new ArrayList<>(); String completeTime;//任务完成时间 String lng; String lat; public String getLng() { return lng; } public void setLng(String lng) { this.lng = lng; } public String getLat() { return lat; } public void setLat(String lat) { this.lat = lat; } public String getCompleteTime() { return completeTime; } public void setCompleteTime(String completeTime) { this.completeTime = completeTime; } public String getWorkOrderId() { return workOrderId; } public void setWorkOrderId(String workOrderId) { this.workOrderId = workOrderId; } public String getInspectorId() { return inspectorId; } public void setInspectorId(String inspectorId) { this.inspectorId = inspectorId; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public List<Image> getImages() { return images; } public void setImages(List<UplodFileState> states) { images.clear(); for (UplodFileState data : states) { Image image = new Image(); image.setWebPath(data.getWebPath()); image.setId(data.getId()); images.add(image); } } public class Image { String id; String webPath; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } } } app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java
New file @@ -0,0 +1,101 @@ package com.dayu.pipirrapp.bean.net; /** * DealDetailResult -处理结果详情接口 * * @author zuoxiao * @version 1.0 * @since 2024-12-06 */ public class DealDetailResult { String proResultId;//处理结果ID String workOrderId;// String inspector;// 巡检员 String content;//结果内容 double lng;// 经度 double lat;// 纬度 String completeTime;// 任务完成时间 精确到分 String reportTime;//上报时间 int state;//状态 1-已上报,2-已通过,3-已驳回 String stateName;// 状态名称 public String getProResultId() { return proResultId; } public void setProResultId(String proResultId) { this.proResultId = proResultId; } public String getWorkOrderId() { return workOrderId; } public void setWorkOrderId(String workOrderId) { this.workOrderId = workOrderId; } public String getInspector() { return inspector; } public void setInspector(String inspector) { this.inspector = inspector; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public double getLng() { return lng; } public void setLng(double lng) { this.lng = lng; } public double getLat() { return lat; } public void setLat(double lat) { this.lat = lat; } public String getCompleteTime() { return completeTime; } public void setCompleteTime(String completeTime) { this.completeTime = completeTime; } public String getReportTime() { return reportTime; } public void setReportTime(String reportTime) { this.reportTime = reportTime; } public int getState() { return state; } public void setState(int state) { this.state = state; } public String getStateName() { return stateName; } public void setStateName(String stateName) { this.stateName = stateName; } } app/src/main/java/com/dayu/pipirrapp/bean/net/OrderDetailResult.java
@@ -25,6 +25,151 @@ public int rejectTimes;//驳回次数 public String state;//工单状态 public String processingState;//处理状态 public String proResultId;//处理结果id public int proResultStateId;//1待审核 2审核通过 3驳回 public int getProResultStateId() { return proResultStateId; } public void setProResultStateId(int proResultStateId) { this.proResultStateId = proResultStateId; } public String getWorkOrderId() { return workOrderId; } public void setWorkOrderId(String workOrderId) { this.workOrderId = workOrderId; } public String getDispatcherId() { return dispatcherId; } public void setDispatcherId(String dispatcherId) { this.dispatcherId = dispatcherId; } public String getDispatcher() { return dispatcher; } public void setDispatcher(String dispatcher) { this.dispatcher = dispatcher; } public String getInspectorId() { return inspectorId; } public void setInspectorId(String inspectorId) { this.inspectorId = inspectorId; } public String getInspector() { return inspector; } public void setInspector(String inspector) { this.inspector = inspector; } public String getTaskType() { return taskType; } public void setTaskType(String taskType) { this.taskType = taskType; } public String getTaskContent() { return taskContent; } public void setTaskContent(String taskContent) { this.taskContent = taskContent; } public String getCompleteCriteria() { return completeCriteria; } public void setCompleteCriteria(String completeCriteria) { this.completeCriteria = completeCriteria; } public String getDeadLine() { return deadLine; } public void setDeadLine(String deadLine) { this.deadLine = deadLine; } public String getClientReportId() { return clientReportId; } public void setClientReportId(String clientReportId) { this.clientReportId = clientReportId; } public String getInspectorReportId() { return inspectorReportId; } public void setInspectorReportId(String inspectorReportId) { this.inspectorReportId = inspectorReportId; } public String getCompleteTime() { return completeTime; } public void setCompleteTime(String completeTime) { this.completeTime = completeTime; } public String getDispatchTime() { return dispatchTime; } public void setDispatchTime(String dispatchTime) { this.dispatchTime = dispatchTime; } public int getRejectTimes() { return rejectTimes; } public void setRejectTimes(int rejectTimes) { this.rejectTimes = rejectTimes; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getProcessingState() { return processingState; } public void setProcessingState(String processingState) { this.processingState = processingState; } public String getProResultId() { return proResultId; } public void setProResultId(String proResultId) { this.proResultId = proResultId; } } app/src/main/java/com/dayu/pipirrapp/bean/net/OrderListResult.java
@@ -76,6 +76,152 @@ public int rejectTimes;//驳回次数 public String state;//工单状态 public String processingState;//处理状态 public String proResultId;//处理结果id public int proResultStateId;//状态 1-已上报,2-已通过,3-已驳回 public String getWorkOrderId() { return workOrderId; } public void setWorkOrderId(String workOrderId) { this.workOrderId = workOrderId; } public String getDispatcherId() { return dispatcherId; } public void setDispatcherId(String dispatcherId) { this.dispatcherId = dispatcherId; } public String getDispatcher() { return dispatcher; } public void setDispatcher(String dispatcher) { this.dispatcher = dispatcher; } public String getInspectorId() { return inspectorId; } public void setInspectorId(String inspectorId) { this.inspectorId = inspectorId; } public String getInspector() { return inspector; } public void setInspector(String inspector) { this.inspector = inspector; } public String getTaskType() { return taskType; } public void setTaskType(String taskType) { this.taskType = taskType; } public String getTaskContent() { return taskContent; } public void setTaskContent(String taskContent) { this.taskContent = taskContent; } public String getCompleteCriteria() { return completeCriteria; } public void setCompleteCriteria(String completeCriteria) { this.completeCriteria = completeCriteria; } public String getDeadLine() { return deadLine; } public void setDeadLine(String deadLine) { this.deadLine = deadLine; } public String getClientReportId() { return clientReportId; } public void setClientReportId(String clientReportId) { this.clientReportId = clientReportId; } public String getInspectorReportId() { return inspectorReportId; } public void setInspectorReportId(String inspectorReportId) { this.inspectorReportId = inspectorReportId; } public String getCompleteTime() { return completeTime; } public void setCompleteTime(String completeTime) { this.completeTime = completeTime; } public String getDispatchTime() { return dispatchTime; } public void setDispatchTime(String dispatchTime) { this.dispatchTime = dispatchTime; } public int getRejectTimes() { return rejectTimes; } public void setRejectTimes(int rejectTimes) { this.rejectTimes = rejectTimes; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getProcessingState() { return processingState; } public void setProcessingState(String processingState) { this.processingState = processingState; } public String getProResultId() { return proResultId; } public void setProResultId(String proResultId) { this.proResultId = proResultId; } public int getProResultStateId() { return proResultStateId; } public void setProResultStateId(int proResultStateId) { this.proResultStateId = proResultStateId; } } app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileResule.java
New file @@ -0,0 +1,75 @@ package com.dayu.pipirrapp.bean.net; /** * UplodFileResule -文件上传返回参数 * * @author zuoxiao * @version 1.0 * @since 2024-12-05 */ public class UplodFileResule { String downloadPath;//:http://127.0.0.1:8180/file/download/down?id=2024120515170600010, String extName;//jpg, String hash;//21457, String id;//2024120515170600010, String orgName;//IMG_20241205063339310, String webPath;//http://127.0.0.1:54321/webfiles/webFile4/photo/20241205/2412051517050000.jpg, String webPathZip;//http://127.0.0.1:54321/webfiles/webFile4/photo/20241205/2412051517050000_.jpg public String getDownloadPath() { return downloadPath; } public void setDownloadPath(String downloadPath) { this.downloadPath = downloadPath; } public String getExtName() { return extName; } public void setExtName(String extName) { this.extName = extName; } public String getHash() { return hash; } public void setHash(String hash) { this.hash = hash; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getOrgName() { return orgName; } public void setOrgName(String orgName) { this.orgName = orgName; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } public String getWebPathZip() { return webPathZip; } public void setWebPathZip(String webPathZip) { this.webPathZip = webPathZip; } } app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileState.java
@@ -1,7 +1,5 @@ package com.dayu.pipirrapp.bean.net; import java.io.File; /** * Copyright (C), 2023, * Author: zuo @@ -10,9 +8,10 @@ */ public class UplodFileState { int state = 0;//0正在上传 1上传完成 2上传失败 File file;//上传的文件 String url;//上传文件后返回的url String filePath;//上传的文件 int number;//失败后重试的次数 String id;//上传后的id String webPath;//上传后的地址 public int getNumber() { return number; @@ -26,10 +25,6 @@ } public UplodFileState(File file) { this.file = file; } public int getState() { return state; } @@ -38,19 +33,27 @@ this.state = state; } public File getFile() { return file; public String getFilePath() { return filePath; } public void setFile(File file) { this.file = file; public void setFilePath(String filePath) { this.filePath = filePath; } public String getUrl() { return url; public String getId() { return id; } public void setUrl(String url) { this.url = url; public void setId(String id) { this.id = id; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } } app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -450,12 +450,6 @@ }); } /** * 开始巡检 */ private void startInspection() { } /** app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java
@@ -57,7 +57,6 @@ confirmDialog1.dismiss(); CleanDataUtils.cleanUserData(MyFragment.this.getContext()); Intent intent = new Intent(MyFragment.this.getContext(), LoginActivity.class); MyFragment.this.getActivity().startActivity(intent); MyFragment.this.getActivity().finish(); } catch (Exception e) { app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
@@ -3,15 +3,16 @@ import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.activity.OrderDetailActivity; import com.dayu.pipirrapp.adapter.OrderAdapter; @@ -27,8 +28,6 @@ import com.scwang.smart.refresh.footer.ClassicsFooter; import com.scwang.smart.refresh.header.ClassicsHeader; import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener; import com.scwang.smart.refresh.layout.listener.OnRefreshListener; import java.util.ArrayList; import java.util.HashMap; @@ -169,7 +168,7 @@ params.put("pageSize", pageSize); params.put("pageCurr", page); params.put("state", state); // params.put("inspectorId", MyApplication.myApplication.userId); params.put("inspectorId", MyApplication.myApplication.userId); ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/app/workOrder/getWorkOrders", OrderListResult.class, params, new SubscriberListener<BaseResponse<OrderListResult>>() { @Override @@ -210,9 +209,12 @@ }); } public void startDetail(String id) { public void startDetail(String workOrderId, String proResultId) { Intent intent = new Intent(this.getContext(), OrderDetailActivity.class); intent.putExtra("workOrderId", id); intent.putExtra("workOrderId", workOrderId); if (!TextUtils.isEmpty(proResultId)) { intent.putExtra("proResultId", proResultId); } startActivity(intent); } app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
@@ -1,9 +1,13 @@ package com.dayu.pipirrapp.net; import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; import android.content.Context; import android.content.Intent; import android.util.Log; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.activity.LoginActivity; import com.dayu.pipirrapp.bean.net.CodeResult; import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.bean.net.WeatherResponse; @@ -11,11 +15,18 @@ import com.dayu.pipirrapp.net.subscribers.CodeListener; import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.net.upload.ProgressListener; import com.dayu.pipirrapp.net.upload.ProgressRequestBody; import com.dayu.pipirrapp.net.upload.UploadFileListener; import com.dayu.pipirrapp.utils.CleanDataUtils; import com.dayu.pipirrapp.utils.MapJpgUtils; import com.dayu.pipirrapp.utils.MyJsonParser; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.NetUtils; import com.google.gson.Gson; import com.google.gson.internal.LinkedTreeMap; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +135,12 @@ public BaseResponse<T> apply(Object o) { if (o instanceof BaseResponse) { BaseResponse tem = (BaseResponse) o; if (tem.getCode().equals("0000")) { //当code为0000是跳转到登录界面 tem.setMsg("登录失效请重新登录"); redirectToLogin(); return tem; } BaseResponse<T> response = new BaseResponse<>(); response.setCode(tem.getCode()); response.setMsg(tem.getMsg()); @@ -261,34 +278,44 @@ * 上传文件 * * @param context * @param file * @param uplodData * @param listener */ public void uploadFile(final Context context, final UplodFileState file, final UploadFileListener listener) { public void uploadFile(final Context context, final UplodFileState uplodData, final UploadFileListener listener) { // 创建 RequestBody,用于封装构建RequestBody RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file.getFile()); // MultipartBody.Part 和后端约定好Key,这里的partName是用image MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getFile().getName(), requestFile); // 添加描述 String descriptionString = "hello, 这是文件描述"; RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString); apiService.uploadFile(description, body).enqueue(new Callback<BaseResponse>() { File file = new File(uplodData.getFilePath()); RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); ProgressRequestBody progressRequestBody = new ProgressRequestBody(requestBody, new ProgressListener() { @Override public void onProgress(long bytesWritten, long contentLength, boolean done) { // 更新进度条或进行其他操作 int progress = (int) (100 * bytesWritten / contentLength); // 例如:更新 ProgressBar 或显示进度 runOnUiThread(() -> { // 进度条更新代码 // progressBar.setProgress(progress); MyLog.d("progressRequestBody>>>" + "上传进度: " + progress + "%"); }); } }); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), progressRequestBody); RequestBody description = RequestBody.create(MediaType.parse("text/plain"), "file description"); apiService.uploadFile(body, description).enqueue(new Callback<BaseResponse>() { @Override public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) { if (response.body() != null) { if (response.body().isSuccess()) { file.setState(1); file.setUrl(response.body().getMsg()); listener.onBack(file); uplodData.setState(1); uplodData.setId(((LinkedTreeMap) response.body().getContent()).get("id").toString()); uplodData.setWebPath(((LinkedTreeMap) response.body().getContent()).get("webPath").toString()); listener.onBack(uplodData); } else { if (file.getNumber() <= uplodFilerepeatSize) { file.setNumber(file.getNumber() + 1); file.setState(2); uploadFile(context, file, listener); if (uplodData.getNumber() <= uplodFilerepeatSize) { uplodData.setNumber(uplodData.getNumber() + 1); uplodData.setState(2); uploadFile(context, uplodData, listener); } else { listener.onBack(file); listener.onBack(uplodData); } } } @@ -296,16 +323,44 @@ @Override public void onFailure(Call<BaseResponse> call, Throwable t) { if (file.getNumber() <= uplodFilerepeatSize) { file.setNumber(file.getNumber() + 1); file.setState(2); uploadFile(context, file, listener); if (uplodData.getNumber() <= uplodFilerepeatSize) { uplodData.setNumber(uplodData.getNumber() + 1); uplodData.setState(2); uploadFile(context, uplodData, listener); } else { listener.onBack(file); listener.onBack(uplodData); } } }); } /** * 判断当前code是否是未登录状态 * * @param responseBody the response body in JSON format * @return true if login is required, false otherwise */ private boolean isLoginRequired(String responseBody) { try { Gson gson = new Gson(); Map<String, Object> responseMap = gson.fromJson(responseBody, Map.class); String code = (String) responseMap.get("code"); return "0000".equals(code); // Check if the code is not 0000 } catch (Exception e) { e.printStackTrace(); } return false; } /** * 当code为“0000”时跳转到登录界面 */ private void redirectToLogin() { Context context = MyApplication.myApplication.getApplicationContext(); CleanDataUtils.cleanUserData(context); Intent intent = new Intent(context, LoginActivity.class); // Assuming LoginActivity is your login screen intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Clear task stack context.startActivity(intent); } } app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
@@ -58,8 +58,8 @@ Call<BaseResponse> uploadFiles(@PartMap Map<String, RequestBody> map); @Multipart @POST(Constants.BASE_URL + "app/webFile/upPhoto") Call<BaseResponse> uploadFile(@Part("description") RequestBody description, @Part MultipartBody.Part file); @POST(Constants.BASE_URL + "/app/webFile/upPhoto") Call<BaseResponse> uploadFile(@Part MultipartBody.Part file,@Part("description") RequestBody description); //获取验证码 @GET(Constants.BASE_URL+"/app/captcha/get") app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
@@ -2,9 +2,6 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.util.Log; import com.dayu.pipirrapp.utils.CommonKeyName; @@ -49,7 +46,27 @@ connectOptions.setKeepAliveInterval(60); // 设置保持连接的时间 connectOptions.setAutomaticReconnect(true); // 启用自动重连 connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); checkNetwork(); // LiveEventBus.get(CommonKeyName.NetworkCallback).observeForever(new Observer<Object>() { // @Override // public void onChanged(Object o) { // switch ((int) o) { // case NetUtils.Available: // MyLog.i("MqttManager>>>Available"); // isHasNet = true; // reconnect(); // break; // case NetUtils.Lost: // MyLog.i("MqttManager>>>Lost"); // isHasNet = false; // try { // mqttClient.disconnect(); // } catch (MqttException e) { // e.printStackTrace(); // } // break; // } // } // }); } catch (MqttException e) { e.printStackTrace(); } @@ -156,47 +173,18 @@ Log.d("MqttManager", "Reconnected to MQTT broker! isHasNet=true"); } else { Log.d("MqttManager", "isHasNet is false"); Thread.sleep(5000); reconnect(); // Thread.sleep(5000); // reconnect(); } } catch (MqttException | InterruptedException e) { try { Thread.sleep(5000); } catch (InterruptedException ex) { e.printStackTrace(); }// 每 5 秒重试一次 reconnect(); // try { // Thread.sleep(5000); // } catch (InterruptedException ex) { // e.printStackTrace(); // }// 每 5 秒重试一次 // reconnect(); } } public void checkNetwork() { NetworkRequest request = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) // 必须具备互联网能力 .build(); connectivityManager.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { super.onAvailable(network); // 网络可用时的处理逻辑 Log.d("MqttManager", "Network is available."); isHasNet = true; reconnect(); } @Override public void onLost(Network network) { super.onLost(network); // 网络丢失时的处理逻辑 Log.d("MqttManager", "Network is lost."); isHasNet = false; try { mqttClient.disconnect(); } catch (MqttException e) { e.printStackTrace(); } } }); } } app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java
@@ -39,6 +39,7 @@ e.printStackTrace(); return getNullResponse(request); } return response; } else { return getNullResponse(request); @@ -99,4 +100,7 @@ builder.message(message); return builder.build(); } } app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressListener.java
@@ -1,5 +1,5 @@ package com.dayu.pipirrapp.net.upload; public interface ProgressListener { void onProgress(long bytesWritten, long totalBytes); void onProgress(long bytesWritten, long totalBytes, boolean done); } app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressRequestBody.java
@@ -1,14 +1,14 @@ package com.dayu.pipirrapp.net.upload; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import okhttp3.MediaType; import okhttp3.RequestBody; import okio.Buffer; import okio.BufferedSink; import okio.BufferedSource; import okio.ForwardingSink; import okio.Okio; import okio.Sink; /** * ProgressRequestBody - @@ -18,36 +18,42 @@ * @since 2024-11-28 */ public class ProgressRequestBody extends RequestBody { private File file; private ProgressListener listener; private MediaType mediaType; private final RequestBody requestBody; private final ProgressListener progressListener; public ProgressRequestBody(File file, ProgressListener listener, String mimeType) { this.file = file; this.listener = listener; this.mediaType = MediaType.parse(mimeType); public ProgressRequestBody(RequestBody requestBody, ProgressListener progressListener) { this.requestBody = requestBody; this.progressListener = progressListener; } @Override public MediaType contentType() { return mediaType; return requestBody.contentType(); } @Override public long contentLength() throws IOException { return requestBody.contentLength(); } @Override public void writeTo(BufferedSink sink) throws IOException { try (FileInputStream fileInputStream = new FileInputStream(file); BufferedSource source = (BufferedSource) Okio.source(fileInputStream)) { long totalBytes = file.length(); long bytesWritten = 0; long read; byte[] buffer = new byte[2048]; while ((read = source.read(buffer)) != -1) { sink.write(buffer, 0, (int) read); bytesWritten += read; if (listener != null) { listener.onProgress(bytesWritten, totalBytes); Sink progressSink = new ForwardingSink(sink) { long totalBytesWritten = 0; @Override public void write(Buffer source, long byteCount) throws IOException { super.write(source, byteCount); totalBytesWritten += byteCount; if (progressListener != null) { progressListener.onProgress(totalBytesWritten, contentLength(),false); } } } }; BufferedSink bufferedSink = Okio.buffer(progressSink); requestBody.writeTo(bufferedSink); bufferedSink.flush(); } } app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
@@ -146,7 +146,9 @@ .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .subscribe(inspectionLocationBeans -> { postInspectionData(context, inspectionBeans, inspectionLocationBeans); if (inspectionLocationBeans != null && inspectionLocationBeans.size() > 0) { postInspectionData(context, inspectionBeans, inspectionLocationBeans); } }); }); } app/src/main/java/com/dayu/pipirrapp/utils/CommonKeyName.java
@@ -21,4 +21,6 @@ public final static String MQTTData = "MQTTData"; public final static String NetworkCallback = "NetworkCallback"; } app/src/main/java/com/dayu/pipirrapp/utils/DateUtils.java
@@ -28,5 +28,18 @@ return sdf.format(date); } /** * 返回统一格式的当前时间截止到分钟 * * @return yyyy-MM-dd HH:mm:ss */ public static String getNowDateToMMStr() { // 当前时间 Date date = new Date(); // 创建 SimpleDateFormat 对象,设置日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 格式化当前时间为字符串 return sdf.format(date); } } app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java
@@ -2,10 +2,15 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkRequest; import android.os.Build; import androidx.annotation.NonNull; import com.jeremyliao.liveeventbus.LiveEventBus; /** * NetUtils - 网络相关公共方法 @@ -16,6 +21,10 @@ */ public class NetUtils { public static final String TAG = "NetUtils"; //有网 public static final int Available = 1; //无网 public static final int Lost = 2; /** * 判断当前是否有网络 @@ -49,26 +58,52 @@ } public static void registerNetCallBack(Context context, ConnectivityManager.NetworkCallback networkCallback) { public static void registerNetCallBack(Context context) { MyLog.d("registerNetCallBack"); // 注册网络状态监听 ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 构建一个 NetworkRequest,指定感兴趣的网络类型 NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) // 监听 Wi-Fi 网络 .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)//// 监听移动数据网络 .build(); // 注册网络监听 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { cm.registerNetworkCallback(networkRequest, networkCallback); } else { // 对于较老版本,可以使用旧的方法注册网络状态监听 // ConnectivityManager.setNetworkCallback() 无法在 API 级别 24 以下使用 } cm.registerNetworkCallback(networkRequest, networkCallback); } // 注销广播接收器 public static void unregisterReceiver(Context context,ConnectivityManager.NetworkCallback networkCallback) { public static void unregisterReceiver(Context context) { MyLog.d("unregisterReceiver"); ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); cm.unregisterNetworkCallback(networkCallback); } //网络监控 static ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); // 这里可以执行网络可用后的逻辑,比如进行数据请求等 MyLog.d("networkCallback》onAvailable"); LiveEventBus.get(CommonKeyName.NetworkCallback).post(Available); } @Override public void onLost(@NonNull Network network) { super.onLost(network); // 这里可以执行网络丢失后的逻辑,比如停止数据请求等 MyLog.d("networkCallback》onLost"); LiveEventBus.get(CommonKeyName.NetworkCallback).post(Lost); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); MyLog.d("networkCallback》onCapabilitiesChanged"); } }; } app/src/main/res/drawable/order_state_finish_bg.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#1890FF" /> <corners android:radius="5dp" /> <stroke android:width="1dp" android:color="#1572C6" /> </shape> app/src/main/res/drawable/order_state_no_bg.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#F6F7FB" /> <corners android:radius="5dp" /> <stroke android:width="1dp" android:color="#ededed" /> </shape> app/src/main/res/drawable/order_state_reject_bg.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#F44336" /> <corners android:radius="5dp" /> <stroke android:width="1dp" android:color="#C23626" /> </shape> app/src/main/res/drawable/order_state_wait_bg.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#8BC34A" /> <corners android:radius="5dp" /> <stroke android:width="1dp" android:color="#4CAF50" /> </shape> app/src/main/res/layout/activity_order_deal.xml
@@ -42,11 +42,15 @@ <EditText android:id="@+id/contentET" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="" android:gravity="start" android:background="@drawable/edittext_backgroud" android:minHeight="100dp" /> android:minHeight="100dp" android:maxHeight="200dp"/> <TextView android:layout_width="wrap_content" app/src/main/res/layout/activity_order_detail.xml
@@ -11,6 +11,10 @@ <variable name="data" type="com.dayu.pipirrapp.bean.net.OrderDetailResult" /> <variable name="dealData" type="com.dayu.pipirrapp.bean.net.DealDetailResult" /> </data> <RelativeLayout @@ -27,7 +31,10 @@ android:id="@+id/ScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/title"> android:layout_above="@+id/deal_button" android:layout_below="@+id/title" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"> <LinearLayout @@ -47,8 +54,8 @@ android:id="@+id/ic_project" android:layout_width="20dp" android:layout_height="20dp" android:layout_marginRight="15dp" android:layout_centerVertical="true" android:layout_marginRight="15dp" android:src="@mipmap/icon_project" /> <TextView @@ -79,7 +86,7 @@ android:paddingTop="5dp" android:paddingRight="10dp" android:paddingBottom="5dp" android:text="@{data.state}" android:text="@{data.processingState}" android:textSize="@dimen/manage_item_text_state_size" /> @@ -278,7 +285,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="gone"> android:visibility="visible"> <TextView android:layout_width="match_parent" @@ -302,14 +309,40 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="反馈:" android:text="反馈详情:" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{data.completeCriteria}" android:text="@{dealData.content}" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="反馈时间:" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{dealData.reportTime}" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> @@ -352,8 +385,8 @@ android:layout_alignParentBottom="true" android:background="@color/title_color" android:gravity="center" android:text="处理工单" android:onClick="@{()->itemclidk.startDealActivity()}" android:text="处理工单" android:textColor="@color/white" android:textSize="@dimen/order_detail_button_size" /> app/src/main/res/layout/fragment_order.xml
@@ -156,7 +156,7 @@ android:layout_weight="1" android:background="@drawable/ic_choose_bg_whit" android:gravity="center" android:text="未解决" android:text="未完成" android:textColor="@color/title_color" android:textSize="@dimen/top_state_text_size" android:textStyle="bold" /> @@ -168,7 +168,7 @@ android:layout_margin="5dp" android:layout_weight="1" android:gravity="center" android:text="已解决" android:text="已完成" android:textColor="@color/black" android:textSize="@dimen/top_state_text_size" /> app/src/main/res/layout/item_image.xml
@@ -7,8 +7,8 @@ <ImageView android:id="@+id/thumbnailImageView" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="centerCrop"/> android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" /> </androidx.cardview.widget.CardView> app/src/main/res/layout/item_order.xml
@@ -16,7 +16,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:background="@drawable/ic_choose_gray_edge" android:onClick="@{()->itemclidk.startDetail(data.workOrderId)}" android:onClick="@{()->itemclidk.startDetail(data.workOrderId,data.proResultId)}" android:orientation="vertical" android:padding="10dp"> @@ -58,11 +58,12 @@ android:layout_centerVertical="true" android:background="@drawable/ic_edt_gray_bg" android:gravity="center" android:textColor="@color/black" android:paddingLeft="10dp" android:paddingTop="5dp" android:paddingRight="10dp" android:paddingBottom="5dp" android:text="@{data.state}" android:text="@{data.processingState}" android:textSize="@dimen/manage_item_text_state_size" />