管灌系统巡查员智能手机App
zuoxiao
2024-11-28 fbfa859ff0fe312cbb49a3345b6e3d67d574a946
1.工单列表界面
2.工单详情界面
3.处理工单界面选择图片相关
20个文件已修改
33个文件已添加
2个文件已删除
3006 ■■■■■ 已修改文件
app/build.gradle 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/proguard-rules.pro 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/js/map.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/MyApplication.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/adapter/BaseRecyclerAdapter.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/adapter/OrderAdapter.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/db/LoginBean.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/BaseListResult.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/OrderDetailResult.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/OrderListResult.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/BaseFragment.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java 302 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/listener/OnItemLongClickListener.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/net/Constants.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/tool/FullyGridLayoutManager.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/tool/GlideEngine.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/tool/RocketMQConsumer.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/utils/CommonKeyName.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/edittext_backgroud.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/ic_choose_bg_whit.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/ic_choose_gray_edge.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/ps_audio_placeholder.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/ps_image_placeholder.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/top_state_bg.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_login.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_order_deal.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_order_detail.xml 363 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_main.xml 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_map.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_my.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_order.xml 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_add_filter_image.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_image.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_no_more.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_order.xml 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_add_image.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_item_delete.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_no_more.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/icon_bottom.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/icon_project.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ps_ic_audio.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ps_ic_video.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/colors.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/dimens.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -164,11 +164,20 @@
    implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0'
    //阿里的RocketMQ
    implementation 'org.apache.rocketmq:rocketmq-client:4.9.4'
//    implementation 'org.apache.rocketmq:rocketmq-client:4.9.4'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
    //room数据库
    implementation "androidx.room:room-runtime:2.3.0"
    implementation "androidx.room:room-ktx:2.3.0"
    runtimeOnly("androidx.room:room-common:2.3.0")
    annotationProcessor "androidx.room:room-compiler:2.3.0"
    //图片
    implementation 'com.github.bumptech.glide:glide:4.11.0'
    // PictureSelector 基础 (必须图片选择)
    implementation 'io.github.lucksiege:pictureselector:v3.11.2'
    // 图片压缩 (按需引入)
    implementation 'io.github.lucksiege:compress:v3.11.2'
}
app/proguard-rules.pro
@@ -145,4 +145,11 @@
# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
-keep class com.xuexiang.xupdatedemo.entity.** { *; }
-keep class com.hjq.permissions.** {*;}
-keep class com.hjq.permissions.** {*;}
#选择图片的框架
-keep class com.luck.picture.lib.** { *; }
-keep class com.luck.lib.camerax.** { *; }
-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }
app/src/main/AndroidManifest.xml
@@ -3,6 +3,9 @@
    xmlns:tools="http://schemas.android.com/tools"
    package="com.dayu.pipirrapp">
    <!--用于进行网络定位-->
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
@@ -22,10 +25,44 @@
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明-->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.WRITE_MEDIA_STORAGE"
        tools:ignore="ProtectedPermissions" />
    <uses-permission
        android:name="android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <!--    Android 13版本适配,细化存储权限-->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <!--     模拟位置-->
    <uses-permission
        android:name="android.permission.ACCESS_MOCK_LOCATION"
        tools:ignore="MockLocation,ProtectedPermissions" />
    <queries package="${applicationId}">
        <intent>
            <action android:name="android.media.action.IMAGE_CAPTURE">
            </action>
        </intent>
        <intent>
            <action android:name="android.media.action.ACTION_VIDEO_CAPTURE">
            </action>
        </intent>
    </queries>
    <application
        android:name=".MyApplication"
@@ -66,6 +103,10 @@
            android:launchMode="singleTop">
        </activity>
        <activity android:name=".activity.OrderDetailActivity" />
        <activity android:name=".activity.OrderDealActivity" />
        <!--        <activity android:name=".activity.MainActivity" />-->
        <!-- Required since 5.2.0 -->
        <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定义的Service -->
