Forráskód Böngészése

页面优化, 取件码延迟过期逻辑

lhm 3 éve
szülő
commit
412d5b465c
38 módosított fájl, 1257 hozzáadás és 477 törlés
  1. 3 1
      app/src/main/AndroidManifest.xml
  2. 62 7
      app/src/main/java/com/emato/ich/MainActivity.java
  3. 4 0
      app/src/main/java/com/emato/ich/api/ICSPApi.java
  4. 24 0
      app/src/main/java/com/emato/ich/api/ICSPClient.java
  5. 1 0
      app/src/main/java/com/emato/ich/api/ICSPConstant.java
  6. 47 0
      app/src/main/java/com/emato/ich/api/ICSPResponseCodeEnum.java
  7. 11 0
      app/src/main/java/com/emato/ich/api/SystemConfigConstant.java
  8. 1 1
      app/src/main/java/com/emato/ich/data/SQLiteOpenHelperImpl.java
  9. 9 8
      app/src/main/java/com/emato/ich/device/DeviceControl.java
  10. 14 0
      app/src/main/java/com/emato/ich/entity/vo/TakeParcelVo.java
  11. 28 9
      app/src/main/java/com/emato/ich/fragment/ChooseCabinetFragment.java
  12. 58 38
      app/src/main/java/com/emato/ich/fragment/ExceptionFragment.java
  13. 22 18
      app/src/main/java/com/emato/ich/fragment/InputInfoFragment.java
  14. 16 6
      app/src/main/java/com/emato/ich/fragment/SendFragment.java
  15. 25 9
      app/src/main/java/com/emato/ich/fragment/SendInfoConfirmFragment.java
  16. 2 0
      app/src/main/java/com/emato/ich/fragment/SendMainFragment.java
  17. 2 0
      app/src/main/java/com/emato/ich/fragment/SendSuccessFragment.java
  18. 74 25
      app/src/main/java/com/emato/ich/fragment/TakeCodeFragment.java
  19. 2 1
      app/src/main/java/com/emato/ich/fragment/TakeFragment.java
  20. 150 0
      app/src/main/java/com/emato/ich/fragment/TakeSuccessFragment.java
  21. 2 0
      app/src/main/java/com/emato/ich/message/ICHPublishClient.java
  22. 1 0
      app/src/main/java/com/emato/ich/message/ICHSubscribeClient.java
  23. BIN
      app/src/main/res/drawable/e_mp_qrcode_8x8.jpg
  24. 98 31
      app/src/main/res/layout/fragment_choose_cabinet.xml
  25. 29 7
      app/src/main/res/layout/fragment_exception.xml
  26. 90 63
      app/src/main/res/layout/fragment_input_info.xml
  27. 19 16
      app/src/main/res/layout/fragment_main.xml
  28. 82 57
      app/src/main/res/layout/fragment_send.xml
  29. 73 52
      app/src/main/res/layout/fragment_send_info_confirm.xml
  30. 16 2
      app/src/main/res/layout/fragment_send_main.xml
  31. 19 15
      app/src/main/res/layout/fragment_send_success.xml
  32. 47 28
      app/src/main/res/layout/fragment_take.xml
  33. 99 76
      app/src/main/res/layout/fragment_take_code.xml
  34. 68 0
      app/src/main/res/layout/fragment_take_success.xml
  35. 1 5
      app/src/main/res/menu/menu_main.xml
  36. 50 0
      app/src/main/res/navigation/nav_graph.xml
  37. 2 0
      app/src/main/res/values/colors.xml
  38. 6 2
      app/src/main/res/values/strings.xml

+ 3 - 1
app/src/main/AndroidManifest.xml

@@ -17,7 +17,9 @@
             android:name=".MainActivity"
             android:label="@string/app_name"
             android:theme="@style/Theme.Ichandroid.NoActionBar"
-            android:screenOrientation="portrait">
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustUnspecified|stateHidden"
+            android:configChanges="orientation|keyboardHidden"><!-- 禁止弹出输入键盘 -->
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 

+ 62 - 7
app/src/main/java/com/emato/ich/MainActivity.java

@@ -5,18 +5,24 @@ import android.os.Build;
 import android.os.Bundle;
 
 import com.cherry.sdk.controller.callback.CmdCallback;
+import com.cherry.sdk.controller.callback.OnScanListen;
 import com.cherry.sdk.controller.utils.ScanGunKeyEventHelper;
+import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.crash.CrashApplication;
 import com.emato.ich.crash.UncaughtExceptionHandlerImpl;
 import com.emato.ich.device.DeviceControl;
 import com.emato.ich.entity.Cabinet;
 import com.emato.ich.entity.Message;
+import com.emato.ich.entity.vo.ResponseData;
+import com.emato.ich.fragment.InputInfoFragment;
 import com.emato.ich.message.ICHPublishClient;
 import com.emato.ich.message.ICHSubscribeClient;
 import com.emato.ich.message.ICHTopic;
 import com.emato.ich.utils.BaseUtils;
 import com.emato.ich.utils.Md5Utils;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.util.BeanUtil;
@@ -26,6 +32,7 @@ import androidx.appcompat.app.AppCompatActivity;
 
 import android.text.InputType;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.view.View;
 
 import androidx.fragment.app.Fragment;
@@ -44,8 +51,11 @@ import android.view.WindowManager;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.jetbrains.annotations.NotNull;
 
+import java.io.IOException;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -55,12 +65,17 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.Response;
+
 public class MainActivity extends AppCompatActivity  {
 
     private AppBarConfiguration appBarConfiguration;
     private ActivityMainBinding binding;
-    private ScanGunKeyEventHelper scanGunKeyEventHelper;
+    public ScanGunKeyEventHelper scanGunKeyEventHelper;
     private final Map<String, Bundle> bundleMap = new ConcurrentHashMap<>();
+    private final Map<String, String> configMap = new ConcurrentHashMap<>();
 
     private static final String TAG = MainActivity.class.getName();
 
@@ -80,6 +95,34 @@ public class MainActivity extends AppCompatActivity  {
         // 自动重启
         UncaughtExceptionHandlerImpl.getInstance().init(getApplication(), BuildConfig.DEBUG, true, 0, MainActivity.class);
 
+        // 获取系统配置
+        ICSPClient.getSystemConfig("", BaseUtils.getClientId(), new Callback() {
+            @Override
+            public void onFailure(@NotNull Call call, @NotNull IOException e) {
+                Log.e(TAG, "onFailure: 获取系统配置错误! 网络错误! ", e);
+            }
+
+            @Override
+            public void onResponse
+                    (@NotNull Call call, @NotNull Response response) throws IOException {
+
+                try {
+                    String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response);
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    ResponseData<Map<String, String>> readValue = objectMapper.readValue(parseResponse, new TypeReference<ResponseData<Map<String, String>>>() {
+                    });
+                    if (null != readValue && readValue.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
+                        configMap.putAll(readValue.getData());
+                        Log.i(TAG, "onResponse: 获取系统配置成功! ");
+                    } else {
+                        Log.w(TAG, "onResponse: code==>" + readValue.getCode() + ", msg==>" + readValue.getMsg());
+                    }
+                } catch (RuntimeException e) {
+                    Log.e(TAG, "onResponse: 获取系统配置错误! 未知错误! ", e);
+                }
+            }
+        });
+
         ICHPublishClient ichPublishClient = ICHPublishClient.getInstance();
 
         String clientId = BaseUtils.getClientId();
@@ -185,9 +228,17 @@ public class MainActivity extends AppCompatActivity  {
     }
 
     @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if (null != scanGunKeyEventHelper) {
+            scanGunKeyEventHelper.analysisKeyEvent(event);
+        }
+        return true;
+    }
+
+    @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         // Inflate the menu; this adds items to the action bar if it is present.
-        getMenuInflater().inflate(R.menu.menu_main, menu);
+//        getMenuInflater().inflate(R.menu.menu_main, menu);
         return true;
     }
 
@@ -196,12 +247,12 @@ public class MainActivity extends AppCompatActivity  {
         // Handle action bar item clicks here. The action bar will
         // automatically handle clicks on the Home/Up button, so long
         // as you specify a parent activity in AndroidManifest.xml.
-        int id = item.getItemId();
+//        int id = item.getItemId();
 
-        //noinspection SimplifiableIfStatement
-        if (id == R.id.action_settings) {
-            return true;
-        }
+//        //noinspection SimplifiableIfStatement
+//        if (id == R.id.action_settings) {
+//            return true;
+//        }
 
         return super.onOptionsItemSelected(item);
     }
@@ -234,4 +285,8 @@ public class MainActivity extends AppCompatActivity  {
     public Map<String, Bundle> getBundleMap() {
         return bundleMap;
     }
+
+    public Map<String, String> getConfigMap() {
+        return configMap;
+    }
 }

+ 4 - 0
app/src/main/java/com/emato/ich/api/ICSPApi.java