app/src/main/assets/js/map.js
@@ -271,19 +271,22 @@
    }
    //保存定位坐标生成轨迹
    var path=[];
    function updateLocation(lat,log){
        var newPoint = new T.LatLng(latitude, longitude);
        path.push(newPoint);
        var polyline = new T.Polyline({
            path: path,  // 轨迹坐标
            strokeColor: "#FF0000",  // 轨迹颜色
            strokeWeight: 6,  // 轨迹线宽
            strokeOpacity: 0.7  // 轨迹透明度
        });
        map.addOverlay(polyline);
         // 移动地图视角到最后一个位置
         map.panTo(newPoint);
    var lineLayer = new T.Polyline([], { color: 'red', weight: 3, opacity: 0.8 });
    function updateLocation(log,lat){
        var lastLat=lat;
        const intervalId = setInterval(() => {
            lastLat=lastLat+0.0001;
            var newPoint = new T.LngLat(log,lastLat);
            path.push(newPoint);
            lineLayer.setLngLats(path);
            map.addOverLay(lineLayer);
             // 移动地图视角到最后一个位置
             map.panTo(newPoint);
        }, 500);
    }
})();
app/src/main/java/com/dayu/pipirrapp/MyApplication.java
@@ -18,6 +18,7 @@
    public static MyApplication myApplication;
    public String myTag = "-1";
    public String token;
    public String userId;
    @Override
    public void onCreate() {
app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
@@ -139,7 +139,7 @@
        data.put("type", "math");//图片类型:char-文本,math-一位数算式,math2-两位数算式
        ApiManager.getInstance().requestGetHideLoading(LoginActivity.this, BASE_URL + ":8088/app/captcha/get", CodeResult.class, data, new SubscriberListener<BaseResponse<CodeResult>>() {
        ApiManager.getInstance().requestGetHideLoading(LoginActivity.this, BASE_URL + "/app/captcha/get", CodeResult.class, data, new SubscriberListener<BaseResponse<CodeResult>>() {
            @Override
            public void onNext(BaseResponse<CodeResult> t) {
                try {
@@ -214,22 +214,26 @@
            data.put("token", token);
            data.put("code", code);
        }
        ApiManager.getInstance().requestPostLoading(LoginActivity.this, BASE_URL + ":8079/sso/sso/loginJson", LoginResult.class, data, new SubscriberListener<BaseResponse<LoginResult>>() {
        ApiManager.getInstance().requestPostLoading(LoginActivity.this, BASE_URL + "/sso/sso/loginJson", LoginResult.class, data, new SubscriberListener<BaseResponse<LoginResult>>() {
            @Override
            public void onNext(BaseResponse<LoginResult> t) {
                try {
                    if (t.isSuccess()) {
                        SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonKeyName.Token, t.getContent().getToken());
                        MyApplication.myApplication.token = t.getContent().getToken();
                        MyApplication.myApplication.userId = t.getContent().getId();
                        LoginBean loginBean = DaoSingleton.getInstance(LoginActivity.this).loginDao().findFirst();
                        if (loginBean == null) {
                            loginBean = new LoginBean();
                        }
                        loginBean.setName(t.getContent().getName());
                        loginBean.setPhone(t.getContent().getPhone());
                        loginBean.setUserID(t.getContent().getId());
                        DaoSingleton.getInstance(LoginActivity.this).loginDao().insert(loginBean);
                        SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonKeyName.isShowCode, false);
                        ToastUtil.showToastLong(LoginActivity.this, "登录成功!");
                        startMainActivity();
                    } else {
                        ToastUtil.showToast(LoginActivity.this, t.getMsg());
                        loginError++;
app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -15,6 +15,7 @@
import com.dayu.pipirrapp.fragment.OrderFragment;
import com.dayu.pipirrapp.fragment.MapFragment;
import com.dayu.pipirrapp.fragment.MyFragment;
import com.dayu.pipirrapp.net.MqttManager;
import java.util.ArrayList;
import java.util.List;
@@ -26,6 +27,7 @@
    private ActivityMainBinding binding;
    private List<Fragment> fragments = new ArrayList<>();
    private long mExitTime;
    MqttManager mqttManager;
    private enum Tab {
        ORDER, MAP, MY
@@ -40,6 +42,8 @@
        setupFragments();
        initView();
        initTab();
        mqttManager = new MqttManager(this);
        mqttManager.connect();
    }
    private void setupFragments() {
@@ -76,6 +80,13 @@
        return super.onKeyDown(keyCode, event);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //关闭MQ
        mqttManager.disconnect();
    }
    /**
     * 修改底部状态
     */
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
New file
@@ -0,0 +1,101 @@
package com.dayu.pipirrapp.activity;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
import com.dayu.pipirrapp.adapter.AddPictureAdapter;
import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
import com.dayu.pipirrapp.tool.GlideEngine;
import com.luck.picture.lib.basic.PictureSelectionModel;
import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.config.SelectModeConfig;
import com.luck.picture.lib.decoration.GridSpacingItemDecoration;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnGridItemSelectAnimListener;
import com.luck.picture.lib.interfaces.OnQueryFilterListener;
import com.luck.picture.lib.interfaces.OnSelectAnimListener;
import com.luck.picture.lib.utils.DensityUtil;
import java.util.ArrayList;
import java.util.List;
/**
 * OrderDealDetailActivity -
 * 工单处理界面
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-27
 */
public class OrderDealActivity extends BaseActivity {
    ActivityOrderDealBinding binding;
    RecyclerView mRecyclerView;
    AddPictureAdapter mAdapter;
    int maxSelectNum = 10;//最大照片
    int maxSelectVideoNum = 0;//最大视频
    private final List<LocalMedia> mData = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        initView();
    }
    void initView() {
        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);
        mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
        mRecyclerView.setAdapter(mAdapter);
        mAdapter.setOnItemClickListener(new AddPictureAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position) {
            }
            @Override
            public void openPicture() {
                mOpenPicture();
            }
        });
    }
    private void mOpenPicture() {
        // 进入相册
        PictureSelectionModel selectionModel = PictureSelector.create(this)
                .openGallery(SelectMimeType.ofImage())
                .setMaxSelectNum(maxSelectNum)
                .setMaxVideoSelectNum(maxSelectVideoNum)
                .setImageEngine(GlideEngine.createGlideEngine())
                .setSelectedData(mAdapter.getData());
        selectionModel.forResult(PictureConfig.CHOOSE_REQUEST);
    }
}
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
New file
@@ -0,0 +1,93 @@
package com.dayu.pipirrapp.activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import androidx.annotation.Nullable;
import com.dayu.pipirrapp.bean.net.OrderDetailResult;
import com.dayu.pipirrapp.databinding.ActivityOrderDetailBinding;
import com.dayu.pipirrapp.net.ApiManager;
import com.dayu.pipirrapp.net.BaseResponse;
import com.dayu.pipirrapp.net.Constants;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.view.TitleBar;
import java.util.HashMap;
import java.util.Map;
/**
 * OrderDetailActivity -
 * 工单详情界面
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-27
 */
public class OrderDetailActivity extends BaseActivity {
    ActivityOrderDetailBinding binding;
    String workOrderId;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityOrderDetailBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        new TitleBar(this).setTitleText("工单详情");
        initView();
    }
    void initView() {
        workOrderId = this.getIntent().getStringExtra("workOrderId");
        if (!TextUtils.isEmpty(workOrderId)) {
            getMarkerData(workOrderId);
        } else {
            this.finish();
            ToastUtil.showToastLong(this, "当前workOrderId为空");
        }
        binding.setItemclidk(OrderDetailActivity.this);
    }
    /**
     * 获取工单详情
     */
    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>>() {
            @Override
            public void onNext(BaseResponse<OrderDetailResult> t) {
                if (t.isSuccess()) {
                    if (t.isSuccess()) {
                        if (t.getContent() != null) {
                            binding.setData(t.getContent());
                        } else {
                            ToastUtil.showToast(OrderDetailActivity.this, t.getMsg());
                        }
                    }
                } else {
                    ToastUtil.showToast(OrderDetailActivity.this, t.getMsg());
                }
            }
            @Override
            public void onCloose() {
                super.onCloose();
            }
        });
    }
    public void startDealActivity() {
        Intent intent = new Intent(this, OrderDealActivity.class);
        intent.putExtra("workOrderId", workOrderId);
        startActivity(intent);
    }
}
app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java
@@ -12,7 +12,6 @@
import com.dayu.pipirrapp.bean.db.LoginBean;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.ActivitySplashScreenBinding;
import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
@@ -31,14 +30,17 @@
        binding = ActivitySplashScreenBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        new Handler().postDelayed(() -> {
            LoginBean loginBean = DaoSingleton.getInstance(SplashScreenActivity.this).loginDao().findFirst();
            String token = SharedPreferencesHelper.getInstance(SplashScreenActivity.this).get(CommonKeyName.Token, "");
            if (loginBean != null && !TextUtils.isEmpty(token)) {
                startMainActivity();
                MyApplication.myApplication.token = token;
            } else {
                startLoginActivity();
            }
//            LoginBean loginBean = DaoSingleton.getInstance(SplashScreenActivity.this).loginDao().findFirst();
//            String token = SharedPreferencesHelper.getInstance(SplashScreenActivity.this).get(CommonKeyName.Token, "");
//            if (loginBean != null && !TextUtils.isEmpty(token)) {
//                startMainActivity();
//                MyApplication.myApplication.token = token;
//                MyApplication.myApplication.userId = loginBean.getUserID();
//            } else {
//                startLoginActivity();
//            }
            Intent intent = new Intent(this, OrderDealActivity.class);
            startActivity(intent);
            SplashScreenActivity.this.finish();
        }, 1000);
    }
app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
New file
@@ -0,0 +1,225 @@
package com.dayu.pipirrapp.adapter;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.listener.OnItemLongClickListener;
import com.luck.picture.lib.adapter.holder.PreviewGalleryAdapter;
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.utils.DateUtils;
import java.util.ArrayList;
import java.util.List;
/**
 * AddPictureAdapter -
 * 添加图片
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-28
 */
public class AddPictureAdapter extends RecyclerView.Adapter<AddPictureAdapter.ViewHolder> {
    public static final String TAG = "PictureSelector";
    public static final int TYPE_CAMERA = 1;
    public static final int TYPE_PICTURE = 2;
    private final LayoutInflater mInflater;
    private final ArrayList<LocalMedia> list = new ArrayList<>();
    private int selectMax = 9;
    /**
     * 删除
     */
    public void delete(int position) {
        try {
            if (position != RecyclerView.NO_POSITION && list.size() > position) {
                list.remove(position);
                notifyItemRemoved(position);
                notifyItemRangeChanged(position, list.size());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public AddPictureAdapter(Context context, List<LocalMedia> result) {
        this.mInflater = LayoutInflater.from(context);
        this.list.addAll(result);
    }
    public void setSelectMax(int selectMax) {
        this.selectMax = selectMax;
    }
    public int getSelectMax() {
        return selectMax;
    }
    public ArrayList<LocalMedia> getData() {
        return list;
    }
    public void remove(int position) {
        if (position < list.size()) {
            list.remove(position);
        }
    }
    public static class ViewHolder extends RecyclerView.ViewHolder {
        ImageView mImg;
        ImageView mIvDel;
        TextView tvDuration;
        public ViewHolder(View view) {
            super(view);
            mImg = view.findViewById(R.id.fiv);
            mIvDel = view.findViewById(R.id.iv_del);
            tvDuration = view.findViewById(R.id.tv_duration);
        }
    }
    @Override
    public int getItemCount() {
        if (list.size() < selectMax) {
            return list.size() + 1;
        } else {
            return list.size();
        }
    }
    @Override
    public int getItemViewType(int position) {
        if (isShowAddItem(position)) {
            return TYPE_CAMERA;
        } else {
            return TYPE_PICTURE;
        }
    }
    /**
     * 创建ViewHolder
     */
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = mInflater.inflate(R.layout.item_add_filter_image, viewGroup, false);
        return new ViewHolder(view);
    }
    private boolean isShowAddItem(int position) {
        int size = list.size();
        return position == size;
    }
    /**
     * 设置值
     */
    @Override
    public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
        //少于MaxSize张,显示继续添加的图标
        if (getItemViewType(position) == TYPE_CAMERA) {
            viewHolder.mImg.setImageResource(R.mipmap.ic_add_image);
            viewHolder.mImg.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mItemClickListener != null) {
                        mItemClickListener.openPicture();
                    }
                }
            });
            viewHolder.mIvDel.setVisibility(View.INVISIBLE);
        } else {
            viewHolder.mIvDel.setVisibility(View.VISIBLE);
            viewHolder.mIvDel.setOnClickListener(view -> {
                int index = viewHolder.getAbsoluteAdapterPosition();
                if (index != RecyclerView.NO_POSITION && list.size() > index) {
                    list.remove(index);
                    notifyItemRemoved(index);
                    notifyItemRangeChanged(index, list.size());
                }
            });
            LocalMedia media = list.get(position);
            int chooseModel = media.getChooseModel();
            String path = media.getAvailablePath();
            long duration = media.getDuration();
            viewHolder.tvDuration.setVisibility(PictureMimeType.isHasVideo(media.getMimeType())
                    ? View.VISIBLE : View.GONE);
            if (chooseModel == SelectMimeType.ofAudio()) {
                viewHolder.tvDuration.setVisibility(View.VISIBLE);
                viewHolder.tvDuration.setCompoundDrawablesRelativeWithIntrinsicBounds
                        (R.mipmap.ps_ic_audio, 0, 0, 0);
            } else {
                viewHolder.tvDuration.setCompoundDrawablesRelativeWithIntrinsicBounds
                        (R.mipmap.ps_ic_video, 0, 0, 0);
            }
            viewHolder.tvDuration.setText(DateUtils.formatDurationTime(duration));
            if (chooseModel == SelectMimeType.ofAudio()) {
                viewHolder.mImg.setImageResource(R.drawable.ps_audio_placeholder);
            } else {
                Glide.with(viewHolder.itemView.getContext())
                        .load(PictureMimeType.isContent(path) && !media.isCut() && !media.isCompressed() ? Uri.parse(path)
                                : path)
                        .centerCrop()
                        .placeholder(R.color.app_color_f6)
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .into(viewHolder.mImg);
            }
            //itemView 的点击事件
            if (mItemClickListener != null) {
                viewHolder.itemView.setOnClickListener(v -> {
                    int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
                    mItemClickListener.onItemClick(v, adapterPosition);
                });
            }
            if (mItemLongClickListener != null) {
                viewHolder.itemView.setOnLongClickListener(v -> {
                    int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
                    mItemLongClickListener.onItemLongClick(viewHolder, adapterPosition, v);
                    return true;
                });
            }
        }
    }
    private OnItemClickListener mItemClickListener;
    public void setOnItemClickListener(OnItemClickListener l) {
        this.mItemClickListener = l;
    }
    public interface OnItemClickListener {
        /**
         * Item click event
         *
         * @param v
         * @param position
         */
        void onItemClick(View v, int position);
        /**
         * Open PictureSelector
         */
        void openPicture();
    }
    private OnItemLongClickListener mItemLongClickListener;
    public void setItemLongClickListener(OnItemLongClickListener l) {
        this.mItemLongClickListener = l;
    }
}
app/src/main/java/com/dayu/pipirrapp/adapter/BaseRecyclerAdapter.java
New file
@@ -0,0 +1,64 @@
package com.dayu.pipirrapp.adapter;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.dayu.pipirrapp.databinding.ItemNoMoreBinding;
/**
 * Copyright (C), 2023,
 * Author: zuo
 * Date: 2023-04-20 8:48
 * Description:
 */