@@ -26,6 +26,10 @@ public enum  ICSPApi {
      * 取件接口
      */
     TAKE_PARCEL(ICSPConstant.ICSP_SERVICE + "/order/collect/takeObject", "POST"),
+    /**
+     * 获取配置
+     */
+    GET_SYSTEM_CONFIG(ICSPConstant.ICSP_SERVICE + "/config/cabinet/get", "POST"),
     ;
 
 

+ 24 - 0
app/src/main/java/com/emato/ich/api/ICSPClient.java

@@ -13,6 +13,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.jetbrains.annotations.NotNull;
 
 import java.io.IOException;
+import java.util.Date;
 import java.util.Objects;
 
 import okhttp3.Call;
@@ -133,6 +134,29 @@ public class ICSPClient {
 
     }
 
+    /**
+     * 获取系统配置
+     * @param token         凭证
+     * @param clientId      客户端id
+     * @param callback      回调
+     */
+    public static void getSystemConfig(String token, String clientId, Callback callback) {
+
+        MediaType mediaType = MediaType.parse(MEDIA_TYPE_JSON);
+        RequestBody requestBody = null;
+        try {
+            requestBody = RequestBody.create("{\"clientId\": \"" + clientId + "\"}", mediaType);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "takeParcel: 重开柜门未知错误! ", e);
+        }
+
+        Request request = postRequest(ICSPApi.GET_SYSTEM_CONFIG.getUrl(), requestBody, token);
+
+        client.newCall(request).enqueue(callback);
+
+    }
+
+
     public static String isSuccessfulAndParseResponse(Response response) {
 
         if (null != response && response.isSuccessful()) {

+ 1 - 0
app/src/main/java/com/emato/ich/api/ICSPConstant.java

@@ -3,6 +3,7 @@ package com.emato.ich.api;
 public class ICSPConstant {
 
     public static final String ICSP_SERVICE = "http://68rfyvi.nat.ipyingshe.com";
+//    public static final String ICSP_SERVICE = "http://icsp-testend.ds-bay.com";
 
     public static final String MQTT_SERVER_ADDRESS = "tcp://183.3.221.143:1883";
 }

+ 47 - 0
app/src/main/java/com/emato/ich/api/ICSPResponseCodeEnum.java

@@ -0,0 +1,47 @@
+package com.emato.ich.api;
+
+import android.view.View;
+
+import com.emato.ich.entity.vo.ResponseData;
+import com.google.android.material.snackbar.Snackbar;
+
+import java.util.Arrays;
+
+public enum ICSPResponseCodeEnum {
+
+    OK("0", ""),
+    SYSTEM_ERROR("50000", "系统异常"),
+    FILED_VALID_FAILED("50001", "参数校验失败"),
+    DELIVERER_AUTH("50003", "需要登录快递员操作才能操作"),
+    CABINET_NOT_FOUND("50004", "机柜信息不存在"),
+    DELIVERER_NOT_FOUND("50005", "投递员信息不存在"),
+    CABINET_LOCKER_NOT_AVAILABLE("50006", "暂无可用柜门"),
+    ORDER_NOT_FOUND("50007", "订单号不存在"),
+    PICK_UP_NOT_FOUND("50008", "取货码不存在");
+    ;
+
+    public static void responseHint(View view, ResponseData responseData){
+        Arrays.stream(ICSPResponseCodeEnum.values()).forEach(icspResponseCodeEnum -> {
+            if (responseData != null && !responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode()) && responseData.getCode().equals(icspResponseCodeEnum.getCode())) {
+                Snackbar.make(view, icspResponseCodeEnum.getMsg(), Snackbar.LENGTH_LONG).show();
+            }
+        });
+    }
+
+    private String code;
+
+    private String msg;
+
+    ICSPResponseCodeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 11 - 0
app/src/main/java/com/emato/ich/api/SystemConfigConstant.java

@@ -0,0 +1,11 @@
+package com.emato.ich.api;
+
+/**
+ * ICSP系统配置项
+ */
+public class SystemConfigConstant {
+
+    public static final String cabinet_take_object_reopen_time = "cabinet_take_object_reopen_time";
+
+
+}

+ 1 - 1
app/src/main/java/com/emato/ich/data/SQLiteOpenHelperImpl.java

@@ -29,7 +29,7 @@ public class SQLiteOpenHelperImpl extends SQLiteOpenHelper {
     @Override
     public void onCreate(SQLiteDatabase sqLiteDatabase) {
         // 初始化表
-        sqLiteDatabase.execSQL("CREATE TABLE person(person_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), age INTEGER)");
+        sqLiteDatabase.execSQL("");
     }
 
     @Override

+ 9 - 8
app/src/main/java/com/emato/ich/device/DeviceControl.java

@@ -12,6 +12,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -52,10 +53,10 @@ public class DeviceControl {
      * 函数用途:查询锁版版本
      */
     public static void queryVersion(int section, CmdCallback cmdCallback) {
-        Log.d(TAG, "查询锁版本开始");
+        Log.d(TAG, new Date() + "查询锁版本开始");
         DeviceResult result = new DeviceResult();
         initedInstance.queryVersion(section, cmdCallback);
-        Log.d(TAG, "查询锁版本结束");
+        Log.d(TAG, new Date() + "查询锁版本结束");
     }
 
     /**
@@ -81,9 +82,9 @@ public class DeviceControl {
      * 参数    :section,  port, CmdCallback
      */
     public static void unlockLocker(int section, int port, CmdCallback cmdCallback) {
-        Log.i(TAG, "unlockLocker: 打开柜门开始");
+        Log.i(TAG, new Date() + "unlockLocker: 打开柜门开始");
         initedInstance.unlockLocker(section, port, cmdCallback);
-        Log.i(TAG, "unlockLocker: 打开柜门结束");
+        Log.i(TAG, new Date() + "unlockLocker: 打开柜门结束");
     }
 
     /**
@@ -140,7 +141,7 @@ public class DeviceControl {
 //                try {
 //                    downLatch.await();
 //                } catch (InterruptedException e) {
-//                    Log.e(TAG, "aa: 线程中断错误!", e);
+//                    Log.e(TAG, new Date() + "aa: 线程中断错误!", e);
 //                }
 //
 //                countDownLatch.countDown();
@@ -232,7 +233,7 @@ public class DeviceControl {
 
                     lockPlateInfos.add(lockPlateInfo);
                 } catch (JsonProcessingException e) {
-                    Log.e(TAG, "queryCabinetInfo: JSON转换对象失败!", e);
+                    Log.e(TAG, new Date() + "queryCabinetInfo: JSON转换对象失败!", e);
                 }
 
             }
@@ -286,8 +287,8 @@ public class DeviceControl {
         initedInstance.hotSection(2, 1, new CmdCallback() {
             @Override
             public void onMessage(int i, String... strings) {
-                Log.d(TAG, "onMessage: " + i);
-                Log.d(TAG, "onMessage: " + Arrays.asList(strings));
+                Log.d(TAG, new Date() + "onMessage: " + i);
+                Log.d(TAG, new Date() + "onMessage: " + Arrays.asList(strings));
             }
         });
         return false;

+ 14 - 0
app/src/main/java/com/emato/ich/entity/vo/TakeParcelVo.java

@@ -6,6 +6,11 @@ public class TakeParcelVo {
 
     private String clientId;
 
+    /**
+     * "0"非重开柜门,"1"为重开柜门
+     */
+    private String reopen;
+
     public String getPickUp() {
         return pickUp;
     }
@@ -22,11 +27,20 @@ public class TakeParcelVo {
         this.clientId = clientId;
     }
 
+    public String getReopen() {
+        return reopen;
+    }
+
+    public void setReopen(String reopen) {
+        this.reopen = reopen;
+    }
+
     @Override
     public String toString() {
         return "TakeParcelVo{" +
                 "pickUp='" + pickUp + '\'' +
                 ", clientId='" + clientId + '\'' +
+                ", reopen='" + reopen + '\'' +
                 '}';
     }
 }

+ 28 - 9
app/src/main/java/com/emato/ich/fragment/ChooseCabinetFragment.java

@@ -16,6 +16,7 @@ import androidx.navigation.fragment.NavHostFragment;
 import com.emato.ich.MainActivity;
 import com.emato.ich.R;
 import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.data.CabinetTypeEnum;
 import com.emato.ich.data.DecisionEnum;
 import com.emato.ich.databinding.FragmentChooseCabinetBinding;
@@ -70,6 +71,7 @@ public class ChooseCabinetFragment extends Fragment {
             @Override
             public void onFailure(@NotNull Call call, @NotNull IOException e) {
                 // TODO 获取柜子信息失败处理
+                Snackbar.make(view, "获取柜子信息失败!网络异常!", Snackbar.LENGTH_LONG).show();
                 Log.e(TAG, "onFailure: 获取柜子信息调用失败! call: " + call.timeout().toString(), e);
             }
 
@@ -85,7 +87,7 @@ public class ChooseCabinetFragment extends Fragment {
                             ResponseData<List<CabinetInfoVo>> responseData = objectMapper.readValue(cabinetInfo, new TypeReference<ResponseData<List<CabinetInfoVo>>>() {
                             });
 
-                            if (responseData.getCode().equals("0")) {
+                            if (responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
                                 List<CabinetInfoVo> cabinetInfoVos = responseData.getData();
 
                                 cabinetInfoVos.forEach(cabinetInfoVo -> {
@@ -110,6 +112,9 @@ public class ChooseCabinetFragment extends Fragment {
                                             break;
                                     }
                                 });
+                            } else {
+                                ICSPResponseCodeEnum.responseHint(view, responseData);
+                                Log.w(TAG, "onResponse: " + responseData.getMsg());
                             }
 
                         } catch (IOException e) {
@@ -126,17 +131,27 @@ public class ChooseCabinetFragment extends Fragment {
 
         Bundle bundle = new Bundle();
         // 大柜子
-        binding.bigCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.LARGE.getType(), bundle));
+        binding.bigCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.LARGE.getType(), bundle, v));
         // 中柜子
-        binding.mediumCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.MEDIUM.getType(), bundle));
+        binding.mediumCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.MEDIUM.getType(), bundle, v));
         // 小柜子
-        binding.smallCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.SMALL.getType(), bundle));
+        binding.smallCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.SMALL.getType(), bundle, v));
         // 微小柜子
-        binding.tinyCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.MINI.getType(), bundle));
+        binding.tinyCabinetBtn.setOnClickListener(v -> preparedOrder(CabinetTypeEnum.MINI.getType(), bundle, v));
 
+        binding.returnBtn.setOnClickListener(v -> {
+            MainActivity activity = (MainActivity) getActivity();
+            activity.getBundleMap().put(ChooseCabinetFragment.class.getName(), bundle);
+            Bundle exceptionBundle = activity.getBundleMap().get(ExceptionFragment.class.getName());
+            if (null != exceptionBundle) {
+                NavHostFragment.findNavController(ChooseCabinetFragment.this).navigate(R.id.action_chooseCabinetFragment_to_exceptionFragment);
+            } else {
+                NavHostFragment.findNavController(ChooseCabinetFragment.this).navigate(R.id.action_chooseCabinetFragment_to_sendMainFragment);
+            }
+        });
     }
 
-    public void preparedOrder(String sectionType, Bundle bundle){
+    public void preparedOrder(String sectionType, Bundle bundle, View view){
 
         bundle.putString("section_type", sectionType);
         Bundle exceptionBundle = null;
@@ -163,6 +178,7 @@ public class ChooseCabinetFragment extends Fragment {
                         @Override
                         public void onFailure(@NotNull Call call, @NotNull IOException e) {
                             //
+                            Snackbar.make(view, "换柜子失败!网络异常!", Snackbar.LENGTH_LONG).show();
                             Log.e(TAG, "onFailure: 大小不合适, 换柜子更新预下单失败! ", e);
                         }
 
@@ -175,7 +191,7 @@ public class ChooseCabinetFragment extends Fragment {
                                     ObjectMapper objectMapper = new ObjectMapper();
                                     ResponseData<PreparedOrderResponseVo> responseData = objectMapper.readValue(responseStr, new TypeReference<ResponseData<PreparedOrderResponseVo>>() {});
                                     // 响应信息
-                                    if (responseData.getCode().equals("0")) {
+                                    if (responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
                                         PreparedOrderResponseVo data = responseData.getData();
                                         if (null != data) {
                                             data.setOrderSn(preparedOrderResponse.getOrderSn());
@@ -183,12 +199,13 @@ public class ChooseCabinetFragment extends Fragment {
                                             String mailNo = inputInfoBundle.getString("takeNo");
                                             bundle.putString("preparedOrderResponse", objectMapper.writeValueAsString(data));
                                             bundle.putString("takeNo", mailNo);
-                                            bundle.putString("sectionType", data.getLockerName());
+                                            bundle.putString("section_type", data.getLockerName());
 
                                             // 跳转到确认投递
                                             try {
                                                 MainActivity activity = (MainActivity) getActivity();
                                                 activity.getBundleMap().put(InputInfoFragment.class.getName(), bundle);
+                                                activity.getBundleMap().remove(ExceptionFragment.class.getName());
                                                 NavHostFragment.findNavController(ChooseCabinetFragment.this)
                                                         .navigate(R.id.action_chooseCabinetFragment_to_sendInfoConfirmFragment);
                                             } catch (RuntimeException e) {
@@ -196,12 +213,13 @@ public class ChooseCabinetFragment extends Fragment {
                                             }
                                         }
                                     } else {
+                                        ICSPResponseCodeEnum.responseHint(view, responseData);
                                         Log.e(TAG, "onResponse: ICSP返回码: " + responseData.getCode() + ", 返回信息: " + responseData.getMsg(), new RuntimeException("系统异常"));
                                     }
                                 } catch (JsonProcessingException e) {
                                     Log.e(TAG, "onResponse: 预下单转换成JSON出错! ", e);
                                 } catch (RuntimeException e) {
-                                    Log.e(TAG, "onResponse: 未知错误! ", e);
+                                    Log.e(TAG, "onResponse: 换柜子错误! ", e);
                                 }
                             });
                         }
@@ -209,6 +227,7 @@ public class ChooseCabinetFragment extends Fragment {
                 }
             } else {
                 // 为空走正常投递流程
+                activity.getBundleMap().put(ChooseCabinetFragment.class.getName(), bundle);
                 NavHostFragment.findNavController(ChooseCabinetFragment.this)
                         .navigate(R.id.action_chooseCabinetFragment_to_inputInfoFragment, bundle);
             }

+ 58 - 38
app/src/main/java/com/emato/ich/fragment/ExceptionFragment.java

@@ -15,6 +15,7 @@ import androidx.navigation.fragment.NavHostFragment;
 import com.emato.ich.MainActivity;
 import com.emato.ich.R;
 import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.data.DecisionEnum;
 import com.emato.ich.databinding.FragmentExceptionBinding;
 import com.emato.ich.entity.vo.ConfirmOrderVo;
@@ -51,8 +52,9 @@ public class ExceptionFragment extends Fragment {
 
     public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
         Bundle arguments = null;
+        MainActivity activity = null;
         try {
-            MainActivity activity = (MainActivity) getActivity();
+            activity = (MainActivity) getActivity();
             arguments = activity.getBundleMap().get(InputInfoFragment.class.getName());
         } catch (RuntimeException e) {
             Log.e(TAG, "onViewCreated: InputInfoFragment向ExceptionFragment页面传值错误! ", e);
@@ -62,24 +64,37 @@ public class ExceptionFragment extends Fragment {
         // 大小不合适
         Bundle finalArguments = arguments;
         binding.issueSize.setOnClickListener(view1 -> {
-            MainActivity activity = (MainActivity) getActivity();
+            MainActivity activity1 = (MainActivity) getActivity();
             Bundle bundle = new Bundle();
             bundle.putString("exception", "change_cabinet");
-            activity.getBundleMap().put(ExceptionFragment.class.getName(), bundle);
+            activity1.getBundleMap().put(ExceptionFragment.class.getName(), bundle);
             NavHostFragment.findNavController(ExceptionFragment.this).navigate(R.id.action_exceptionFragment_to_ChooseCabinetFragment);
         });
         // 门没开换柜门
-        binding.issueDoorNotOpen.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.REOPEN_02));
+        binding.issueDoorNotOpen.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.REOPEN_02, view1));
         // 门没开再开一次
-        binding.issueOpenAgain.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.REOPEN_03));
+        binding.issueOpenAgain.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.REOPEN_03, view1));
         // 未投递 取消