public class BaseRecyclerAdapter<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<T> {
    /**
     * viewType--分别为item以及空view
     */
    public static final int VIEW_TYPE_ITEM = 1;
    public static final int VIEW_TYPE_EMPTY = 0;
    public int myiewType;
    @NonNull
    @Override
    public T onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return null;
    }
    @Override
    public void onBindViewHolder(@NonNull T holder, int position) {
    }
    @Override
    public int getItemCount() {
        return 0;
    }
    static class ViewHolderEmpty extends RecyclerView.ViewHolder {
        ItemNoMoreBinding mBinding;
        public ItemNoMoreBinding getBinding() {
            return mBinding;
        }
        public void setBinding(ItemNoMoreBinding binding) {
            this.mBinding = binding;
        }
        public ViewHolderEmpty(ItemNoMoreBinding itemView) {
            super(itemView.getRoot());
            this.mBinding = itemView;
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java
New file
@@ -0,0 +1,58 @@
package com.dayu.pipirrapp.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.dayu.pipirrapp.R;
/**
 * ImageAdapter -
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-27
 */
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder>{
    private String[] imageUrls;  // 图片的 URL 或本地路径
    // 构造方法
    public ImageAdapter(String[] imageUrls) {
        this.imageUrls = imageUrls;
    }
    @Override
    public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 获取布局文件
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false);
        return new ImageViewHolder(view);
    }
    @Override
    public void onBindViewHolder(ImageViewHolder holder, int position) {
        // 使用 Glide 加载图片到 ImageView 中
        Glide.with(holder.itemView.getContext())
                .load(imageUrls[position])  // 加载图片的 URL 或路径
                .thumbnail(0.1f)  // 设置缩略图比例
                .into(holder.imageView);
    }
    @Override
    public int getItemCount() {
        return imageUrls.length;
    }
    public static class ImageViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        public ImageViewHolder(View itemView) {
            super(itemView);
//            imageView = itemView.findViewById(R.id.thumbnailImageView);
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/adapter/OrderAdapter.java
New file
@@ -0,0 +1,110 @@
package com.dayu.pipirrapp.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.bean.net.OrderListResult;
import com.dayu.pipirrapp.databinding.ItemNoMoreBinding;
import com.dayu.pipirrapp.databinding.ItemOrderBinding;
import com.dayu.pipirrapp.fragment.OrderFragment;
import java.util.List;
/**
 * OrderAdapter -
 * 工单列表
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-27
 */
public class OrderAdapter extends BaseRecyclerAdapter<RecyclerView.ViewHolder> {
    List<OrderListResult.Data> recordsList;
    Context context;
    OrderFragment orderFragment;
    public OrderAdapter(Context context, List<OrderListResult.Data> recordsList, OrderFragment orderFragment) {
        this.context = context;
        this.recordsList = recordsList;
        this.orderFragment = orderFragment;
    }
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_EMPTY) {
            ItemNoMoreBinding emptyView = DataBindingUtil.inflate((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE), R.layout.item_no_more, parent, false);
            return new BaseRecyclerAdapter.ViewHolderEmpty(emptyView);
        } else {
            ItemOrderBinding binding = DataBindingUtil.inflate((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE), R.layout.item_order, parent, false);
            return new OrderAdapter.ViewHolder(binding, orderFragment);
        }
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof OrderAdapter.ViewHolder) {
            if (recordsList.size() > 0) {
                OrderListResult.Data record = recordsList.get(position);
                ((OrderAdapter.ViewHolder) holder).getBinding().setData(record);
            }
        }
    }
    @Override
    public int getItemCount() {
        //同时这里也需要添加判断,如果mData.size()为0的话,只引入一个布局,就是emptyView
        // 那么,这个recyclerView的itemCount为1
        if (recordsList != null) {
            if (recordsList.size() == 0) {
                return 1;
            }
            return recordsList.size();
        } else {
            return 1;
        }
    }
    @Override
    public int getItemViewType(int position) {
        if (recordsList != null) {
            if (recordsList.size() == 0) {
                return VIEW_TYPE_EMPTY;
            } else {
                return VIEW_TYPE_ITEM;
            }
        } else {
            return VIEW_TYPE_EMPTY;
        }
    }
    static class ViewHolder extends RecyclerView.ViewHolder {
        ItemOrderBinding mBinding;
        public ItemOrderBinding getBinding() {
            return mBinding;
        }
        public void setBinding(ItemOrderBinding binding) {
            this.mBinding = binding;
        }
        public ViewHolder(ItemOrderBinding itemView, OrderFragment orderFragment) {
            super(itemView.getRoot());
            this.mBinding = itemView;
            mBinding.setItemclidk(orderFragment);
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/bean/db/LoginBean.java
@@ -19,6 +19,15 @@
    public String phone;
    public String userID;
    public String getUserID() {
        return userID;
    }
    public void setUserID(String userID) {
        this.userID = userID;
    }
    public String getName() {
        return name;
app/src/main/java/com/dayu/pipirrapp/bean/net/BaseListResult.java
New file
@@ -0,0 +1,15 @@
package com.dayu.pipirrapp.bean.net;
/**
 * BaseListResult -
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-26
 */
public class BaseListResult {
}
app/src/main/java/com/dayu/pipirrapp/bean/net/OrderDetailResult.java
New file
@@ -0,0 +1,30 @@
package com.dayu.pipirrapp.bean.net;
/**
 * OrderDetailResult -
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-28
 */
public class OrderDetailResult {
    public String workOrderId;//工单ID
    public String dispatcherId;//派单人ID
    public String dispatcher;//派单人姓名
    public String inspectorId;//巡检员ID
    public String inspector;//巡检员姓名
    public String taskType;//任务类型
    public String taskContent;//任务内容
    public String completeCriteria;//完成标准
    public String deadLine;//要求完成时间
    public String clientReportId;//农户问题上报ID
    public String inspectorReportId;//巡检员问题上报ID
    public String completeTime;//任务完成时间
    public String dispatchTime;//派单时间
    public int rejectTimes;//驳回次数
    public String state;//工单状态
    public String processingState;//处理状态
}
app/src/main/java/com/dayu/pipirrapp/bean/net/OrderListResult.java
New file
@@ -0,0 +1,82 @@
package com.dayu.pipirrapp.bean.net;
import java.util.List;
/**
 * OrderListResult -
 * 未删除工单列表
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-26
 */
public class OrderListResult {
    int itemTotal;
    int pageCurr;
    int pageSize;
    int pageTotal;
    List<Data> obj;
    public int getItemTotal() {
        return itemTotal;
    }
    public void setItemTotal(int itemTotal) {
        this.itemTotal = itemTotal;
    }
    public int getPageCurr() {
        return pageCurr;
    }
    public void setPageCurr(int pageCurr) {
        this.pageCurr = pageCurr;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getPageTotal() {
        return pageTotal;
    }
    public void setPageTotal(int pageTotal) {
        this.pageTotal = pageTotal;
    }
    public List<Data> getObj() {
        return obj;
    }
    public void setObj(List<Data> obj) {
        this.obj = obj;
    }
    public class Data {
        public String workOrderId;//工单ID
        public String dispatcherId;//派单人ID
        public String dispatcher;//派单人姓名
        public String inspectorId;//巡检员ID
        public String inspector;//巡检员姓名
        public String taskType;//任务类型
        public String taskContent;//任务内容
        public String completeCriteria;//完成标准
        public String deadLine;//要求完成时间
        public String clientReportId;//农户问题上报ID
        public String inspectorReportId;//巡检员问题上报ID
        public String completeTime;//任务完成时间
        public String dispatchTime;//派单时间
        public int rejectTimes;//驳回次数
        public String state;//工单状态
        public String processingState;//处理状态
    }
}
app/src/main/java/com/dayu/pipirrapp/fragment/BaseFragment.java
@@ -2,6 +2,8 @@
import androidx.fragment.app.Fragment;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
/**
 * author: zuo
 * Date: 2023/12/20
@@ -9,4 +11,14 @@
 * 备注:
 */
public class BaseFragment extends Fragment {
    public void layoutFinish(RefreshLayout refreshLayout, boolean isRefresh) {
        if (refreshLayout != null) {
            if (isRefresh) {
                refreshLayout.finishRefresh();
            } else {
                refreshLayout.finishLoadMore();
            }
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -106,8 +106,10 @@
            LiveEventBus.get(CommonKeyName.locationData).observeForever(new Observer<Object>() {
                @Override
                public void onChanged(Object o) {
                    LatLonBean latLonBean = (LatLonBean) o;
                    mWebView.evaluateJavascript("javascript:updateLocation(\"" +  latLonBean.getLatitude()+ "\",\"" +  latLonBean.getLongitude()+ "\")", value -> {
                    Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude());
                    mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLatitude() + "\",\"" + latLonBean.getLongitude() + "\")", value -> {
                    });
                }
            });
@@ -200,7 +202,7 @@
     * 获取取水口列表
     */
    private void getMarkerData() {
        ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + ":8085/project/intake/all", MarkerResult.class, null, new SubscriberListener<BaseResponse<MarkerResult>>() {
        ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/project/intake/all", MarkerResult.class, null, new SubscriberListener<BaseResponse<MarkerResult>>() {
            @Override
            public void onNext(BaseResponse<MarkerResult> t) {
                if (t.isSuccess()) {
@@ -284,11 +286,7 @@
    void initView() {
        //跳转到指定位置
        binding.flyBtn.setOnClickListener(v -> {
            mWebView.evaluateJavascript("javascript:locationOverLay(116.399565,39.89432)", value -> {
            });
        });
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
@@ -346,15 +344,15 @@
        });
        //巡检按钮
        binding.inspectButton.setOnClickListener(v -> {
            if (isStartInspec){
                ConfirmDialog confirmDialog=new ConfirmDialog(MapFragment.this.getActivity(), "提示", "确认关闭巡检吗?", new View.OnClickListener() {
            if (isStartInspec) {
                ConfirmDialog confirmDialog = new ConfirmDialog(MapFragment.this.getActivity(), "提示", "确认关闭巡检吗?", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        isStartInspec = !isStartInspec;
                        chageInspecState();
                    }
                });
            }else {
            } else {
                isStartInspec = !isStartInspec;
                chageInspecState();
            }
@@ -374,7 +372,7 @@
     */
    private void getCenterPoint() {
        ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + ":8080/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() {
        ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + "/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() {
            @Override
            public void onNext(BaseResponse<CenterPointResult> t) {
                if (t.isSuccess()) {
app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java
@@ -98,6 +98,6 @@
    @Override
    public void onStart() {
        super.onStart();
        new TitleBar(MyFragment.this.getActivity()).setTitleText("我的");
    }
}
app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
@@ -1,5 +1,7 @@
package com.dayu.pipirrapp.fragment;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -8,23 +10,31 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.dayu.pipirrapp.bean.db.LatLonBean;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.activity.OrderDetailActivity;
import com.dayu.pipirrapp.adapter.OrderAdapter;
import com.dayu.pipirrapp.bean.net.OrderListResult;
import com.dayu.pipirrapp.bean.net.WeatherResponse;
import com.dayu.pipirrapp.databinding.FragmentMainBinding;
import com.dayu.pipirrapp.databinding.FragmentOrderBinding;
import com.dayu.pipirrapp.net.ApiManager;
import com.dayu.pipirrapp.utils.ImageUtils;
import com.dayu.pipirrapp.utils.MyJsonParser;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
import com.dayu.pipirrapp.view.TitleBar;
import com.dayu.pipirrapp.net.BaseResponse;
import com.dayu.pipirrapp.net.Constants;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.tencent.bugly.crashreport.CrashReport;
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.Calendar;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * author: zuo
@@ -34,89 +44,221 @@
 */
public class OrderFragment extends BaseFragment {
    FragmentMainBinding binding;
    WeatherResponse weatherResponse;
    //收到定位广播后获取天气信息
    Observer<LatLonBean> myObserver = new Observer<LatLonBean>() {
        @Override
        public void onChanged(LatLonBean latLonBean) {
            String jsonStr = SharedPreferencesHelper.getInstance(OrderFragment.this.getActivity()).get("WeatherResponse", "");
            weatherResponse = MyJsonParser.getBeanFromJson(jsonStr, WeatherResponse.class);
            if (weatherResponse == null) {
                weatherResponse = new WeatherResponse();
            }
            // 获取当前时间
            Calendar calendar = Calendar.getInstance();
            // 获取当前年月日
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1; // 注意月份是从0开始计数的,所以要加1
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            String date = year + "年" + month + "月" + day + "日";
            if (weatherResponse == null || !date.equals(weatherResponse.getDate())) {
                weatherResponse.setDate(date);
                ApiManager.getInstance().requestWeather(latLonBean.getLatitude() + ":" + latLonBean.getLongitude(), new Callback<WeatherResponse>() {
                    @Override
                    public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
    private final int STATE_DONE = 2;
    private final int STATE_UNDONE = 1;
                        if (response.isSuccessful()) {
                            weatherResponse.setResults(response.body().getResults());
                            SharedPreferencesHelper.getInstance(OrderFragment.this.getActivity()).put("WeatherResponse", weatherResponse);
                            setWeatherData(weatherResponse);
                        }
                    }
                    @Override
                    public void onFailure(Call<WeatherResponse> call, Throwable t) {
                    }
                });
            } else {
                setWeatherData(weatherResponse);
            }
            LiveEventBus.get("location", LatLonBean.class).removeObserver(myObserver);
        }
    };
    FragmentOrderBinding binding;
    OrderAdapter mAdapter;
    int page = 1;
    int pageSize = 10;
    int state = 1;
    List<OrderListResult.Data> recordsListDone = new ArrayList<>();
    List<OrderListResult.Data> recordsList = new ArrayList<>();
    /**
     * 设置天气相关信息
     *
     * @param data
     * @param
     */
    private void setWeatherData(WeatherResponse data) {
        try {
            if (data.getResults() != null) {
                binding.cityName.setText(data.getResults()[0].getLocation().getName());
                binding.time.setText(data.getDate());
                int weatherImg = ImageUtils.getWeatherDrawable(data.getResults()[0].getDaily()[0].getCode_day());
                if (weatherImg != 0) {
                    binding.weatherImg.setImageDrawable(getResources().getDrawable(weatherImg));
                }
                binding.weatherName.setText(data.getResults()[0].getDaily()[0].getText_day());
                binding.weatherTemperature.setText(data.getResults()[0].getDaily()[0].getLow() + "°C ~ " + data.getResults()[0].getDaily()[0].getHigh() + "°C");
            }
        } catch (Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
        }
    }
//    private void setWeatherData(WeatherResponse data) {
//        try {
//            if (data.getResults() != null) {
//                binding.cityName.setText(data.getResults()[0].getLocation().getName());
//                binding.time.setText(data.getDate());
//                int weatherImg = ImageUtils.getWeatherDrawable(data.getResults()[0].getDaily()[0].getCode_day());
//                if (weatherImg != 0) {
//                    binding.weatherImg.setImageDrawable(getResources().getDrawable(weatherImg));
//                }
//                binding.weatherName.setText(data.getResults()[0].getDaily()[0].getText_day());
//                binding.weatherTemperature.setText(data.getResults()[0].getDaily()[0].getLow() + "°C ~ " + data.getResults()[0].getDaily()[0].getHigh() + "°C");
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            CrashReport.postCatchedException(e);
//        }
//    }
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding = FragmentMainBinding.inflate(inflater, container, false);
        //获取到经纬度后获取天气信息
        LiveEventBus
                .get("location", LatLonBean.class)
                .observeForever(myObserver);
        binding = FragmentOrderBinding.inflate(inflater, container, false);
        initView();
        //获取定位服务传过来的坐标点
        LiveEventBus.get(CommonKeyName.MQTTData).observeForever(new Observer<Object>() {
            @Override
            public void onChanged(Object o) {
            }
        });
        return binding.getRoot();
    }
    void initView() {
        //未完成
        binding.manageStateProgress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseStateView(true);
                state = STATE_UNDONE;//1 未开始 2 已完成
            }
        });
        //已完成
        binding.manageStateFinish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseStateView(false);
                state = STATE_DONE;//1 未开始 2 已完成
            }
        });
        //未完成
        RefreshLayout myRefreshLayout = (RefreshLayout) binding.refreshLayout;
        myRefreshLayout.setRefreshHeader(new ClassicsHeader(this.getContext()));
        myRefreshLayout.setRefreshFooter(new ClassicsFooter(this.getContext()));
        myRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
//                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
                recordsList.clear();
                page = 0;
                getMarkerData(refreshlayout, true, STATE_UNDONE);
            }
        });
        myRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                page = page + 1;
                getMarkerData(refreshlayout, false, STATE_UNDONE);
            }
        });
        mAdapter = new OrderAdapter(this.getContext(), recordsList, this);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this.getContext());
        binding.recyclerView.setLayoutManager(layoutManager);
        binding.recyclerView.setAdapter(mAdapter);
        getMarkerData(myRefreshLayout, true, STATE_UNDONE);
        //已完成
        RefreshLayout myRefreshLayoutDone = (RefreshLayout) binding.refreshLayoutDone;
        myRefreshLayoutDone.setRefreshHeader(new ClassicsHeader(this.getContext()));
        myRefreshLayoutDone.setRefreshFooter(new ClassicsFooter(this.getContext()));
        myRefreshLayoutDone.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
//                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
                recordsList.clear();
                page = 0;
                getMarkerData(refreshlayout, true, STATE_DONE);
            }
        });
        myRefreshLayoutDone.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                page = page + 1;
                getMarkerData(refreshlayout, false, STATE_DONE);
            }
        });
        mAdapter = new OrderAdapter(this.getContext(), recordsListDone, this);
        LinearLayoutManager layoutManagerDone = new LinearLayoutManager(this.getContext());
        binding.recyclerViewDone.setLayoutManager(layoutManagerDone);
        binding.recyclerViewDone.setAdapter(mAdapter);
        getMarkerData(myRefreshLayoutDone, true, 2);
    }
    @Override
    public void onStart() {
        super.onStart();
        new TitleBar(OrderFragment.this.getActivity()).setTitleText("工单");
    }
    /**
     * 获取未删除工单
     */
    private void getMarkerData(RefreshLayout refreshlayout, boolean isRefresh, int state) {
        Map<String, Object> params = new HashMap<>();
        if (isRefresh) {
            page = 1;
            if (state == STATE_UNDONE) {
                recordsList.clear();
            } else {
                recordsListDone.clear();
            }
        }
        params.put("pageSize", pageSize);
        params.put("pageCurr", page);
        params.put("state", state);
//        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
            public void onNext(BaseResponse<OrderListResult> t) {
                if (t.isSuccess()) {
                    if (t.isSuccess()) {
                        if (t.getContent().getObj() != null && t.getContent().getObj().size() > 0) {
                            if (state == STATE_UNDONE) {
                                recordsList.addAll(t.getContent().getObj());
                            } else {
                                recordsListDone.addAll(t.getContent().getObj());
                            }
                            if (t.getContent().getObj().size() < pageSize) {
                                refreshlayout.finishLoadMoreWithNoMoreData();
                            }
                        } else {
                            refreshlayout.finishLoadMoreWithNoMoreData();
                        }
                    }
                } else {
                    ToastUtil.showToast(OrderFragment.this.getContext(), t.getMsg());
                }
            }
            @Override
            public void onCloose() {
                super.onCloose();
                layoutFinish(refreshlayout, isRefresh);
                mAdapter.notifyDataSetChanged();
            }
        });
    }
    public void startDetail(String id) {
        Intent intent = new Intent(this.getContext(), OrderDetailActivity.class);
        intent.putExtra("workOrderId", id);
        startActivity(intent);
    }
    /**
     * 修改进度状态
     *
     * @param state true为未完成 false为已完成
     */
    void chooseStateView(boolean state) {
        if (state) {
            binding.manageStateProgress.setTextColor(getResources().getColor(R.color.title_color));
            binding.manageStateProgress.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit));
            binding.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
            binding.manageStateFinish.setTextColor(getResources().getColor(R.color.black));
            binding.manageStateFinish.setBackground(getResources().getDrawable(R.color.title_choose_bg));
            binding.manageStateFinish.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
            binding.refreshLayout.setVisibility(View.VISIBLE);
            binding.refreshLayoutDone.setVisibility(View.GONE);
        } else {
            binding.manageStateFinish.setTextColor(getResources().getColor(R.color.title_color));
            binding.manageStateFinish.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit));
            binding.manageStateFinish.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
            binding.manageStateProgress.setTextColor(getResources().getColor(R.color.black));
            binding.manageStateProgress.setBackground(getResources().getDrawable(R.color.title_choose_bg));
            binding.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
            binding.refreshLayout.setVisibility(View.GONE);
            binding.refreshLayoutDone.setVisibility(View.VISIBLE);
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/listener/OnItemLongClickListener.java
New file
@@ -0,0 +1,14 @@
package com.dayu.pipirrapp.listener;
import android.view.View;
import androidx.recyclerview.widget.RecyclerView;
/**
 * @author:luck
 * @date:2020-01-13 17:58
 * @describe:长按事件
 */
public interface OnItemLongClickListener {
    void onItemLongClick(RecyclerView.ViewHolder holder, int position, View v);
}
app/src/main/java/com/dayu/pipirrapp/net/Constants.java
@@ -6,8 +6,8 @@
 * Description:
 */
public class Constants {
//    public static final String BASE_URL = "http://192.168.10.52";
public static final String BASE_URL = "http://192.168.40.166";
//    public static final String BASE_URL = "http://192.168.10.52:8088";
public static final String BASE_URL = "https://no253541tf71.vicp.fun";
    /**
     * 代表请求成功
     */
app/src/main/java/com/dayu/pipirrapp/net/MqttManager.java
New file
@@ -0,0 +1,202 @@
package com.dayu.pipirrapp.net;
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;
import com.jeremyliao.liveeventbus.LiveEventBus;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * MQTT相关设置
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-26
 */
public class MqttManager {
    private static final String MQTT_BROKER_URL = "tcp://115.236.153.170:30764"; // 修改为你的 broker 地址
    private static final String CLIENT_ID = "mqttx_54052fa0";
    private static final String TOPIC = "workOrder"; // 订阅的主题
    private ConnectivityManager connectivityManager;
    private MqttClient mqttClient;
    private MqttConnectOptions connectOptions;
    boolean isHasNet = false;
    public MqttManager(Context context) {
        try {
            mqttClient = new MqttClient(MQTT_BROKER_URL, CLIENT_ID, new MemoryPersistence());
            connectOptions = new MqttConnectOptions();
            connectOptions.setUserName("mqtt_yjy");
            connectOptions.setPassword("yjy".toCharArray());
            connectOptions.setCleanSession(false);
            connectOptions.setKeepAliveInterval(60); // 设置保持连接的时间
            connectOptions.setAutomaticReconnect(true);  // 启用自动重连
            connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            checkNetwork();
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
    // 连接到 MQTT broker
    public void connect() {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    if (isHasNet) {
                        mqttClient.connect(connectOptions);
                        if (mqttClient.isConnected()) {
                            Log.d("MqttManager", "Connected to MQTT broker");
                            subscribeToTopic();
                        }
                    } else {
                        reconnect();
                    }
                } catch (MqttException e) {
                    reconnect();
                    Log.e("MqttManager", "Error connecting to MQTT broker", e);
                }
            }
        });
    }
    // 订阅主题
    private void subscribeToTopic() {
        try {
            mqttClient.subscribe(TOPIC, (topic, message) -> {
                // 收到消息时的处理逻辑
                Log.d("MqttManager", "Received message:" + new String(message.getPayload()));
                //传递MQ收到的信息
                LiveEventBus.get(CommonKeyName.locationData).post(message.getPayload());
            });
            mqttClient.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable cause) {
                    Log.d("MqttManager", "connectionLost" + cause.getMessage());
                    reconnect();
                    // 处理连接丢失,可以尝试重新连接
                }
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    Log.d("MqttManager", "Received messageArrived:" + new String(message.getPayload()));
                    // 处理收到的消息
                }
                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {
                    // 处理消息发送完成
                    try {
                        Log.d("MqttManager", "deliveryComplete:" + new String(token.getMessage().toString()));
                    } catch (MqttException e) {
                        e.printStackTrace();
                    }
                }
            });
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
    // 发布消息
    public void publishMessage(String message) {
        try {
            MqttMessage mqttMessage = new MqttMessage(message.getBytes());
            mqttClient.publish(TOPIC, mqttMessage);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
    // 断开连接
    public void disconnect() {
        try {
            if (mqttClient != null && mqttClient.isConnected()) {
                mqttClient.disconnect();
                System.out.println("Disconnected from MQTT broker");
            }
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
    // 自动重连方法
    private void reconnect() {
        try {
            if (isHasNet) {
                while (!mqttClient.isConnected() && isHasNet) {
                    Log.d("MqttManager", "Attempting to reconnect...");
                    mqttClient.connect(connectOptions);  // 重试连接
                    if (mqttClient.isConnected()) {
                        Log.d("MqttManager", "Connected to MQTT broker");
                        subscribeToTopic();
                    }
                    Thread.sleep(5000);     // 每 5 秒重试一次
                }
                Log.d("MqttManager", "Reconnected to MQTT broker! isHasNet=true");
            } else {
                Log.d("MqttManager", "isHasNet is false");
                Thread.sleep(5000);
                reconnect();
            }
        } catch (MqttException | InterruptedException e) {
            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/tool/FullyGridLayoutManager.java
New file
@@ -0,0 +1,104 @@
package com.dayu.pipirrapp.tool;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/**
 * FullyGridLayoutManager -
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-28
 */
public class FullyGridLayoutManager extends GridLayoutManager {
    private final int[] mMeasuredDimension = new int[2];
    public FullyGridLayoutManager(Context context, int spanCount) {
        super(context, spanCount);
    }
    public FullyGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
        super(context, spanCount, orientation, reverseLayout);
    }
    @Override
    public void onMeasure(@NonNull RecyclerView.Recycler recycler, @NonNull RecyclerView.State state, int widthSpec, int heightSpec) {
        final int widthMode = View.MeasureSpec.getMode(widthSpec);
        final int heightMode = View.MeasureSpec.getMode(heightSpec);
        final int widthSize = View.MeasureSpec.getSize(widthSpec);
        final int heightSize = View.MeasureSpec.getSize(heightSpec);
        int width = 0;
        int height = 0;
        int count = getItemCount();
        int span = getSpanCount();
        for (int i = 0; i < count; i++) {
            measureScrapChild(recycler, i,
                    View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),
                    View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),
                    mMeasuredDimension);
            if (getOrientation() == HORIZONTAL) {
                if (i % span == 0) {
                    width = width + mMeasuredDimension[0];
                }
                if (i == 0) {
                    height = mMeasuredDimension[1];
                }
            } else {
                if (i % span == 0) {
                    height = height + mMeasuredDimension[1];
                }
                if (i == 0) {
                    width = mMeasuredDimension[0];
                }
            }
        }
        switch (widthMode) {
            case View.MeasureSpec.EXACTLY:
                width = widthSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }
        switch (heightMode) {
            case View.MeasureSpec.EXACTLY:
                height = heightSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }
        setMeasuredDimension(width, height);
    }
    final RecyclerView.State mState = new RecyclerView.State();
    private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,
                                   int heightSpec, int[] measuredDimension) {
        int itemCount = mState.getItemCount();
        if (position < itemCount) {
            try {
                View view = recycler.getViewForPosition(0);
                if (view != null) {
                    RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();
                    int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec,
                            getPaddingLeft() + getPaddingRight(), p.width);
                    int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec,
                            getPaddingTop() + getPaddingBottom(), p.height);
                    view.measure(childWidthSpec, childHeightSpec);
                    measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin;
                    measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin;
                    recycler.recycleView(view);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/tool/GlideEngine.java
New file
@@ -0,0 +1,119 @@
package com.dayu.pipirrapp.tool;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.dayu.pipirrapp.R;
import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.utils.ActivityCompatHelper;
/**
 * GlideEngine -Glide加载引擎
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-28
 */
public class GlideEngine implements ImageEngine {
    /**
     * 加载图片
     *
     * @param context   上下文
     * @param url       资源url
     * @param imageView 图片承载控件
     */
    @Override
    public void loadImage(Context context, String url, ImageView imageView) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return;
        }
        Glide.with(context)
                .load(url)
                .into(imageView);
    }
    @Override
    public void loadImage(Context context, ImageView imageView, String url, int maxWidth, int maxHeight) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return;
        }
        Glide.with(context)
                .load(url)
                .override(maxWidth, maxHeight)
                .into(imageView);
    }
    /**
     * 加载相册目录封面
     *
     * @param context   上下文
     * @param url       图片路径
     * @param imageView 承载图片ImageView
     */
    @Override
    public void loadAlbumCover(Context context, String url, ImageView imageView) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return;
        }
        Glide.with(context)
                .asBitmap()
                .load(url)
                .override(180, 180)
                .sizeMultiplier(0.5f)
                .transform(new CenterCrop(), new RoundedCorners(8))
                .placeholder(R.drawable.ps_image_placeholder)
                .into(imageView);
    }
    /**
     * 加载图片列表图片
     *
     * @param context   上下文
     * @param url       图片路径
     * @param imageView 承载图片ImageView
     */
    @Override
    public void loadGridImage(Context context, String url, ImageView imageView) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return;
        }
        Glide.with(context)
                .load(url)
                .override(200, 200)
                .centerCrop()
                .placeholder(R.drawable.ps_image_placeholder)
                .into(imageView);
    }
    @Override
    public void pauseRequests(Context context) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return;
        }
        Glide.with(context).pauseRequests();
    }
    @Override
    public void resumeRequests(Context context) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return;
        }
        Glide.with(context).resumeRequests();
    }
    private GlideEngine() {
    }
    private static final class InstanceHolder {
        static final GlideEngine instance = new GlideEngine();
    }
    public static GlideEngine createGlideEngine() {
        return InstanceHolder.instance;
    }
}
app/src/main/java/com/dayu/pipirrapp/tool/RocketMQConsumer.java
File was deleted
app/src/main/java/com/dayu/pipirrapp/utils/CommonKeyName.java
@@ -17,6 +17,8 @@
    public final static String isStartInspec = "isStartInspec";
    //定位后
    public final static String locationData="locationData";
    public final static String locationData = "locationData";
    public final static String MQTTData = "MQTTData";
}
app/src/main/res/drawable/edittext_backgroud.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 背景颜色 -->
    <solid android:color="#FFFFFF" />
    <!-- 圆角 -->
    <corners android:radius="6dp" />
    <!-- 边框 -->
    <stroke
        android:color="#CCCCCC"
        android:width="2dp" />
    <!-- 内边距 -->
    <padding
        android:left="16dp"
        android:right="16dp"
        android:top="10dp"
        android:bottom="10dp" />