-        binding.issueCancel.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.CANCEL_11));
+        binding.issueCancel.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.CANCEL_11, view1));
         // 拿出快递 取消
-        binding.issueTakeCancel.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.CANCEL_12));
-
+        binding.issueTakeCancel.setOnClickListener(view1 -> handleExceptionScene(finalArguments, DecisionEnum.CANCEL_12, view1));
+
+        MainActivity finalActivity = activity;
+        binding.returnBtn.setOnClickListener(view1 -> {
+            Bundle bundle = finalActivity.getBundleMap().get(SendInfoConfirmFragment.class.getName());
+            if (null != bundle) {
+                // 跳转确认投递页面
+                finalActivity.getBundleMap().remove(SendInfoConfirmFragment.class.getName());
+                NavHostFragment.findNavController(ExceptionFragment.this)
+                        .navigate(R.id.action_exceptionFragment_to_sendInfoConfirmMainFragment);
+            } else {
+                NavHostFragment.findNavController(ExceptionFragment.this)
+                        .navigate(R.id.action_exceptionFragment_to_sendMainFragment);
+            }
+        });
     }
 
-    private void handleExceptionScene(Bundle bundle, DecisionEnum decisionEnum){
+    private void handleExceptionScene(Bundle bundle, DecisionEnum decisionEnum, View view){
         LocalStorage.Session session = LocalStorage.getInstance().getSession();
         if (LocalStorage.getInstance().isExpired(session)) {
             Snackbar.make(ExceptionFragment.this.requireView(), "会话已过期! 请重新登录! ", Snackbar.LENGTH_LONG).show();
@@ -125,6 +140,7 @@ public class ExceptionFragment extends Fragment {
             ICSPClient.confirmOrder(LocalStorage.getInstance().getSession().getToken(), confirmOrderVo, new Callback() {
                 @Override
                 public void onFailure(@NotNull Call call, @NotNull IOException e) {
+                    Snackbar.make(view, "发送异常处理请求失败!网络异常!", Snackbar.LENGTH_LONG).show();
                     Log.e(TAG, "onFailure: 发送异常处理请求失败! ", e);
                 }
 
@@ -137,36 +153,40 @@ public class ExceptionFragment extends Fragment {
                             String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response);
                             try {
                                 responseData = objectMapper.readValue(parseResponse, ResponseData.class);
-                                String code = responseData.getCode();
-                                Object data = responseData.getData();
-
                                 // TODO 处理异常
-                                Log.i(TAG, "onResponse: 响应码: " + code + ", 响应消息: " + responseData.getMsg());
-                                switch (decisionEnum) {
-                                    case CANCEL_11:
-                                        // 未投递 取消投递 并清空Session
-                                        LocalStorage.getInstance().cleanSession();
-                                        NavHostFragment.findNavController(ExceptionFragment.this)
-                                                .navigate(R.id.actionExceptionFragment_to_mainFragment);
-                                        break;
-                                    case CANCEL_12:
-                                        // 拿出快递 取消
-
-                                        break;
-                                    case REOPEN_01:
-                                        // 大小不合适
-
-                                        break;
-                                    case REOPEN_02:
-                                        // 门没开换柜门
-
-                                        break;
-                                    case REOPEN_03:
-                                        // 门没开再开一次
-
-                                        break;
-                                    default:
-                                        break;
+                                if (responseData != null && responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
+                                    String code = responseData.getCode();
+                                    Object data = responseData.getData();
+                                    Log.i(TAG, "onResponse: 响应码: " + code + ", 响应消息: " + responseData.getMsg());
+                                    switch (decisionEnum) {
+                                        case CANCEL_11:
+                                            // 未投递 取消投递 并清空Session
+                                            LocalStorage.getInstance().cleanSession();
+                                            NavHostFragment.findNavController(ExceptionFragment.this)
+                                                    .navigate(R.id.actionExceptionFragment_to_mainFragment);
+                                            break;
+                                        case CANCEL_12:
+                                            // 拿出快递 取消
+
+                                            break;
+                                        case REOPEN_01:
+                                            // 大小不合适
+
+                                            break;
+                                        case REOPEN_02:
+                                            // 门没开换柜门
+
+                                            break;
+                                        case REOPEN_03:
+                                            // 门没开再开一次
+
+                                            break;
+                                        default:
+                                            break;
+                                    }
+                                } else {
+                                    ICSPResponseCodeEnum.responseHint(view, responseData);
+                                    Log.w(TAG, "onResponse: " + responseData.getMsg());
                                 }
                             } catch (JsonProcessingException e) {
                                 Log.e(TAG, "onResponse: 处理异常场景: " + decisionEnum.getMsg() + ", 解析响应信息时出错! ", e);

+ 22 - 18
app/src/main/java/com/emato/ich/fragment/InputInfoFragment.java

@@ -3,6 +3,7 @@ package com.emato.ich.fragment;
 import android.os.Bundle;
 import android.text.Editable;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -19,6 +20,7 @@ import com.cherry.sdk.controller.utils.ScanGunKeyEventHelper;
 import com.emato.ich.MainActivity;
 import com.emato.ich.R;
 import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.databinding.FragmentInputInfoBinding;
 import com.emato.ich.entity.vo.ResponseData;
 import com.emato.ich.entity.vo.PreparedOrderResponseVo;
@@ -49,7 +51,6 @@ public class InputInfoFragment extends Fragment {
 
     private static final String TAG = "InputInfoFragment";
     private FragmentInputInfoBinding binding;
-    private ScanGunKeyEventHelper scanGunKeyEventHelper;
     private PreparedOrderResponseVo data;
 
     @Nullable
@@ -64,25 +65,22 @@ public class InputInfoFragment extends Fragment {
 
     public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
         Bundle arguments = null;
+        String sectionType = null;
         try {
             MainActivity activity = (MainActivity) getActivity();
             arguments = activity.getBundleMap().get(ChooseCabinetFragment.class.getName());
-        } catch (RuntimeException e) {
-            Log.e(TAG, "onViewCreated: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e);
-        }
+            sectionType = arguments.getString("section_type");
 
-        // 1. 获取页面传递的信息
-        String sectionType = arguments.getString("section_type");
-
-        // 扫描运单号
-        scanGunKeyEventHelper = new ScanGunKeyEventHelper(new OnScanListen() {
-            @Override
-            public void onScanSuccess(String s) {
+            // 扫描枪监听 扫描运单号
+            activity.scanGunKeyEventHelper = new ScanGunKeyEventHelper(s -> {
                 // 扫码成功回调
                 Log.d(TAG, "onScanSuccess: " + s);
                 binding.mailNo.setText(s);
-            }
-        });
+            });
+
+        } catch (RuntimeException e) {
+            Log.e(TAG, "onViewCreated: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e);
+        }
 
         // TODO 根据运单号调用ICSP查询oms接口, 查询取件人手机号, 暂时不做
 
@@ -90,6 +88,7 @@ public class InputInfoFragment extends Fragment {
 
         Pattern phonePattern = Pattern.compile("^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$");
         // 下单逻辑
+        String finalSectionType = sectionType;
         binding.buttonConfirm.setOnClickListener(view1 -> {
             Bundle bundle = new Bundle();
             String mailNo = binding.mailNo.getText().toString();
@@ -107,7 +106,7 @@ public class InputInfoFragment extends Fragment {
                 preparedOrderVo.setClientId(BaseUtils.getClientId());
                 preparedOrderVo.setMailNo(mailNo);
                 preparedOrderVo.setCollectorPhone(phone);
-                preparedOrderVo.setLockerType(sectionType);
+                preparedOrderVo.setLockerType(finalSectionType);
                 preparedOrderVo.setDelivererPhone(LocalStorage.getInstance().getSession().getPhone());
 
                 // 预下单
@@ -115,6 +114,7 @@ public class InputInfoFragment extends Fragment {
                     @Override
                     public void onFailure(@NotNull Call call, @NotNull IOException e) {
                         // TODO 预下单调用失败
+                        Snackbar.make(view, "请求服务器失败!网络异常!", Snackbar.LENGTH_LONG).show();
                         Log.e(TAG, "onFailure: 预下单失败! call: " + call.timeout().toString(), e);
                     }
 
@@ -127,10 +127,10 @@ public class InputInfoFragment extends Fragment {
                                 ResponseData<PreparedOrderResponseVo> responseData = objectMapper.readValue(responseStr, new TypeReference<ResponseData<PreparedOrderResponseVo>>() {});
                                 data = responseData.getData();
                                 // 响应信息
-                                if (responseData.getCode().equals("0")) {
+                                if (responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
                                     bundle.putString("preparedOrderResponse", objectMapper.writeValueAsString(data));
                                     bundle.putString("takeNo", mailNo);
-                                    bundle.putString("sectionType", sectionType);
+                                    bundle.putString("sectionType", finalSectionType);
 
                                     // 跳转到确认投递
                                     try {
@@ -142,12 +142,13 @@ public class InputInfoFragment extends Fragment {
 
                                     NavHostFragment.findNavController(InputInfoFragment.this).navigate(R.id.action_inputInfoFragment_to_sendInfoConfirmFragment);
                                 } else {
+                                    ICSPResponseCodeEnum.responseHint(view, responseData);
                                     Log.e(TAG, "onResponse: ICSP返回码: " + responseData.getCode() + ", 返回信息: " + responseData.getMsg(), new RuntimeException("系统异常"));
                                 }
                             } catch (JsonProcessingException e) {
                                 Log.e(TAG, "onResponse: 预下单转换成JSON出错! ", e);
                             } catch (RuntimeException e) {
-                                Log.e(TAG, "onResponse: 未知错误! ", e);
+                                Log.e(TAG, "onResponse: 预下单失败! ", e);
                             }
                         });
                     }
@@ -203,6 +204,7 @@ public class InputInfoFragment extends Fragment {
                     if (text.length() > 0) {
                         text.delete(text.length()-1, text.length());
                         binding.delivererPhone.setText(text, TextView.BufferType.EDITABLE);
+                        binding.delivererPhone.setSelection(binding.delivererPhone.getText().length());
                     }
                 });
             }
@@ -255,12 +257,14 @@ public class InputInfoFragment extends Fragment {
                     if (text.length() > 0) {
                         text.delete(text.length()-1, text.length());
                         binding.delivererPhoneConfirm.setText(text, TextView.BufferType.EDITABLE);
+                        binding.delivererPhoneConfirm.setSelection(binding.delivererPhoneConfirm.getText().length());
                     }
                 });
             }
         });
 
-
+        binding.returnBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(InputInfoFragment.this)
+                .navigate(R.id.action_inputInfoFragment_to_chooseCabinetFragment));
     }
 
     public PreparedOrderResponseVo getData() {

+ 16 - 6
app/src/main/java/com/emato/ich/fragment/SendFragment.java

@@ -16,6 +16,7 @@ import androidx.navigation.fragment.NavHostFragment;
 import com.emato.ich.MainActivity;
 import com.emato.ich.R;
 import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.databinding.FragmentSendBinding;
 import com.emato.ich.entity.vo.ResponseData;
 import com.emato.ich.entity.vo.ResponseTokenVo;
@@ -67,6 +68,7 @@ public class SendFragment extends Fragment {
                     @Override
                     public void onFailure(@NotNull Call call, @NotNull IOException e) {
                         // TODO 登录失败处理
+                        Snackbar.make(view1, "登录失败!网络异常!", Snackbar.LENGTH_LONG).show();
                         Log.e(TAG, "onFailure: 登录失败! call: " + call.timeout().toString(), e);
                     }
 
@@ -75,28 +77,33 @@ public class SendFragment extends Fragment {
                         ((MainActivity) getActivity()).runOnUiThread(() -> {
                             String responseStr = ICSPClient.isSuccessfulAndParseResponse(response);
                             if (!StringUtils.isNullOrEmpty(responseStr)) {
-                                // 登录成功
-                                Snackbar.make(view1, "登录成功!", Snackbar.LENGTH_LONG).show();
-
                                 try {
                                     ResponseData<ResponseTokenVo> responseData = new ObjectMapper().readValue(responseStr, new TypeReference<ResponseData<ResponseTokenVo>>() {});
                                     ResponseTokenVo data = responseData.getData();
 
-                                    if (responseData.getCode().equals("0")) {
+                                    if (responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
                                         LocalStorage.Session session = new LocalStorage.Session();
                                         session.setPhone(sendPhone);
                                         session.setTime(System.currentTimeMillis());
                                         session.setToken(data.getToken());
                                         LocalStorage.getInstance().setSession(session);
+                                        // 登录成功
+                                        Snackbar.make(view1, "登录成功!", Snackbar.LENGTH_LONG).show();
                                         NavHostFragment.findNavController(SendFragment.this).navigate(R.id.action_sendFragment_to_sendMainFragment);
                                     } else {
-                                        Snackbar.make(view1, responseData.getMsg(), Snackbar.LENGTH_LONG).show();
+                                        ICSPResponseCodeEnum.responseHint(view, responseData);
+                                        Log.w(TAG, "onResponse: " + responseData.getMsg());
                                     }
 
                                 } catch (JsonProcessingException e) {
                                     Log.e(TAG, "onViewCreated: 解析登录响应信息错误! response body: " + responseStr, e);
+                                    Snackbar.make(view1, "登录失败!", Snackbar.LENGTH_LONG).show();
                                 } catch (ClassCastException e) {
                                     Log.e(TAG, "onResponse: 解析登录响应信息类型转换错误! response body: " + responseStr, e);
+                                    Snackbar.make(view1, "登录失败!", Snackbar.LENGTH_LONG).show();
+                                } catch (RuntimeException e) {
+                                    Log.e(TAG, "onResponse: 登录失败! ", e);
+                                    Snackbar.make(view1, "登录失败!", Snackbar.LENGTH_LONG).show();
                                 }
                             } else {
                                 // 登录失败
@@ -161,6 +168,7 @@ public class SendFragment extends Fragment {
                     if (text.length() > 0) {
                         text.delete(text.length()-1, text.length());
                         binding.editTextTextPersonName5.setText(text, TextView.BufferType.EDITABLE);
+                        binding.editTextTextPersonName5.setSelection(binding.editTextTextPersonName5.getText().length());
                     }
                 });
             }
@@ -213,11 +221,13 @@ public class SendFragment extends Fragment {
                     if (text.length() > 0) {
                         text.delete(text.length()-1, text.length());
                         binding.editTextTextPersonName4.setText(text, TextView.BufferType.EDITABLE);
+                        binding.editTextTextPersonName4.setSelection(binding.editTextTextPersonName4.getText().length());
                     }
                 });
             }
         });
-
+        binding.returnBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(SendFragment.this)
+        .navigate(R.id.action_sendFragment_to_mainFragment));
     }
 
     @Override

+ 25 - 9
app/src/main/java/com/emato/ich/fragment/SendInfoConfirmFragment.java

@@ -14,6 +14,7 @@ import androidx.navigation.fragment.NavHostFragment;
 import com.emato.ich.MainActivity;
 import com.emato.ich.R;
 import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.data.DecisionEnum;
 import com.emato.ich.databinding.FragmentSendInfoConfirmBinding;
 import com.emato.ich.entity.vo.ResponseData;
@@ -52,9 +53,9 @@ public class SendInfoConfirmFragment extends Fragment {
     public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
 
         Bundle arguments = null;
-
+        MainActivity activity = null;
         try {
-            MainActivity activity = (MainActivity) getActivity();
+            activity = (MainActivity) getActivity();
             arguments = activity.getBundleMap().get(InputInfoFragment.class.getName());
         } catch (RuntimeException e) {
             Log.e(TAG, "onResponse: SendInfoConfirmFragment页面获取InputInfoFragment传值错误! ", e);
@@ -97,6 +98,7 @@ public class SendInfoConfirmFragment extends Fragment {
 //                    getActivity().runOnUiThread(() -> {
 //
 //                    });
+                    Snackbar.make(view, "投递失败!网络异常!", Snackbar.LENGTH_LONG).show();
                     Log.e(TAG, "onFailure: 确认投递失败! ", e);
                 }
 
@@ -108,17 +110,20 @@ public class SendInfoConfirmFragment extends Fragment {
                         try {
                             ResponseData responseData = objectMapper.readValue(parseResponse, ResponseData.class);
                             String code = responseData.getCode();
-                            if (code.equals("0")) {
+                            if (code.equals(ICSPResponseCodeEnum.OK.getCode())) {
                                 // TODO 确认投递成功逻辑处理
                                 Snackbar.make(view, "投递成功! ", Snackbar.LENGTH_LONG).show();
+                                NavHostFragment.findNavController(SendInfoConfirmFragment.this)
+                                        .navigate(R.id.action_sendInfoConfirmFragment_to_sendSuccessFragment);
                             } else {
                                 // TODO 确认投递失败逻辑处理
-                                Snackbar.make(view, "投递失败! 请联系工作人员! ", Snackbar.LENGTH_LONG).show();
+                                ICSPResponseCodeEnum.responseHint(view, responseData);
+                                Log.w(TAG, "onResponse: " + responseData.getMsg());
                             }
                         } catch (JsonProcessingException e) {
                             Log.e(TAG, "onResponse: 确认投递解析响应信息失败!", e);
                         } catch (RuntimeException e) {
-                            Log.e(TAG, "onResponse: 未知错误! ", e);
+                            Log.e(TAG, "onResponse: 投递失败! ", e);
                         }
                     });
                 }
@@ -126,12 +131,23 @@ public class SendInfoConfirmFragment extends Fragment {
         });
 
         // 异常页面跳转
-        binding.exceptionBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(SendInfoConfirmFragment.this)
-                                                            .navigate(R.id.action_sendInfoConfirmFragment_to_exceptionFragment));
+        MainActivity finalActivity = activity;
+        binding.exceptionBtn.setOnClickListener(view1 -> {
+            Bundle bundle = new Bundle();
+            bundle.getString("exception", "exception_page");
+            finalActivity.getBundleMap().put(SendInfoConfirmFragment.class.getName(), bundle);
+            NavHostFragment.findNavController(SendInfoConfirmFragment.this)
+                    .navigate(R.id.action_sendInfoConfirmFragment_to_exceptionFragment);
+        });
 
         // 未投递按钮
-        binding.noneSend.setOnClickListener(view1 -> NavHostFragment.findNavController(SendInfoConfirmFragment.this)
-                                                    .navigate(R.id.action_sendInfoConfirmFragment_to_exceptionFragment));
+        binding.noneSend.setOnClickListener(view1 -> {
+            Bundle bundle = new Bundle();
+            bundle.getString("exception", "exception_page");
+            finalActivity.getBundleMap().put(SendInfoConfirmFragment.class.getName(), bundle);
+            NavHostFragment.findNavController(SendInfoConfirmFragment.this)
+                    .navigate(R.id.action_sendInfoConfirmFragment_to_exceptionFragment);
+        });
 
     }
 

+ 2 - 0
app/src/main/java/com/emato/ich/fragment/SendMainFragment.java

@@ -37,6 +37,8 @@ public class SendMainFragment extends Fragment {
         // 异常处理
         binding.exceptionHandleBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(SendMainFragment.this)
                                                             .navigate(R.id.action_sendMainFragment_to_exceptionFragment));
+        binding.returnBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(SendMainFragment.this)
+        .navigate(R.id.action_sendMainFragment_to_sendFragment));
     }
 
 

+ 2 - 0
app/src/main/java/com/emato/ich/fragment/SendSuccessFragment.java

@@ -10,6 +10,7 @@ import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 import androidx.navigation.fragment.NavHostFragment;
 
+import com.emato.ich.MainActivity;
 import com.emato.ich.R;
 import com.emato.ich.databinding.FragmentSendSuccessBinding;
 import com.emato.ich.local.LocalStorage;
@@ -43,6 +44,7 @@ public class SendSuccessFragment extends Fragment {
         binding.exitAccountBtn.setOnClickListener(view1 -> {
             // 清空Session
             LocalStorage.getInstance().cleanSession();
+            ((MainActivity) getActivity()).getBundleMap().clear();
             NavHostFragment.findNavController(SendSuccessFragment.this)
                     .navigate(R.id.action_sendSuccessFragment_to_mainFragment);
         });

+ 74 - 25
app/src/main/java/com/emato/ich/fragment/TakeCodeFragment.java

@@ -11,8 +11,12 @@ import android.widget.TextView;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
+import androidx.navigation.fragment.NavHostFragment;
 
+import com.emato.ich.MainActivity;
+import com.emato.ich.R;
 import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
 import com.emato.ich.databinding.FragmentTakeCodeBinding;
 import com.emato.ich.device.DeviceControl;
 import com.emato.ich.entity.vo.ResponseData;
@@ -55,26 +59,57 @@ public class TakeCodeFragment extends Fragment {
         super.onViewCreated(view, savedInstanceState);
 
         // 选中输入框
-        binding.editTextTextPersonName6.selectAll();
+//        binding.editTextTextPersonName6.requestFocus();
 
         // 输入逻辑
         binding.editTextTextPersonName6.setOnFocusChangeListener((view1, hasFocus) -> {
             if (hasFocus) {
-                binding.takeInputButton0.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("0"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton1.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("1"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton2.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("2"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton3.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("3"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton4.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("4"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton5.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("5"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton6.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("6"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton7.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("7"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton8.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("8"), TextView.BufferType.EDITABLE));
-                binding.takeInputButton9.setOnClickListener(v -> binding.editTextTextPersonName6.setText(binding.editTextTextPersonName6.getText().append("9"), TextView.BufferType.EDITABLE));
+                binding.takeInputButton0.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"0");
+                });
+                binding.takeInputButton1.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"1");
+                });
+                binding.takeInputButton2.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"2");
+                });
+                binding.takeInputButton3.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"3");
+                });
+                binding.takeInputButton4.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"4");
+                });
+                binding.takeInputButton5.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"5");
+                });
+                binding.takeInputButton6.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"6");
+                });
+                binding.takeInputButton7.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"7");
+                });
+                binding.takeInputButton8.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"8");
+                });
+                binding.takeInputButton9.setOnClickListener(v -> {
+                    int start = binding.editTextTextPersonName6.getSelectionStart();
+                    binding.editTextTextPersonName6.getText().insert(start,"9");
+                });
                 binding.takeInputButtonCancel.setOnClickListener(v -> {
                     Editable text = binding.editTextTextPersonName6.getText();
                    if (text.length() > 0) {
                        text.delete(text.length()-1, text.length());
                        binding.editTextTextPersonName6.setText(text, TextView.BufferType.EDITABLE);
+                       binding.editTextTextPersonName6.setSelection(binding.editTextTextPersonName6.getText().length());
                    }
                 });
             }