</shape>
app/src/main/res/drawable/ic_choose_bg_whit.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="#ffffff" />
    <corners android:radius="5dp" />
    <stroke
        android:width="1dp"
        android:color="#ffffff" />
</shape>
app/src/main/res/drawable/ic_choose_gray_edge.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="#ffffff" />
    <corners android:radius="5dp" />
    <stroke
        android:width="1dp"
        android:color="#ededed" />
</shape>
app/src/main/res/drawable/ps_audio_placeholder.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <size
                android:width="100dp"
                android:height="100dp" />
            <solid android:color="@color/ps_color_light_grey" />
        </shape>
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/ps_ic_audio_placeholder" />
    </item>
</layer-list>
app/src/main/res/drawable/ps_image_placeholder.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <size
                android:width="100dp"
                android:height="100dp" />
            <solid android:color="@color/ps_color_light_grey" />
        </shape>
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/ps_ic_placeholder" />
    </item>
</layer-list>
app/src/main/res/drawable/top_state_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="@color/title_choose_bg" />
    <corners android:radius="5dp" />
    <stroke
        android:width="1dp"
        android:color="@color/title_choose_bg" />
</shape>
app/src/main/res/layout/activity_login.xml
@@ -45,7 +45,7 @@
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:maxLines="1"
            android:text="admin"
            android:text="dyyjy"
            android:paddingLeft="10dp"
            android:singleLine="true" />
app/src/main/res/layout/activity_order_deal.xml
New file
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="itemclidk"
            type="com.dayu.pipirrapp.fragment.OrderFragment" />
        <variable
            name="data"
            type="com.dayu.pipirrapp.bean.net.OrderListResult.Data" />
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <include
            android:id="@+id/title"
            layout="@layout/top_title" />
        <LinearLayout
            android:id="@+id/center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/deal_button"
            android:layout_below="@+id/title"
            android:orientation="vertical"
            android:padding="20dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="反馈内容:"
                android:textColor="@color/black"
                android:textSize="@dimen/order_detail_button_size" />
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:background="@drawable/edittext_backgroud"
                android:minHeight="100dp" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="提交图片:"
                android:layout_marginTop="10dp"
                android:textColor="@color/black"
                android:textSize="@dimen/order_detail_button_size" />
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:overScrollMode="never" />
        </LinearLayout>
        <TextView
            android:id="@+id/deal_button"
            android:layout_width="match_parent"
            android:layout_height="@dimen/order_detail_button_height"
            android:layout_alignParentBottom="true"
            android:background="@color/title_color"
            android:gravity="center"
            android:text="提   交"
            android:textColor="@color/white"
            android:textSize="@dimen/order_detail_button_size" />
    </RelativeLayout>