@@ -86,10 +121,12 @@ public class TakeCodeFragment extends Fragment {
             TakeParcelVo takeParcelVo = new TakeParcelVo();
             takeParcelVo.setClientId(BaseUtils.getClientId());
             takeParcelVo.setPickUp(takeParcelCode);
-            ICSPClient.takeParcel(LocalStorage.getInstance().getSession().getToken(), takeParcelVo, new Callback() {
+            takeParcelVo.setReopen("0");
+            ICSPClient.takeParcel("", takeParcelVo, new Callback() {
                 @Override
                 public void onFailure(@NotNull Call call, @NotNull IOException e) {
                     // TODO 取件接口请求失败逻辑处理
+                    Snackbar.make(view, "取件失败!网络异常!", Snackbar.LENGTH_LONG).show();
                     Log.e(TAG, "onFailure: 取件请求失败!", e);
                 }
 
@@ -98,27 +135,39 @@ public class TakeCodeFragment extends Fragment {
                     // TODO 返回锁板和锁id, 开柜门
                     getActivity().runOnUiThread(() -> {
                         String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response);
-                        ObjectMapper objectMapper = new ObjectMapper();
-                        ResponseData responseData = null;
                         try {
-                            responseData = objectMapper.readValue(parseResponse, new TypeReference<ResponseData>() {
-                            });
-                        } catch (JsonProcessingException e) {
-                            Log.e(TAG, "onResponse: 解析取件开门响应信息失败! ", e);
+                            ObjectMapper objectMapper = new ObjectMapper();
+                            ResponseData responseData = null;
+                            try {
+                                responseData = objectMapper.readValue(parseResponse, new TypeReference<ResponseData>() {
+                                });
+                                ICSPResponseCodeEnum.responseHint(view1, responseData);
+                            } catch (JsonProcessingException e) {
+                                Log.e(TAG, "onResponse: 解析取件开门响应信息失败! ", e);
+                            } catch (RuntimeException e) {
+                                Log.e(TAG, "onResponse: 未知错误! ", e);
+                                Snackbar.make(view1, "未知错误!", Snackbar.LENGTH_LONG).show();
+                            }
+                            if (null != responseData && responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
+                                // 开门
+                                Log.i(TAG, "onResponse: 取件成功! ");
+                                Snackbar.make(view1, "取件成功!", Snackbar.LENGTH_LONG).show();
+                                Bundle bundle = new Bundle();
+                                bundle.putString("takeParcelCode", takeParcelCode);
+                                ((MainActivity) getActivity()).getBundleMap().put(TakeCodeFragment.class.getName(), bundle);
+                                NavHostFragment.findNavController(TakeCodeFragment.this).navigate(R.id.action_takeCodeFragment_to_takeSuccessFragment);
+                            }
                         } catch (RuntimeException e) {
-                            Log.e(TAG, "onResponse: 未知错误! ", e);
-                        }
-                        if (null != responseData && responseData.getCode().equals("0")) {
-                            // 开门
-                            Log.i(TAG, "onResponse: 取件成功! ");
-                            Snackbar.make(view1, "取件成功!", Snackbar.LENGTH_LONG).show();
+                            Log.e(TAG, "onResponse: 取件失败! ", e);
+                            Snackbar.make(view1, "取件失败!", Snackbar.LENGTH_LONG).show();
                         }
                     });
                 }
             });
 
         });