</layout>
app/src/main/res/layout/activity_order_detail.xml
New file
@@ -0,0 +1,363 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="itemclidk"
            type="com.dayu.pipirrapp.activity.OrderDetailActivity" />
        <variable
            name="data"
            type="com.dayu.pipirrapp.bean.net.OrderDetailResult" />
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <include
            android:id="@+id/title"
            layout="@layout/top_title" />
        <ScrollView
            android:id="@+id/ScrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/title">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="20dp">
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:minHeight="30dp"
                    android:orientation="horizontal">
                    <ImageView
                        android:id="@+id/ic_project"
                        android:layout_width="20dp"
                        android:layout_height="20dp"
                        android:layout_marginRight="15dp"
                        android:layout_centerVertical="true"
                        android:src="@mipmap/icon_project" />
                    <TextView
                        android:id="@+id/projectName"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_marginEnd="15dp"
                        android:layout_toStartOf="@+id/stateText"
                        android:layout_toEndOf="@+id/ic_project"
                        android:ellipsize="end"
                        android:maxLines="1"
                        android:text="@{data.taskType}"
                        android:textColor="@color/title_color"
                        android:textSize="@dimen/order_detail_text_size" />
                    <TextView
                        android:id="@+id/stateText"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:background="@drawable/ic_edt_gray_bg"
                        android:gravity="center"
                        android:paddingLeft="10dp"
                        android:paddingTop="5dp"
                        android:paddingRight="10dp"
                        android:paddingBottom="5dp"
                        android:text="@{data.state}"
                        android:textSize="@dimen/manage_item_text_state_size" />
                </RelativeLayout>
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:orientation="horizontal">
                    <TextView
                        android:id="@+id/jinduTag"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="工单ID:"
                        android:textColor="@color/manage_item_text"
                        android:textSize="@dimen/order_detail_text_size" />
                    <TextView
                        android:id="@+id/jindu"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="@{data.workOrderId}"
                        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="5dp"
                    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="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@{data.dispatcher}"
                        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="5dp"
                    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="@{data.dispatchTime}"
                        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="5dp"
                    android:gravity="center_vertical"
                    android:orientation="horizontal">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="center_vertical"
                        android:text="任务类型:"
                        android:textColor="@color/manage_item_text"
                        android:textSize="@dimen/order_detail_text_size" />
                    <TextView
                        android:id="@+id/startTime"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="@{data.taskType}"
                        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="5dp"
                    android:orientation="horizontal">
                    <TextView
                        android:id="@+id/daiShenPiTag"
                        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:id="@+id/daiShenPi"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="@{data.deadLine}"
                        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="5dp"
                    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:id="@+id/xiangMuJianCheng"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="@{data.completeCriteria}"
                        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="5dp"
                    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:id="@+id/xiangMuType"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="@{data.taskContent}"
                        android:textColor="@color/manage_item_text"
                        android:textSize="@dimen/order_detail_text_size" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/orderDealLL"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:visibility="gone">
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp"
                        android:gravity="center"
                        android:text="处理结果"
                        android:textColor="@color/base_blue"
                        android:textSize="@dimen/order_detail_text_size" />
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="5dp"
                        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="@{data.completeCriteria}"
                            android:textColor="@color/manage_item_text"
                            android:textSize="@dimen/order_detail_text_size" />
                    </LinearLayout>
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="10dp"
                        android:orientation="vertical">
                        <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" />
                        <androidx.recyclerview.widget.RecyclerView
                            android:id="@+id/recyclerView"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_centerInParent="true"
                            android:layout_marginTop="10dp" />
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
        <TextView
            android:id="@+id/deal_button"
            android:layout_width="match_parent"
            android:layout_height="@dimen/order_detail_button_height"
            android:layout_alignParentBottom="true"
            android:background="@color/title_color"
            android:gravity="center"
            android:text="处理工单"
            android:onClick="@{()->itemclidk.startDealActivity()}"
            android:textColor="@color/white"
            android:textSize="@dimen/order_detail_button_size" />
    </RelativeLayout>
</layout>
app/src/main/res/layout/fragment_main.xml
File was deleted
app/src/main/res/layout/fragment_map.xml
@@ -12,13 +12,7 @@
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <TextView
        android:id="@+id/flyBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="跳转到指定位置" />
    <TextView
        android:id="@+id/stateText"
app/src/main/res/layout/fragment_my.xml
@@ -7,9 +7,16 @@
    android:background="@color/bg_color">
    <include
    <TextView
        android:id="@+id/title"
        layout="@layout/top_title" />
        android:layout_width="match_parent"
        android:background="@color/title_color"
        android:textSize="@dimen/title_center_text_size"
        android:gravity="center"
        android:text="我的"
        android:textColor="@color/white"
        android:layout_height="@dimen/title_height"/>
    <View
app/src/main/res/layout/fragment_order.xml
New file
@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="activity"
            type="com.dayu.pipirrapp.fragment.OrderFragment" />
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="@dimen/title_height"
            android:background="@color/title_color"
            android:gravity="center"
            android:text="工单"
            android:textColor="@color/white"
            android:textSize="@dimen/title_center_text_size" />
        <LinearLayout
            android:id="@+id/manage_choose_ll"
            android:layout_width="match_parent"
            android:layout_height="@dimen/title_choose_height"
            android:layout_below="@+id/title"
            android:background="@color/title_choose_bg"
            android:orientation="horizontal"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:visibility="gone">
            <RelativeLayout
                android:id="@+id/choose_manage_rl"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_weight="1"
                android:background="@drawable/ic_choose_bg_whit"
                android:gravity="center_vertical"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/choose_manage_name"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_toStartOf="@+id/choose_xiangmu_right"
                    android:gravity="center"
                    android:text="全部项目"
                    android:textColor="@color/choose_grey"
                    android:textSize="@dimen/top_choose_text_size" />
                <ImageView
                    android:id="@+id/choose_xiangmu_right"
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="8dp"
                    android:src="@mipmap/icon_bottom" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/choose_pianqu_rl"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_weight="1"
                android:background="@drawable/ic_choose_bg_whit"
                android:gravity="center_vertical"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/choose_pianqu_name"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_toStartOf="@+id/choose_pianqu_right"
                    android:gravity="center"
                    android:text="全部片区"
                    android:textColor="@color/choose_grey"
                    android:textSize="@dimen/top_choose_text_size" />
                <ImageView
                    android:id="@+id/choose_pianqu_right"
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="8dp"
                    android:src="@mipmap/icon_bottom" />
            </RelativeLayout>
            <RelativeLayout
                android:id="@+id/choose_project_rl"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_weight="1"
                android:background="@drawable/ic_choose_bg_whit"
                android:gravity="center_vertical"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/choose_project_name"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_toStartOf="@+id/choose_project_right"
                    android:gravity="center"
                    android:text="全部工程"
                    android:textColor="@color/choose_grey"
                    android:textSize="@dimen/top_choose_text_size" />
                <ImageView
                    android:id="@+id/choose_project_right"
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="8dp"
                    android:src="@mipmap/icon_bottom" />
            </RelativeLayout>
        </LinearLayout>
        <LinearLayout
            android:id="@+id/manage_state_ll"
            android:layout_width="match_parent"
            android:layout_height="@dimen/top_state_height"
            android:layout_below="@+id/manage_choose_ll"
            android:layout_margin="10dp"
            android:background="@drawable/top_state_bg"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/manage_state_progress"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/ic_choose_bg_whit"
                android:gravity="center"
                android:text="未解决"
                android:textColor="@color/title_color"
                android:textSize="@dimen/top_state_text_size"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/manage_state_finish"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:gravity="center"
                android:text="已解决"
                android:textColor="@color/black"
                android:textSize="@dimen/top_state_text_size" />
        </LinearLayout>
        <ImageView
            android:id="@+id/line"
            android:layout_width="match_parent"
            android:layout_height="2px"
            android:layout_below="@+id/manage_state_ll"
            android:src="@color/line_bg" />
        <com.scwang.smart.refresh.layout.SmartRefreshLayout
            android:id="@+id/refreshLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/line">
            <com.scwang.smart.refresh.header.ClassicsHeader
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#fff"
                android:overScrollMode="never"
                android:padding="10dp" />
            <com.scwang.smart.refresh.footer.ClassicsFooter
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
        <com.scwang.smart.refresh.layout.SmartRefreshLayout
            android:id="@+id/refreshLayoutDone"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/line"
            android:visibility="gone">
            <com.scwang.smart.refresh.header.ClassicsHeader
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recyclerViewDone"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#fff"
                android:overScrollMode="never"
                android:padding="10dp" />
            <com.scwang.smart.refresh.footer.ClassicsFooter
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
    </RelativeLayout>