-
+        binding.returnBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(TakeCodeFragment.this)
+        .navigate(R.id.action_takeCodeFragment_to_takeFragment));
     }
 
     @Override

+ 2 - 1
app/src/main/java/com/emato/ich/fragment/TakeFragment.java

@@ -39,7 +39,8 @@ public class TakeFragment extends Fragment {
         // 跳转输入取件码
         binding.toInputTakeCodeBtn.setOnClickListener( view1 -> NavHostFragment.findNavController(TakeFragment.this)
                 .navigate(R.id.action_takeFragment_to_takeCodeFragment));
-
+        binding.returnBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(TakeFragment.this)
+                .navigate(R.id.action_takeFragment_to_mainFragment));
     }
 
 

+ 150 - 0
app/src/main/java/com/emato/ich/fragment/TakeSuccessFragment.java

@@ -0,0 +1,150 @@
+package com.emato.ich.fragment;
+
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.navigation.fragment.NavHostFragment;
+
+import com.emato.ich.MainActivity;
+import com.emato.ich.R;
+import com.emato.ich.api.ICSPClient;
+import com.emato.ich.api.ICSPResponseCodeEnum;
+import com.emato.ich.api.SystemConfigConstant;
+import com.emato.ich.databinding.FragmentTakeSuccessBinding;
+import com.emato.ich.entity.vo.ResponseData;
+import com.emato.ich.entity.vo.TakeParcelVo;
+import com.emato.ich.local.LocalStorage;
+import com.emato.ich.utils.BaseUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.android.material.snackbar.Snackbar;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.IOException;
+
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.Response;
+
+public class TakeSuccessFragment extends Fragment {
+
+    private static final String TAG = TakeSuccessFragment.class.getName();
+    private FragmentTakeSuccessBinding binding;
+
+    @Nullable
+    @org.jetbrains.annotations.Nullable
+    @Override
+    public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+
+        binding = FragmentTakeSuccessBinding.inflate(inflater, container, false);
+
+        return binding.getRoot();
+
+    }
+
+    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
+
+        binding.continueTakeBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(TakeSuccessFragment.this)
+        .navigate(R.id.action_takeSuccessFragment_to_takeCodeFragment));
+
+        binding.returnMainBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(TakeSuccessFragment.this)
+            .navigate(R.id.action_takeSuccessFragment_to_mainFragment));
+
+        try {
+            MainActivity activity = (MainActivity) getActivity();
+            String s = activity.getConfigMap().get(SystemConfigConstant.cabinet_take_object_reopen_time);
+            // 倒计时
+            int i = Integer.parseInt(s);
+            CountDownTimer timer = new CountDownTimer(i * 1000, 1000) {
+                @Override
+                public void onTick(long millisUntilFinished) {
+                    binding.openCabinetCountDownHint.setText(String.format("倒计时%s秒,只有一次机会,超时后不可开门!", (millisUntilFinished / 1000)));
+                }
+
+                @Override
+                public void onFinish() {
+                    binding.openCabinetCountDownHint.setText("已超时,不可开门!");
+                    binding.reOpenCabinetBtn.setEnabled(false);
+                }
+            };
+            timer.start();
+        } catch (RuntimeException e) {
+            Log.e(TAG, "onViewCreated: 倒计时未知异常! ", e);
+        }
+
+        binding.reOpenCabinetBtn.setOnClickListener(view1 -> {
+
+            // TODO 取件逻辑
+            String takeParcelCode = null;
+            MainActivity activity = null;
+            try {
+                activity = (MainActivity) getActivity();
+                Bundle bundle = activity.getBundleMap().get(TakeCodeFragment.class.getName());
+                takeParcelCode = bundle.getString("takeParcelCode");
+            } catch (RuntimeException e) {
+                Log.e(TAG, "onViewCreated: 获取TakeCodeFragment传值TakeSuccessFragment失败! ", e);
+            }
+            TakeParcelVo takeParcelVo = new TakeParcelVo();
+            takeParcelVo.setClientId(BaseUtils.getClientId());
+            takeParcelVo.setPickUp(takeParcelCode);
+            takeParcelVo.setReopen("1");
+            MainActivity finalActivity = activity;
+            ICSPClient.takeParcel(LocalStorage.getInstance().getSession().getToken(), takeParcelVo, new Callback() {
+                @Override
+                public void onFailure(@NotNull Call call, @NotNull IOException e) {
+                    // TODO 取件接口请求失败逻辑处理
+                    Snackbar.make(view, "取件失败!网络异常!", Snackbar.LENGTH_LONG).show();
+                    Log.e(TAG, "onFailure: 取件请求失败!", e);
+                }
+
+                @Override
+                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
+                    // TODO 返回锁板和锁id, 开柜门
+                    getActivity().runOnUiThread(() -> {
+                        String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response);
+                        try {
+                            ObjectMapper objectMapper = new ObjectMapper();
+                            ResponseData responseData = null;
+                            try {
+                                responseData = objectMapper.readValue(parseResponse, new TypeReference<ResponseData>() {
+                                });
+                                ICSPResponseCodeEnum.responseHint(view1, responseData);
+                            } catch (JsonProcessingException e) {
+                                Log.e(TAG, "onResponse: 解析取件开门响应信息失败! ", e);
+                            } catch (RuntimeException e) {
+                                Log.e(TAG, "onResponse: 未知错误! ", e);
+                                Snackbar.make(view1, "未知错误!", Snackbar.LENGTH_LONG).show();
+                            }
+                            if (null != responseData && responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) {
+                                // 开门
+                                Log.i(TAG, "onResponse: 取件成功! ");
+                                Snackbar.make(view1, "取件成功!", Snackbar.LENGTH_LONG).show();
+                                finalActivity.getBundleMap().remove(TakeCodeFragment.class.getName());
+                            } else {
+                                ICSPResponseCodeEnum.responseHint(view1, responseData);
+                            }
+                        } catch (RuntimeException e) {
+                            Log.e(TAG, "onResponse: 取件失败! ", e);
+                            Snackbar.make(view1, "取件失败!", Snackbar.LENGTH_LONG).show();
+                        }
+                    });
+                }
+            });
+        });
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        binding = null;
+    }
+}

+ 2 - 0
app/src/main/java/com/emato/ich/message/ICHPublishClient.java

@@ -17,6 +17,8 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.eclipse.paho.client.mqttv3.MqttTopic;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 
+import java.util.Date;
+
 /**
  * 发布客户端
  */

+ 1 - 0
app/src/main/java/com/emato/ich/message/ICHSubscribeClient.java

@@ -19,6 +19,7 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 /**
  * 订阅客户端
  */