</layout>
app/src/main/res/layout/item_add_filter_image.xml
New file
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<com.luck.picture.lib.widget.SquareRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/fiv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:src="@color/app_color_f6" />
    <ImageView
        android:id="@+id/iv_del"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@id/fiv"
        android:layout_alignRight="@id/fiv"
        android:paddingLeft="10dp"
        android:paddingBottom="10dp"
        android:scaleType="centerInside"
        android:src="@mipmap/ic_item_delete"
        android:visibility="gone"
        tools:visibility="visible" />
    <TextView
        android:id="@+id/tv_duration"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_alignLeft="@id/fiv"
        android:layout_alignRight="@id/fiv"
        android:layout_alignBottom="@id/fiv"
        android:background="@drawable/ps_ic_shadow_bg"
        android:drawableLeft="@drawable/ps_ic_video"
        android:drawablePadding="5dp"
        android:gravity="center_vertical"
        android:paddingLeft="5dp"
        android:paddingTop="8dp"
        android:text="00:00"
        android:textColor="@color/app_color_white"
        android:textSize="11sp"
        android:visibility="gone"
        tools:visibility="visible" />
</com.luck.picture.lib.widget.SquareRelativeLayout>
app/src/main/res/layout/item_image.xml
New file
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:elevation="4dp">
    <ImageView
        android:id="@+id/thumbnailImageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="centerCrop"/>
</androidx.cardview.widget.CardView>
app/src/main/res/layout/item_no_more.xml
New file
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:gravity="center"
        android:orientation="vertical">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:src="@mipmap/ic_no_more" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="没有数据"
            android:textColor="@color/choose_grey" />
    </LinearLayout>
</layout>
app/src/main/res/layout/item_order.xml
New file
@@ -0,0 +1,282 @@
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="itemclidk"
            type="com.dayu.pipirrapp.fragment.OrderFragment" />
        <variable
            name="data"
            type="com.dayu.pipirrapp.bean.net.OrderListResult.Data" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:background="@drawable/ic_choose_gray_edge"
        android:onClick="@{()->itemclidk.startDetail(data.workOrderId)}"
        android:orientation="vertical"
        android:padding="10dp">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="30dp"
            android:orientation="horizontal">
            <ImageView
                android:id="@+id/ic_project"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:src="@mipmap/icon_project" />
            <TextView
                android:id="@+id/projectName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginEnd="15dp"
                android:layout_toStartOf="@+id/stateText"
                android:layout_toEndOf="@+id/ic_project"
                android:ellipsize="end"
                android:maxLines="1"
                android:text="@{data.taskType}"
                android:textColor="@color/title_color"
                android:textSize="@dimen/manage_item_text_size" />
            <TextView
                android:id="@+id/stateText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@drawable/ic_edt_gray_bg"
                android:gravity="center"
                android:paddingLeft="10dp"
                android:paddingTop="5dp"
                android:paddingRight="10dp"
                android:paddingBottom="5dp"
                android:text="@{data.state}"
                android:textSize="@dimen/manage_item_text_state_size" />
        </RelativeLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1">
                <TextView
                    android:id="@+id/jinduTag"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="工单ID:"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
                <TextView
                    android:id="@+id/jindu"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@{data.workOrderId}"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
            </LinearLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1">
                <TextView
                    android:id="@+id/daiShenPiTag"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="要求完成时间:"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
                <TextView
                    android:id="@+id/daiShenPi"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@{data.deadLine}"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
            </LinearLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:paddingRight="5dp">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="完成标准:"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
                <TextView
                    android:id="@+id/xiangMuJianCheng"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:text="@{data.completeCriteria}"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
            </LinearLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:paddingRight="5dp">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="任务内容:"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
                <TextView
                    android:id="@+id/xiangMuType"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:text="@{data.taskContent}"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
            </LinearLayout>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_weight="2"
                android:gravity="center_vertical"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:text="派单时间:"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
                <TextView
                    android:id="@+id/startTime"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@{data.dispatchTime}"
                    android:textColor="@color/manage_item_text"
                    android:textSize="@dimen/manage_item_text_size" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:orientation="horizontal"
                android:visibility="gone">
                <TextView
                    android:id="@+id/lookDetail"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/manage_item_btn_height"
                    android:layout_weight="1"
                    android:background="@drawable/ic_blue_background"
                    android:gravity="center"
                    android:text="查看"
                    android:textColor="@color/white"
                    android:textSize="@dimen/manage_item_btn_text_size" />
                <TextView
                    android:id="@+id/examineBtn"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/manage_item_btn_height"
                    android:layout_marginLeft="15dp"
                    android:layout_weight="1"
                    android:background="@drawable/ic_blue_background"
                    android:gravity="center"
                    android:text="审批"
                    android:textColor="@color/white"
                    android:textSize="@dimen/manage_item_btn_text_size" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</layout>
app/src/main/res/mipmap-xhdpi/ic_add_image.png
app/src/main/res/mipmap-xhdpi/ic_item_delete.png
app/src/main/res/mipmap-xhdpi/ic_no_more.png
app/src/main/res/mipmap-xhdpi/icon_bottom.png
app/src/main/res/mipmap-xhdpi/icon_project.png
app/src/main/res/mipmap-xhdpi/ps_ic_audio.png
app/src/main/res/mipmap-xhdpi/ps_ic_video.png
app/src/main/res/values/colors.xml
@@ -15,4 +15,10 @@
    <color name="line_bg">#DADADA</color>
    <color name="text_on">#BEBEBE</color>
    <color name="text_color">#696969</color>
    <color name="title_choose_bg">#D9D9D9</color>
    <color name="choose_grey">#cdcdcd</color>
    <color name="manage_item_text">#000000</color>
    <color name="manage_item_time">#AAAAAA</color>
    <color name="app_color_f6">#f6f6f6</color>
    <color name="app_color_white">#FFFFFF</color>
</resources>
app/src/main/res/values/dimens.xml
@@ -10,4 +10,19 @@
    <dimen name="dialog_btn_height">45dp</dimen>
    <dimen name="dialog_bg_margin">30dp</dimen>
    <dimen name="title_choose_height">50dp</dimen>
    <dimen name="top_choose_text_size">11sp</dimen>
    <dimen name="top_state_height">40dp</dimen>
    <dimen name="top_state_text_size">14sp</dimen>
    <dimen name="manage_item_text_size">13sp</dimen>
    <dimen name="manage_item_text_state_size">10sp</dimen>
    <dimen name="manage_item_text_time_size">10sp</dimen>
    <dimen name="manage_item_btn_height">30dp</dimen>
    <dimen name="manage_item_btn_text_size">14sp</dimen>
    <dimen name="order_detail_text_size">17sp</dimen>
    <dimen name="order_detail_button_size">17sp</dimen>
    <dimen name="order_detail_button_height">50dp</dimen>
</resources>