+@Deprecated
 public class ICHSubscribeClient {
 
     public static final String TAG = "ICHSubscribeClient";

BIN
app/src/main/res/drawable/e_mp_qrcode_8x8.jpg


+ 98 - 31
app/src/main/res/layout/fragment_choose_cabinet.xml

@@ -3,76 +3,143 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
+    <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
+
     <TextView
-        android:id="@+id/tiny_cabinet"
+        android:id="@+id/tiny_cabinet_bg"
         android:layout_width="160dp"
         android:layout_height="160dp"
-        android:layout_x="29dp"
-        android:layout_y="1222dp"
+        android:layout_x="28dp"
+        android:layout_y="1224dp"
+        android:background="@color/choose_cabinet_view"
         android:gravity="center"
         android:text="@string/tiny_cabinet"
+        android:textColor="@color/white"
         android:textSize="20dp" />
 
     <TextView
-        android:id="@+id/big_cabinet"
-        android:layout_width="280dp"
-        android:layout_height="280dp"
-        android:layout_x="954dp"
-        android:layout_y="1098dp"
+        android:id="@+id/tiny_cabinet"
+        android:layout_width="160dp"
+        android:layout_height="50dp"
+        android:layout_x="28dp"
+        android:layout_y="1332dp"
+        android:background="@color/choose_cabinet_view"
         android:gravity="center"
-        android:text="@string/big_cabinet"
-        android:textSize="50dp" />
+        android:textColor="@color/white"
+        android:textSize="20dp" />
 
     <Button
-        android:id="@+id/big_cabinet_btn"
+        android:id="@+id/tiny_cabinet_btn"
         android:layout_width="115dp"
         android:layout_height="70dp"
-        android:layout_x="1045dp"
+        android:layout_x="49dp"
         android:layout_y="1416dp"
+        android:background="@drawable/button_radius"
+        android:textSize="30dp"
         android:text="@string/choose_btn" />
 
     <TextView
-        android:id="@+id/medium_cabinet"
-        android:layout_width="240dp"
-        android:layout_height="240dp"
-        android:layout_x="609dp"
-        android:layout_y="1134dp"
+        android:id="@+id/small_cabinet_bg"
+        android:layout_width="200dp"
+        android:layout_height="200dp"
+        android:layout_x="221dp"
+        android:layout_y="1184dp"
+        android:background="@color/choose_cabinet_view"
         android:gravity="center"
-        android:text="@string/medium_cabinet"
-        android:textSize="40dp" />
+        android:text="@string/small_cabinet"
+        android:textColor="@color/white"
+        android:textSize="30dp" />
+
+    <TextView
+        android:id="@+id/small_cabinet"
+        android:layout_width="200dp"
+        android:layout_height="50dp"
+        android:layout_x="220dp"
+        android:layout_y="1332dp"
+        android:gravity="center"
+        android:textColor="@color/white"
+        android:textSize="30dp" />
 
     <Button
         android:id="@+id/small_cabinet_btn"
         android:layout_width="115dp"
         android:layout_height="70dp"
-        android:layout_x="350dp"
+        android:layout_x="266dp"
         android:layout_y="1416dp"
+        android:background="@drawable/button_radius"
+        android:textSize="30dp"
         android:text="@string/choose_btn" />
 
+    <TextView
+        android:id="@+id/big_cabinet_bg"
+        android:layout_width="280dp"
+        android:layout_height="280dp"
+        android:layout_x="717dp"
+        android:layout_y="1104dp"
+        android:background="@color/choose_cabinet_view"
+        android:gravity="center"
+        android:text="@string/big_cabinet"
+        android:textColor="@color/white"
+        android:textSize="50dp" />
+
+    <TextView
+        android:id="@+id/big_cabinet"
+        android:layout_width="280dp"
+        android:layout_height="50dp"
+        android:layout_x="716dp"
+        android:layout_y="1332dp"
+        android:gravity="center"
+        android:textColor="@color/white"
+        android:textSize="30dp" />
+
     <Button
-        android:id="@+id/medium_cabinet_btn"
+        android:id="@+id/big_cabinet_btn"
         android:layout_width="115dp"
         android:layout_height="70dp"
-        android:layout_x="665dp"
+        android:layout_x="809dp"
         android:layout_y="1416dp"
+        android:background="@drawable/button_radius"
+        android:textSize="30dp"
         android:text="@string/choose_btn" />
 
     <TextView
-        android:id="@+id/small_cabinet"
-        android:layout_width="200dp"
-        android:layout_height="200dp"
-        android:layout_x="306dp"
-        android:layout_y="1180dp"
+        android:id="@+id/medium_cabinet_bg"
+        android:layout_width="240dp"
+        android:layout_height="240dp"
+        android:layout_x="447dp"
+        android:layout_y="1144dp"
+        android:background="@color/choose_cabinet_view"
         android:gravity="center"
-        android:text="@string/small_cabinet"
-        android:textSize="30dp" />
+        android:text="@string/medium_cabinet"
+        android:textColor="@color/white"
+        android:textSize="40dp" />
+
+    <TextView
+        android:id="@+id/medium_cabinet"
+        android:layout_width="240dp"
+        android:layout_height="50dp"
+        android:layout_x="447dp"
+        android:layout_y="1332dp"
+        android:gravity="center"
+        android:textSize="30dp"
+        android:textColor="@color/white"/>
 
     <Button
-        android:id="@+id/tiny_cabinet_btn"
+        android:id="@+id/medium_cabinet_btn"
         android:layout_width="115dp"
         android:layout_height="70dp"
-        android:layout_x="49dp"
+        android:layout_x="505dp"
         android:layout_y="1416dp"
+        android:background="@drawable/button_radius"
+        android:textSize="30dp"
         android:text="@string/choose_btn" />
 
 </AbsoluteLayout>

+ 29 - 7
app/src/main/res/layout/fragment_exception.xml

@@ -4,27 +4,43 @@
     android:layout_height="match_parent">
 
     <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
+
+    <Button
         android:id="@+id/issue_size"
         android:layout_width="300dp"
         android:layout_height="120dp"
         android:layout_x="109dp"
         android:layout_y="1059dp"
+        android:textSize="30dp"
+        android:background="@drawable/button_radius"
         android:text="@string/issue_size" />
 
     <Button
         android:id="@+id/issue_take_cancel"
         android:layout_width="300dp"
         android:layout_height="120dp"
-        android:layout_x="117dp"
+        android:layout_x="109dp"
         android:layout_y="1527dp"
+        android:textSize="30dp"
+        android:background="@drawable/button_radius"
         android:text="@string/issue_take_cancel" />
 
     <Button
         android:id="@+id/issue_cancel"
         android:layout_width="300dp"
         android:layout_height="120dp"
-        android:layout_x="581dp"
-        android:layout_y="1283dp"
+        android:layout_x="576dp"
+        android:layout_y="1275dp"
+        android:textSize="30dp"
+        android:background="@drawable/button_radius"
         android:text="@string/issue_cancel" />
 
     <Button
@@ -32,23 +48,29 @@
         android:layout_width="300dp"
         android:layout_height="120dp"
         android:layout_x="576dp"
-        android:layout_y="1063dp"
+        android:layout_y="1059dp"
+        android:textSize="30dp"
+        android:background="@drawable/button_radius"
         android:text="@string/issue_door_not_open" />
 
     <Button
         android:id="@+id/issue_other"
         android:layout_width="300dp"
         android:layout_height="120dp"
-        android:layout_x="597dp"
-        android:layout_y="1539dp"
+        android:layout_x="576dp"
+        android:layout_y="1527dp"
+        android:textSize="30dp"
+        android:background="@drawable/button_radius"
         android:text="@string/issue_other" />
 
     <Button
         android:id="@+id/issue_open_again"
         android:layout_width="300dp"
         android:layout_height="120dp"
-        android:layout_x="113dp"
+        android:layout_x="109dp"
         android:layout_y="1275dp"
+        android:textSize="30dp"
+        android:background="@drawable/button_radius"
         android:text="@string/issue_open_again" />
 
 </AbsoluteLayout>

+ 90 - 63
app/src/main/res/layout/fragment_input_info.xml

@@ -1,130 +1,157 @@
 <?xml version="1.0" encoding="utf-8"?>
 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:focusable="true"
+    android:focusableInTouchMode="true">
+
+    <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
 
     <EditText
         android:id="@+id/mail_no"
-        android:layout_width="300dp"
+        android:layout_width="400dp"
         android:layout_height="80dp"
         android:layout_x="52dp"
         android:layout_y="1164dp"
         android:ems="10"
+        android:textSize="40dp"
         android:hint="@string/input_express_number"
         android:inputType="none" />
 
     <Button
-        android:id="@+id/input_button1"
-        android:layout_width="160dp"
+        android:id="@+id/button_confirm"
+        android:layout_width="470dp"
         android:layout_height="80dp"
-        android:layout_x="580dp"
-        android:layout_y="1132dp"
-        android:text="@string/number_1" />
+        android:layout_x="474dp"
+        android:layout_y="1451dp"
+        android:text="@string/confirm_btn"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/button_confirm"
-        android:layout_width="480dp"
+        android:id="@+id/input_button7"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="580dp"
-        android:layout_y="1455dp"
-        android:text="@string/confirm_btn" />
+        android:layout_x="474dp"
+        android:layout_y="1291dp"
+        android:text="@string/number_7"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button7"
-        android:layout_width="160dp"
+        android:id="@+id/input_button5"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="580dp"
-        android:layout_y="1295dp"
-        android:text="@string/number_7" />
+        android:layout_x="634dp"
+        android:layout_y="1211dp"
+        android:text="@string/number_5"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button2"
-        android:layout_width="160dp"
+        android:id="@+id/input_button9"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="740dp"
-        android:layout_y="1132dp"
-        android:text="@string/number_2" />
+        android:layout_x="794dp"
+        android:layout_y="1291dp"
+        android:text="@string/number_9"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button_cancel"
-        android:layout_width="320dp"
+        android:layout_width="310dp"
         android:layout_height="80dp"
-        android:layout_x="740dp"
-        android:layout_y="1375dp"
-        android:text="@string/cancel_btn" />
+        android:layout_x="634dp"
+        android:layout_y="1371dp"
+        android:text="@string/cancel_btn"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button8"
-        android:layout_width="160dp"
+        android:id="@+id/input_button0"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="740dp"
-        android:layout_y="1295dp"
-        android:text="@string/number_8" />
+        android:layout_x="474dp"
+        android:layout_y="1371dp"
+        android:text="@string/number_0"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button5"
-        android:layout_width="160dp"
+        android:id="@+id/input_button4"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="740dp"
-        android:layout_y="1215dp"
-        android:text="@string/number_5" />
+        android:layout_x="474dp"
+        android:layout_y="1211dp"
+        android:text="@string/number_4"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button3"
-        android:layout_width="160dp"
+        android:id="@+id/input_button8"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="900dp"
-        android:layout_y="1132dp"
-        android:text="@string/number_3" />
+        android:layout_x="634dp"
+        android:layout_y="1291dp"
+        android:text="@string/number_8"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button9"
-        android:layout_width="160dp"
+        android:id="@+id/input_button6"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="900dp"
-        android:layout_y="1295dp"
-        android:text="@string/number_9" />
+        android:layout_x="794dp"
+        android:layout_y="1211dp"
+        android:text="@string/number_6"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button6"
-        android:layout_width="160dp"
+        android:id="@+id/input_button2"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="900dp"
-        android:layout_y="1215dp"
-        android:text="@string/number_6" />
+        android:layout_x="634dp"
+        android:layout_y="1131dp"
+        android:text="@string/number_2"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button4"
-        android:layout_width="160dp"
+        android:id="@+id/input_button3"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="580dp"
-        android:layout_y="1215dp"
-        android:text="@string/number_4" />
+        android:layout_x="794dp"
+        android:layout_y="1131dp"
+        android:text="@string/number_3"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/input_button0"
-        android:layout_width="160dp"
+        android:id="@+id/input_button1"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="580dp"
-        android:layout_y="1375dp"
-        android:text="@string/number_0" />
+        android:layout_x="474dp"
+        android:layout_y="1131dp"
+        android:text="@string/number_1"
+        android:textSize="40dp" />
 
     <EditText
         android:id="@+id/deliverer_phone_confirm"
-        android:layout_width="300dp"
+        android:layout_width="400dp"
         android:layout_height="80dp"
         android:layout_x="52dp"
         android:layout_y="1264dp"
         android:ems="10"
+        android:textSize="40dp"
         android:hint="@string/input_recipients_phone"
         android:inputType="phone" />
 
     <EditText
         android:id="@+id/deliverer_phone"
-        android:layout_width="300dp"
+        android:layout_width="400dp"
         android:layout_height="80dp"
         android:layout_x="52dp"
         android:layout_y="1364dp"
+        android:textSize="40dp"
         android:ems="10"
         android:hint="@string/input_recipients_phone_confirm"
         android:inputType="phone" />

+ 19 - 16
app/src/main/res/layout/fragment_main.xml

@@ -7,17 +7,24 @@
         android:id="@+id/fast_take_send_bg"
         android:layout_width="500dp"
         android:layout_height="800dp"
-        android:layout_x="63dp"
-        android:layout_y="937dp"
-        android:background="@drawable/textview_border" />
+        android:layout_x="552dp"
+        android:layout_y="891dp"
+        android:background="@drawable/textview_border"
+        android:gravity="center_horizontal"
+        android:paddingTop="15dp"
+        android:text="@string/fast_take_or_send"
+        android:textSize="50sp" />
 
     <Button
         android:id="@+id/send_btn"
         android:layout_width="450dp"
         android:layout_height="250dp"
-        android:layout_x="631dp"
-        android:layout_y="937dp"
+        android:layout_x="48dp"
+        android:layout_y="891dp"
         android:background="@drawable/button_radius"
+        android:shadowColor="@color/black"
+        android:shadowDx="10"
+        android:shadowDy="40"
         android:text="@string/send_btn"
         android:textSize="30sp"
         android:textStyle="bold" />
@@ -26,8 +33,8 @@
         android:id="@+id/take_btn"
         android:layout_width="450dp"
         android:layout_height="250dp"
-        android:layout_x="631dp"
-        android:layout_y="1478dp"
+        android:layout_x="48dp"
+        android:layout_y="1431dp"
         android:background="@drawable/button_radius"
         android:text="@string/take_btn"
         android:textSize="30sp"
@@ -35,15 +42,11 @@
 
     <TextView
         android:id="@+id/fast_take_send"
-        android:layout_width="500dp"
-        android:layout_height="800dp"
-        android:layout_x="63dp"
-        android:layout_y="937dp"
-        android:background="@drawable/ic_launcher_foreground"
-        android:gravity="center_horizontal"
-        android:paddingTop="15dp"
-        android:text="@string/fast_take_or_send"
-        android:textSize="24sp" />
+        android:layout_width="460dp"
+        android:layout_height="460dp"
+        android:layout_x="573dp"
+        android:layout_y="1055dp"
+        android:background="@drawable/e_mp_qrcode_8x8" />
 
 
 </AbsoluteLayout>

+ 82 - 57
app/src/main/res/layout/fragment_send.xml

@@ -1,8 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:focusable="true"
+    android:focusableInTouchMode="true">
 
+    <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
 
     <!--  投递员密码  -->
 
@@ -15,111 +26,125 @@
         android:layout_height="80dp"
         android:layout_x="37dp"
         android:layout_y="1102dp"
+        android:textSize="40dp"
         android:ems="15"
         android:hint="@string/input_send_phone"
         android:inputType="number" />
 
     <Button
         android:id="@+id/input_button1"
-        android:layout_width="160dp"
-        android:layout_height="80dp"
-        android:layout_x="485dp"
-        android:layout_y="1071dp"
-        android:text="@string/number_1" />
-
-    <Button
-        android:id="@+id/input_button_confirm"
-        android:layout_width="480dp"
-        android:layout_height="80dp"
-        android:layout_x="485dp"
-        android:layout_y="1394dp"
-        android:text="@string/confirm_btn" />
-
-    <Button
-        android:id="@+id/input_button7"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="485dp"
-        android:layout_y="1234dp"
-        android:text="@string/number_7" />
+        android:layout_x="424dp"
+        android:layout_y="1093dp"
+        android:text="@string/number_1"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button2"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="645dp"
-        android:layout_y="1071dp"
-        android:text="@string/number_2" />
+        android:layout_x="584dp"
+        android:layout_y="1093dp"
+        android:text="@string/number_2"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button_cancel"
-        android:layout_width="320dp"
+        android:layout_width="310dp"
         android:layout_height="80dp"
-        android:layout_x="645dp"
-        android:layout_y="1314dp"
-        android:text="@string/cancel_btn" />
+        android:layout_x="584dp"
+        android:layout_y="1333dp"
+        android:text="@string/cancel_btn"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button8"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="645dp"
-        android:layout_y="1234dp"
-        android:text="@string/number_8" />
+        android:layout_x="584dp"
+        android:layout_y="1253dp"
+        android:text="@string/number_8"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button5"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="645dp"
-        android:layout_y="1154dp"
-        android:text="@string/number_5" />
+        android:layout_x="584dp"
+        android:layout_y="1173dp"
+        android:text="@string/number_5"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button3"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="805dp"
-        android:layout_y="1071dp"
-        android:text="@string/number_3" />
+        android:layout_x="744dp"
+        android:layout_y="1093dp"
+        android:text="@string/number_3"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button9"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="805dp"
-        android:layout_y="1234dp"
-        android:text="@string/number_9" />
+        android:layout_x="744dp"
+        android:layout_y="1253dp"
+        android:text="@string/number_9"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button6"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="805dp"
-        android:layout_y="1154dp"
-        android:text="@string/number_6" />
+        android:layout_x="744dp"
+        android:layout_y="1173dp"
+        android:text="@string/number_6"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button4"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="485dp"
-        android:layout_y="1154dp"
-        android:text="@string/number_4" />
+        android:layout_x="424dp"
+        android:layout_y="1173dp"
+        android:text="@string/number_4"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/input_button0"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
+        android:layout_height="80dp"
+        android:layout_x="424dp"
+        android:layout_y="1333dp"
+        android:text="@string/number_0"
+        android:textSize="40dp" />
+
+    <Button
+        android:id="@+id/input_button_confirm"
+        android:layout_width="470dp"
+        android:layout_height="80dp"
+        android:layout_x="424dp"
+        android:layout_y="1413dp"
+        android:text="@string/confirm_btn"
+        android:textSize="40dp" />
+
+    <Button
+        android:id="@+id/input_button7"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="485dp"
-        android:layout_y="1314dp"
-        android:text="@string/number_0" />
+        android:layout_x="424dp"
+        android:layout_y="1253dp"
+        android:text="@string/number_7"
+        android:textSize="40dp" />
 
     <EditText
         android:id="@+id/editTextTextPersonName5"
         android:layout_width="300dp"
         android:layout_height="80dp"
         android:layout_x="37dp"
+        android:textSize="40dp"
         android:layout_y="1303dp"
         android:ems="15"
         android:hint="@string/input_send_password"

+ 73 - 52
app/src/main/res/layout/fragment_send_info_confirm.xml

@@ -4,83 +4,104 @@
     android:layout_height="match_parent">
 
     <TextView
-        android:id="@+id/open_cabinet_hint1"
-        android:layout_width="352dp"
-        android:layout_height="403dp"
-        android:layout_x="493dp"
-        android:layout_y="781dp"
-        android:text="@string/open_cabinet_hint_ok" />
-
-    <TextView
-        android:id="@+id/take_no_hint"
-        android:layout_width="202dp"
-        android:layout_height="111dp"
-        android:layout_x="325dp"
-        android:layout_y="1253dp"
-        android:text="@string/take_no_hint" />
+        android:id="@+id/take_no"
+        android:layout_width="500dp"
+        android:layout_height="110dp"
+        android:layout_x="422dp"
+        android:layout_y="1275dp"
+        android:gravity="center"
+        android:text="@string/take_no"
+        android:textSize="30dp" />
 
     <TextView
-        android:id="@+id/take_no"
-        android:layout_width="700dp"
-        android:layout_height="179dp"
-        android:layout_x="553dp"
-        android:layout_y="1209dp"
-        android:text="@string/take_no" />
+        android:id="@+id/open_cabinet_hint1"
+        android:layout_width="329dp"
+        android:layout_height="89dp"
+        android:layout_x="387dp"
+        android:layout_y="803dp"
+        android:gravity="center_horizontal"
+        android:text="@string/open_cabinet_hint_ok"
+        android:textSize="50dp" />
 
     <TextView
-        android:id="@+id/open_cabinet_hint2"
-        android:layout_width="544dp"
-        android:layout_height="107dp"
-        android:layout_x="389dp"
-        android:layout_y="1077dp"
-        android:text="@string/open_cabinet_hint" />
+        android:id="@+id/take_no_hint"
+        android:layout_width="200dp"
+        android:layout_height="110dp"
+        android:layout_x="219dp"
+        android:layout_y="1275dp"
+        android:gravity="center"
+        android:text="@string/take_no_hint"
+        android:textSize="30dp" />
 
     <TextView
         android:id="@+id/take_number"
-        android:layout_width="687dp"
-        android:layout_height="139dp"
-        android:layout_x="561dp"
-        android:layout_y="1445dp"
-        android:text="@string/take_number" />
+        android:layout_width="500dp"
+        android:layout_height="110dp"
+        android:layout_x="422dp"
+        android:layout_y="1467dp"
+        android:gravity="center"
+        android:text="@string/take_number"
+        android:textSize="30dp" />
 
     <TextView
         android:id="@+id/open_cabinet_no"
         android:layout_width="329dp"
         android:layout_height="179dp"
-        android:layout_x="497dp"
-        android:layout_y="865dp"
-        android:text="@string/open_cabinet_no" />
+        android:layout_x="391dp"
+        android:layout_y="887dp"
+        android:gravity="center"
+        android:text="@string/open_cabinet_no"
+        android:textColor="@color/cardview_dark_background"
+        android:textSize="80dp" />
 
     <Button
         android:id="@+id/already_send"
         android:layout_width="272dp"
         android:layout_height="143dp"
-        android:layout_x="282dp"
-        android:layout_y="1665dp"
-        android:text="@string/already_send" />
+        android:layout_x="176dp"
+        android:layout_y="1687dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/already_send"
+        android:textSize="50dp" />
 
     <Button
         android:id="@+id/none_send"
         android:layout_width="272dp"
         android:layout_height="143dp"
-        android:layout_x="813dp"
-        android:layout_y="1672dp"
-        android:text="@string/none_send" />
+        android:layout_x="707dp"
+        android:layout_y="1687dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/none_send"
+        android:textSize="50dp" />
+
+    <TextView
+        android:id="@+id/take_number_hint"
+        android:layout_width="200dp"
+        android:layout_height="110dp"
+        android:layout_x="219dp"
+        android:layout_y="1467dp"
+        android:gravity="center"
+        android:text="@string/take_number_hint"
+        android:textSize="30dp" />
+
+    <TextView
+        android:id="@+id/open_cabinet_hint2"
+        android:layout_width="544dp"
+        android:layout_height="107dp"
+        android:layout_x="306dp"
+        android:layout_y="1100dp"
+        android:gravity="center_horizontal"
+        android:text="@string/open_cabinet_hint"
+        android:textSize="30dp" />
 
     <Button
         android:id="@+id/exception_btn"
-        android:layout_width="365dp"
+        android:layout_width="350dp"
         android:layout_height="150dp"
-        android:layout_x="-3dp"
-        android:layout_y="837dp"
-        android:text="@string/exception_btn" />
-
-    <TextView
-        android:id="@+id/take_number_hint"
-        android:layout_width="208dp"
-        android:layout_height="137dp"
-        android:layout_x="325dp"
-        android:layout_y="1445dp"
-        android:text="@string/take_number_hint" />
+        android:layout_x="-40dp"
+        android:layout_y="836dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/exception_btn"
+        android:textSize="50dp" />
 
 </AbsoluteLayout>

+ 16 - 2
app/src/main/res/layout/fragment_send_main.xml

@@ -4,12 +4,24 @@
     android:layout_height="match_parent">
 
     <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
+
+    <Button
         android:id="@+id/send_confirm_btn"
         android:layout_width="250dp"
         android:layout_height="250dp"
         android:layout_x="129dp"
         android:layout_y="936dp"
-        android:text="@string/send_confirm" />
+        android:text="@string/send_confirm"
+        android:background="@drawable/button_radius"
+        android:textSize="50dp"/>
 
     <Button
         android:id="@+id/exception_handle_btn"
@@ -17,5 +29,7 @@
         android:layout_height="250dp"
         android:layout_x="469dp"
         android:layout_y="936dp"
-        android:text="@string/exception_handle" />
+        android:text="@string/exception_handle"
+        android:background="@drawable/button_radius"
+        android:textSize="50dp" />
 </AbsoluteLayout>

+ 19 - 15
app/src/main/res/layout/fragment_send_success.xml

@@ -4,30 +4,34 @@
     android:layout_height="match_parent">
 
 
+    <Button
+        android:id="@+id/exit_account_btn"
+        android:layout_width="272dp"
+        android:layout_height="143dp"
+        android:layout_x="567dp"
+        android:layout_y="1438dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/exit_account"
+        android:textSize="50dp" />
+
     <TextView
         android:id="@+id/textView4"
         android:layout_width="644dp"
         android:layout_height="381dp"
-        android:layout_x="126dp"
-        android:layout_y="1105dp"
-        android:textSize="50dp"
+        android:layout_x="140dp"
+        android:layout_y="1000dp"
         android:gravity="center_horizontal"
-        android:text="@string/send_success" />
+        android:text="@string/send_success"
+        android:textSize="80dp" />
 
     <Button
         android:id="@+id/continue_send_btn"
         android:layout_width="272dp"
         android:layout_height="143dp"
-        android:layout_x="126dp"
-        android:layout_y="1687dp"
-        android:text="@string/continue_send" />
-
-    <Button
-        android:id="@+id/exit_account_btn"
-        android:layout_width="272dp"
-        android:layout_height="143dp"
-        android:layout_x="653dp"
-        android:layout_y="1687dp"
-        android:text="@string/exit_account" />
+        android:layout_x="125dp"
+        android:layout_y="1444dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/continue_send"
+        android:textSize="50dp" />
 
 </AbsoluteLayout>

+ 47 - 28
app/src/main/res/layout/fragment_take.xml

@@ -3,45 +3,64 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <TextView
-        android:id="@+id/fast_take_send_bg1"
-        android:layout_width="500dp"
-        android:layout_height="800dp"
-        android:layout_x="66dp"
-        android:layout_y="882dp"
-        android:background="@drawable/textview_border" />
-
-    <TextView
-        android:id="@+id/textView"
-        android:layout_width="500dp"
-        android:layout_height="800dp"
-        android:layout_x="66dp"
-        android:layout_y="882dp"
-        android:text="@string/wx_scan_take" />
+    <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
 
     <Button
         android:id="@+id/to_input_take_code_btn"
-        android:layout_width="651dp"
-        android:layout_height="181dp"
-        android:layout_x="596dp"
-        android:layout_y="1457dp"
-        android:text="@string/android_take" />
+        android:layout_width="500dp"
+        android:layout_height="150dp"
+        android:layout_x="553dp"
+        android:layout_y="1315dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/android_take"
+        android:textSize="50dp" />
 
     <TextView
         android:id="@+id/textView3"
-        android:layout_width="651dp"
+        android:layout_width="500dp"
         android:layout_height="181dp"
-        android:layout_x="588dp"
-        android:layout_y="1210dp"
-        android:text="@string/prompt_word_bottom" />
+        android:layout_x="553dp"
+        android:layout_y="1068dp"
+        android:gravity="center"
+        android:text="@string/prompt_word_bottom"
+        android:textSize="50dp" />
 
     <TextView
         android:id="@+id/textView2"
-        android:layout_width="651dp"
+        android:layout_width="500dp"
         android:layout_height="181dp"
         android:layout_marginEnd="160dp"
-        android:layout_x="593dp"
-        android:layout_y="1002dp"
-        android:text="@string/prompt_word_top" />
+        android:layout_x="553dp"
+        android:layout_y="860dp"
+        android:gravity="center"
+        android:text="@string/prompt_word_top"
+        android:textSize="50dp" />
+
+    <TextView
+        android:id="@+id/fast_take_send_bg1"
+        android:layout_width="500dp"
+        android:layout_height="800dp"
+        android:layout_x="34dp"
+        android:layout_y="870dp"
+        android:background="@drawable/textview_border"
+        android:gravity="center_horizontal"
+        android:text="@string/wx_scan_take"
+        android:textSize="60dp" />
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="460dp"
+        android:layout_height="460dp"
+        android:layout_x="53dp"
+        android:layout_y="1057dp"
+        android:background="@drawable/e_mp_qrcode_8x8" />
 
 </AbsoluteLayout>

+ 99 - 76
app/src/main/res/layout/fragment_take_code.xml

@@ -1,133 +1,156 @@
 <?xml version="1.0" encoding="utf-8"?>
 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:focusable="true"
+    android:focusableInTouchMode="true">
 
+    <Button
+        android:id="@+id/return_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_btn"
+        android:textSize="30dp" />
 
     <TextView
-        android:id="@+id/fast_take_send"
+        android:id="@+id/fast_take_send_bg1"
         android:layout_width="500dp"
         android:layout_height="800dp"
-        android:layout_x="37dp"
-        android:layout_y="824dp"
-        android:background="@drawable/ic_launcher_foreground"
+        android:layout_x="28dp"
+        android:layout_y="841dp"
+        android:background="@drawable/textview_border"
         android:gravity="center_horizontal"
-        android:paddingTop="15dp"
-        android:text="@string/fast_take_or_send"
-        android:textSize="24sp" />
-
-    <Button
-        android:id="@+id/take_input_button2"
-        android:layout_width="160dp"
-        android:layout_height="80dp"
-        android:layout_x="772dp"
-        android:layout_y="945dp"
-        android:text="@string/number_2" />
+        android:text="@string/wx_scan_take"
+        android:textSize="60dp" />
 
-    <Button
-        android:id="@+id/take_input_button1"
-        android:layout_width="160dp"
-        android:layout_height="80dp"
-        android:layout_x="612dp"
-        android:layout_y="945dp"
-        android:text="@string/number_1" />
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="460dp"
+        android:layout_height="460dp"
+        android:layout_x="48dp"
+        android:layout_y="1029dp"
+        android:background="@drawable/e_mp_qrcode_8x8" />
 
     <Button
-        android:id="@+id/take_input_button_confirm"
-        android:layout_width="480dp"
+        android:id="@+id/take_input_button_cancel"
+        android:layout_width="310dp"
         android:layout_height="80dp"
-        android:layout_x="612dp"
-        android:layout_y="1269dp"
-        android:text="@string/confirm_open_door_btn" />
+        android:layout_x="711dp"
+        android:layout_y="1241dp"
+        android:text="@string/cancel_btn"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button7"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="612dp"
-        android:layout_y="1109dp"
-        android:text="@string/number_7" />
+        android:layout_x="551dp"
+        android:layout_y="1161dp"
+        android:text="@string/number_7"
+        android:textSize="40dp" />
 
     <Button
-        android:id="@+id/take_input_button8"
-        android:layout_width="160dp"
+        android:id="@+id/take_input_button2"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="772dp"
-        android:layout_y="1109dp"
-        android:text="@string/number_8" />
+        android:layout_x="711dp"
+        android:layout_y="1001dp"
+        android:text="@string/number_2"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button5"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="772dp"
-        android:layout_y="1029dp"
-        android:text="@string/number_5" />
+        android:layout_x="711dp"
+        android:layout_y="1081dp"
+        android:text="@string/number_5"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button3"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="932dp"
-        android:layout_y="945dp"
-        android:text="@string/number_3" />
+        android:layout_x="871dp"
+        android:layout_y="1001dp"
+        android:text="@string/number_3"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button9"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="932dp"
-        android:layout_y="1109dp"
-        android:text="@string/number_9" />
+        android:layout_x="871dp"
+        android:layout_y="1161dp"
+        android:text="@string/number_9"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button6"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="932dp"
-        android:layout_y="1029dp"
-        android:text="@string/number_6" />
+        android:layout_x="871dp"
+        android:layout_y="1081dp"
+        android:text="@string/number_6"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button4"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="612dp"
-        android:layout_y="1029dp"
-        android:text="@string/number_4" />
+        android:layout_x="551dp"
+        android:layout_y="1081dp"
+        android:text="@string/number_4"
+        android:textSize="40dp" />
 
     <Button
         android:id="@+id/take_input_button0"
-        android:layout_width="160dp"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="612dp"
-        android:layout_y="1189dp"
-        android:text="@string/number_0" />
+        android:layout_x="551dp"
+        android:layout_y="1241dp"
+        android:text="@string/number_0"
+        android:textSize="40dp" />
+
+    <Button
+        android:id="@+id/take_input_button_confirm"
+        android:layout_width="470dp"
+        android:layout_height="80dp"
+        android:layout_x="551dp"
+        android:layout_y="1321dp"
+        android:text="@string/confirm_btn"
+        android:textSize="40dp" />
 
     <EditText
         android:id="@+id/editTextTextPersonName6"
-        android:layout_width="480dp"
+        android:layout_width="470dp"
         android:layout_height="80dp"
-        android:layout_x="612dp"
-        android:layout_y="825dp"
+        android:layout_x="551dp"
+        android:layout_y="893dp"
         android:ems="15"
+        android:textSize="40dp"
         android:hint="@string/input_take_code"
         android:inputType="phone" />
 
     <Button
-        android:id="@+id/take_input_button_cancel"
-        android:layout_width="320dp"
+        android:id="@+id/take_input_button1"
+        android:layout_width="150dp"
         android:layout_height="80dp"
-        android:layout_x="772dp"
-        android:layout_y="1189dp"
-        android:text="@string/cancel_btn" />
+        android:layout_x="551dp"
+        android:layout_y="1001dp"
+        android:text="@string/number_1"
+        android:textSize="40dp" />
 
-    <TextView
-        android:id="@+id/fast_take_send_bg"
-        android:layout_width="500dp"
-        android:layout_height="800dp"
-        android:layout_x="37dp"
-        android:layout_y="824dp"
-        android:background="@drawable/textview_border" />
+    <Button
+        android:id="@+id/take_input_button8"
+        android:layout_width="150dp"
+        android:layout_height="80dp"
+        android:layout_x="711dp"
+        android:layout_y="1161dp"
+        android:text="@string/number_8"
+        android:textSize="40dp" />
 
 </AbsoluteLayout>

+ 68 - 0
app/src/main/res/layout/fragment_take_success.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:focusable="true"
+    android:focusableInTouchMode="true">
+
+
+    <Button
+        android:id="@+id/return_main_btn"
+        android:layout_width="115dp"
+        android:layout_height="70dp"
+        android:layout_x="165dp"
+        android:layout_y="1732dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/return_main_btn"
+        android:textSize="50dp" />
+
+    <TextView
+        android:id="@+id/open_cabinet_count_down_hint"
+        android:layout_width="475dp"
+        android:layout_height="300dp"
+        android:layout_x="158dp"
+        android:layout_y="941dp"
+        android:gravity="center"
+        android:textSize="50dp" />
+
+    <TextView
+        android:id="@+id/open_cabinet_hint3"
+        android:layout_width="475dp"
+        android:layout_height="300dp"
+        android:layout_x="158dp"
+        android:layout_y="941dp"
+        android:gravity="center_horizontal"
+        android:text="@string/open_cabinet_hint_ok"
+        android:textSize="50dp" />
+
+    <TextView
+        android:id="@+id/open_cabinet_hint_no"
+        android:layout_width="475dp"
+        android:layout_height="300dp"
+        android:layout_x="158dp"
+        android:layout_y="941dp"
+        android:gravity="center"
+        android:text="006"
+        android:textSize="100dp" />
+
+    <Button
+        android:id="@+id/re_open_cabinet_btn"
+        android:layout_width="272dp"
+        android:layout_height="143dp"
+        android:layout_x="71dp"
+        android:layout_y="1266dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/re_open_cabinet"
+        android:textSize="50dp" />
+
+    <Button
+        android:id="@+id/continue_take_btn"
+        android:layout_width="272dp"
+        android:layout_height="143dp"
+        android:layout_x="412dp"
+        android:layout_y="1266dp"
+        android:background="@drawable/button_radius"
+        android:text="@string/continue_take"
+        android:textSize="50dp" />
+
+</AbsoluteLayout>

+ 1 - 5
app/src/main/res/menu/menu_main.xml

@@ -2,9 +2,5 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     tools:context="com.emato.ich.MainActivity">
-    <item
-        android:id="@+id/action_settings"
-        android:orderInCategory="100"
-        android:title="@string/action_settings"
-        app:showAsAction="never" />
+
 </menu>

+ 50 - 0
app/src/main/res/navigation/nav_graph.xml

@@ -30,6 +30,9 @@
         <action
             android:id="@+id/action_sendFragment_to_sendMainFragment"
             app:destination="@id/SendMainFragment" />
+        <action
+            android:id="@+id/action_sendFragment_to_mainFragment"
+            app:destination="@id/MainFragment" />
     </fragment>
 
     <!--  输入投递信息  -->
@@ -42,6 +45,9 @@
         <action
             android:id="@+id/action_inputInfoFragment_to_sendInfoConfirmFragment"
             app:destination="@id/SendInfoConfirmFragment" />
+        <action
+            android:id="@+id/action_inputInfoFragment_to_chooseCabinetFragment"
+            app:destination="@id/ChooseCabinetFragment"/>
     </fragment>
 
     <!--  取件页面  -->
@@ -54,6 +60,10 @@
         <action
             android:id="@+id/action_takeFragment_to_takeCodeFragment"
             app:destination="@id/TakeCodeFragment" />
+
+        <action
+            android:id="@+id/action_takeFragment_to_mainFragment"
+            app:destination="@id/MainFragment" />
     </fragment>
 
     <!--  输入取件码页面  -->
@@ -63,6 +73,12 @@
         android:label=""
         tools:layout="@layout/fragment_take_code">
 
+        <action
+            android:id="@+id/action_takeCodeFragment_to_takeFragment"
+            app:destination="@id/TakeFragment"/>
+        <action
+            android:id="@+id/action_takeCodeFragment_to_takeSuccessFragment"
+            app:destination="@id/TakeSuccessFragment"/>
     </fragment>
 
     <!--  选择投递还是异常处理  -->
@@ -78,6 +94,9 @@
         <action
             android:id="@+id/action_sendMainFragment_to_exceptionFragment"
             app:destination="@id/ExceptionFragment"/>
+        <action
+            android:id="@+id/action_sendMainFragment_to_sendFragment"
+            app:destination="@id/SendFragment"/>
     </fragment>
 
     <!--  选择柜子类型  -->
@@ -93,6 +112,13 @@
         <action
             android:id="@+id/action_chooseCabinetFragment_to_sendInfoConfirmFragment"
             app:destination="@id/SendInfoConfirmFragment"/>
+
+        <action
+            android:id="@+id/action_chooseCabinetFragment_to_exceptionFragment"
+            app:destination="@id/ExceptionFragment"/>
+        <action
+            android:id="@+id/action_chooseCabinetFragment_to_sendMainFragment"
+            app:destination="@id/SendMainFragment"/>
     </fragment>
 
     <!--  常见问题解决页面  -->
@@ -108,6 +134,12 @@
         <action
             android:id="@+id/actionExceptionFragment_to_mainFragment"
             app:destination="@id/MainFragment"/>
+        <action
+            android:id="@+id/action_exceptionFragment_to_sendMainFragment"
+            app:destination="@id/SendMainFragment"/>
+        <action
+            android:id="@+id/action_exceptionFragment_to_sendInfoConfirmMainFragment"
+            app:destination="@id/SendInfoConfirmFragment"/>
     </fragment>
 
     <!--  投递确认页面  -->
@@ -120,6 +152,9 @@
         <action
             android:id="@+id/action_sendInfoConfirmFragment_to_exceptionFragment"
             app:destination="@id/ExceptionFragment"/>
+        <action
+            android:id="@+id/action_sendInfoConfirmFragment_to_sendSuccessFragment"
+            app:destination="@id/SendSuccessFragment"/>
     </fragment>
 
     <!--  投递成功页  -->
@@ -137,4 +172,19 @@
             android:id="@+id/action_sendSuccessFragment_to_mainFragment"
             app:destination="@id/MainFragment"/>
     </fragment>
+
+    <!--  取件成功提示页  -->
+    <fragment
+        android:id="@+id/TakeSuccessFragment"
+        android:name="com.emato.ich.fragment.TakeSuccessFragment"
+        android:label=""
+        tools:layout="@layout/fragment_take_success">
+
+        <action
+            android:id="@+id/action_takeSuccessFragment_to_mainFragment"
+            app:destination="@id/MainFragment"/>
+        <action
+            android:id="@+id/action_takeSuccessFragment_to_takeCodeFragment"
+            app:destination="@id/TakeCodeFragment"/>
+    </fragment>
 </navigation>

+ 2 - 0
app/src/main/res/values/colors.xml

@@ -10,4 +10,6 @@
     <color name="send_btn">#44CE3B</color>
     <color name="take_btn">#EBBA3A</color>
     <color name="main_label_bg">#4E4C4D</color>
+    <color name="choose_cabinet_view">#B2DDAF</color>
+
 </resources>

+ 6 - 2
app/src/main/res/values/strings.xml

@@ -32,7 +32,7 @@
     <string name="prompt_word_bottom">请使用微信扫码取件</string>
     <string name="send_fragment_label">快速投递</string>
     <string name="send_confirm">极速投件</string>
-    <string name="exception_handle">投递异常处理</string>
+    <string name="exception_handle">投递异常</string>
     <string name="send_main">快递员主页</string>
     <string name="tiny_cabinet">微小柜</string>
     <string name="small_cabinet">小柜</string>
@@ -70,7 +70,11 @@
     <string name="login_failed">"Login failed"</string>
     <string name="input_send_phone">请输入投递员手机号</string>
     <string name="confirm_open_door_btn">开门</string>
-    <string name="send_success">感谢您使用ICSP智能柜,请选择继续投递或退出账号</string>
+    <string name="send_success">当前操作已完成</string>
     <string name="continue_send">继续投递</string>
     <string name="exit_account">退出账号</string>
+    <string name="return_btn">返回</string>
+    <string name="return_main_btn">返回主页</string>
+    <string name="continue_take">继续取件</string>
+    <string name="re_open_cabinet">再开一次</string>
 </resources>